接收消息和事件
在页面中使用 <button open-type="contact" />
可以显示进入客服会话按钮。
当用户在客服会话发送消息(或进行某些特定的用户操作引发的事件推送时),微信服务器会将消息(或事件)的数据包(JSON或者XML格式)POST请求开发者填写的URL。开发者收到请求后可以使用发送客服消息接口进行异步回复。
微信服务器在将用户的消息发给小程序的开发者服务器地址(开发设置处配置)后,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。
服务器收到请求必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试,否则,将出现严重的错误提示。详见下面说明:
1、直接回复success(推荐方式)
2、直接回复空串(指字节长度为0的空字符串,而不是结构体中content字段的内容为空)
一旦遇到以下情况,微信都会在小程序会话中,向用户下发系统提示“该小程序客服暂时无法提供服务,请稍后再试”:
1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据
各消息类型的推送JSON、XML数据包结构如下。
文本消息:
用户在客服会话中发送文本消息时将产生如下数据包:
XML 格式
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
JSON 格式
{
"ToUserName": "toUser", //小程序的原始ID "FromUserName": "fromUser", //发送者的openid "CreateTime": 1482048670, //消息创建时间(整型) "MsgType": "text", //消息类型 "Content": "this is a test", //文本消息内容 "MsgId": 1234567890123456 //消息id,64位整形 }
图片消息
用户在客服会话中发送图片消息时将产生如下数据包:
XML 格式
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml>
JSON 格式
{
"ToUserName": "toUser", //小程序的原始ID "FromUserName": "fromUser", //发送者的openid "CreateTime": 1482048670, //消息创建时间(整型) "MsgType": "image", //消息类型 "PicUrl": "this is a url", //图片链接(由系统生成) "MediaId": "media_id", //图片消息媒体id,可以调用获取临时素材接口拉取数据 "MsgId": 1234567890123456 //消息id,64位整型 }
图片消息
用户在客服会话中发送图片消息时将产生如下数据包:
XML 格式
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml>
JSON 格式
{
"ToUserName": "toUser", //小程序的原始ID "FromUserName": "fromUser", //发送者的openid "CreateTime": 1482048670, //消息创建时间(整型) "MsgType": "image", //消息类型 "PicUrl": "this is a url", //图片链接(由系统生成) "MediaId": "media_id", //图片消息媒体id,可以调用获取临时素材接口拉取数据。 "MsgId": 1234567890123456 //消息id,64位整型 }
小程序卡片消息
用户在客服会话中发送小程序卡片消息时将产生如下数据包:
XML 格式
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[miniprogrampage]]></MsgType> <MsgId>1234567890123456</MsgId> <Title><![CDATA[Title]]></Title> <AppId><![CDATA[AppId]]></AppId> <PagePath><![CDATA[PagePath]]></PagePath> <ThumbUrl><![CDATA[ThumbUrl]]></ThumbUrl> <ThumbMediaId><![CDATA[ThumbMediaId]]></ThumbMediaId> </xml>
JSON 格式
{
"ToUserName": "toUser", //小程序的原始ID "FromUserName": "fromUser", // 发送者的openid "CreateTime": 1482048670, // 消息创建时间(整型) "MsgType": "miniprogrampage", // 消息类型 "MsgId": 1234567890123456, // 消息id,64位整型 "Title":"title", // 标题 "AppId":"appid", // 小程序appid "PagePath":"path", // 小程序页面路径 "ThumbUrl":"", // 封面图片的临时cdn链接 "ThumbMediaId":"" // 封面图片的临时素材id }
进入会话事件
用户在小程序“客服会话按钮”进入客服会话时将产生如下数据包:
XML 格式
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[user_enter_tempsession]]></Event> <SessionFrom><![CDATA[sessionFrom]]></SessionFrom> </xml>
JSON 格式
{
"ToUserName": "toUser", //小程序的原始ID "FromUserName": "fromUser", //发送者的openid "CreateTime": 1482048670, //事件创建时间(整型) "MsgType": "event", //消息类型 "Event": "user_enter_tempsession", //事件类型,user_enter_tempsession "SessionFrom": "sessionFrom" //开发者在客服会话按钮设置的session-from属性 }
发送客服消息
http请求方式:POST
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
各种消息的数据包JSON如下:
发送文本消息:
{
"access_token":"ACCESS_TIKEN", //接口调用凭证
"tourse":"OPENID", //发送者的openid,即接收到的
FromUserName
"msgtype":"text", //消息类型
"text":{
"content":"content" //文本内容
}
}
发送图片消息:
{
"access_token":"ACCESS_TIKEN", //接口调用凭证
"tourse":"OPENID", //发送者的openid,即接收到的FromUserName
"msgtype":"image", //消息类型
"image":{
"media_id":"media_id" //文本内容
}
}
发送图文连接:
{
"access_token":"ACCESS_TIKEN", //接口调用凭证
"tourse":"OPENID", //发送者的openid,即接收到的FromUserName
"msgtype":"link", //消息类型
"link":{
"title":"title", //消息标题
"description":"description", //图文链接消息
"url":"url", //图文链接被点击后跳转的链接
"thumb_url":"thumb_url" //封面图片的临时cdn链接}
}
发送小程序卡片:
{
"access_token":"ACCESS_TIKEN", //接口调用凭证
"tourse":"OPENID", //发送者的openid,即接收到的FromUserName
"msgtype":"miniprogrampage", //消息类型
"link":{
"title":"title", //消息标题
"pagepath":"pagepath", //小程序的页面路径,要与app.json一致,比如:"pages/index/index"
"thumb_media_id":"thumb_media_id" //小程序消息卡片的封面}
}