当用户发送消息给服务号时（或某些特定的用户操作引发的事件推送时），会产生一个POST请求，开发者可以在响应包（Get）中返回特定XML结构，来对该消息进行响应（现支持回复文本、图片、图文、语音、视频、音乐）。严格来说，发送被动响应消息其实并不是一种接口，而是对微信服务器发过来消息的一次回复。

微信服务器在将用户的消息发给服务号的开发者服务器地址（配置路径：[微信开发者平台](https://developers.weixin.qq.com/platform) - 我的业务 - 服务号 - 开发信息）后，微信服务器在五秒内收不到响应会断掉连接，并且重新发起请求，总共重试三次，如果在调试中，发现用户无法收到响应的消息，可以检查是否消息处理超时。关于重试的消息排重，有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

如果开发者希望增强安全性，可以在开发者中心处开启消息加密，这样，用户发给服务号的消息以及服务号被动回复用户消息都会继续加密，详细介绍可查看[消息加解密说明](/doc/service/guide/dev/push/encryption)。

假如服务器无法保证在五秒内处理并回复，必须做出下述回复，这样微信服务器才不会对此作任何处理，并且不会发起重试（这种情况下，可以使用客服消息接口进行异步回复），否则，将出现严重的错误提示。详见下面说明：

1、直接回复success（推荐方式） 2、直接回复空串（指字节长度为0的空字符串，而不是XML结构体中content字段的内容为空）

**一旦遇到以下情况，微信都会在服务号会话中，向用户下发系统提示“该服务号暂时无法提供服务，请稍后再试”：**

1、开发者在5秒内未回复任何内容 2、开发者回复了异常数据，比如JSON数据等

另外，请注意，回复图片（不支持gif动图）等多媒体消息时需要预先通过素材管理接口上传临时素材到微信服务器，可以使用素材管理中的临时素材，也可以使用永久素材。

各消息类型需要的XML数据包结构如下：

目录

1 回复文本消息

2 回复图片消息

3 回复语音消息

4 回复视频消息

5 回复音乐消息

6 回复图文消息

7 转接AI回复

## 回复文本消息

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[你好]]></Content>
</xml>

```

| 参数 | 是否必须 | 描述 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间 （整型） |
| MsgType | 是 | 消息类型，文本为text |
| Content | 是 | 回复的消息内容（换行：在content中能够换行，微信客户端就支持换行显示） |

## 回复图片消息

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[image]]></MsgType>
  <Image>
    <MediaId><![CDATA[media_id]]></MediaId>
  </Image>
</xml>

```

| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间 （整型） |
| MsgType | 是 | 消息类型，图片为image |
| MediaId | 是 | 通过素材管理中的接口上传多媒体文件，得到的id。 |

## 回复语音消息

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[voice]]></MsgType>
  <Voice>
    <MediaId><![CDATA[media_id]]></MediaId>
  </Voice>
</xml>

```

| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间戳 （整型） |
| MsgType | 是 | 消息类型，语音为voice |
| MediaId | 是 | 通过素材管理中的接口上传多媒体文件，得到的id |

## 回复视频消息

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[video]]></MsgType>
  <Video>
    <MediaId><![CDATA[media_id]]></MediaId>
    <Title><![CDATA[title]]></Title>
    <Description><![CDATA[description]]></Description>
  </Video>
</xml>

```

| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间 （整型） |
| MsgType | 是 | 消息类型，视频为video |
| MediaId | 是 | 通过素材管理中的接口上传多媒体文件，得到的id |
| Title | 否 | 视频消息的标题 |
| Description | 否 | 视频消息的描述 |

## 回复音乐消息

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[music]]></MsgType>
  <Music>
    <Title><![CDATA[TITLE]]></Title>
    <Description><![CDATA[DESCRIPTION]]></Description>
    <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
    <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
    <ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
  </Music>
</xml>

```

| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间 （整型） |
| MsgType | 是 | 消息类型，音乐为music |
| Title | 否 | 音乐标题 |
| Description | 否 | 音乐描述 |
| MusicURL | 否 | 音乐链接 |
| HQMusicUrl | 否 | 高质量音乐链接，WIFI环境优先使用该链接播放音乐 |
| ThumbMediaId | 是 | 缩略图的媒体id，通过素材管理中的接口上传多媒体文件，得到的id |

## 回复图文消息

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[news]]></MsgType>
  <ArticleCount>1</ArticleCount>
  <Articles>
    <item>
      <Title><![CDATA[title1]]></Title>
      <Description><![CDATA[description1]]></Description>
      <PicUrl><![CDATA[picurl]]></PicUrl>
      <Url><![CDATA[url]]></Url>
    </item>
  </Articles>
</xml>

```

| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间 （整型） |
| MsgType | 是 | 消息类型，图文为news |
| ArticleCount | 是 | 图文消息个数；当用户发送文本、图片、语音、视频、图文、地理位置这六种消息时，开发者只能回复1条图文消息；其余场景最多可回复8条图文消息 |
| Articles | 是 | 图文消息信息，注意，如果图文数超过限制，则将只发限制内的条数 |
| Title | 是 | 图文消息标题 |
| Description | 是 | 图文消息描述 |
| PicUrl | 是 | 图片链接，支持JPG、PNG格式，较好的效果为大图360\*200，小图200\*200 |
| Url | 是 | 点击图文消息跳转链接 |

## 转接AI回复

当用户发送消息给服务号时，服务号开发者服务器回复如下内容，会触发微信公众平台的AI回复。 
注意，需要服务号在微信公众平台上已开启AI回复功能，并且AI已学习完毕历史发表文章。AI回复功能目前在灰度过程中。

```xml
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[transfer_biz_ai_ivr]]></MsgType>
</xml>

```

| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| ToUserName | 是 | 接收方账号（收到的OpenID） |
| FromUserName | 是 | 开发者微信号 |
| CreateTime | 是 | 消息创建时间 （整型） |
| MsgType | 是 | 消息类型，固定值 transfer_biz_ai_ivr |
