联系我们 - 广告服务
您的当前位置:主页 > 布局 > API >

客服消息

来源:未知 编辑:admin 时间:2018-02-09
导读: 在小程序中,通过点击contact-button/可以进入客服会话系统。在会话系统中,用户发送的信息(或进行某些特定的用户操作引发的事件推送),微信服务器会将消息(或事件)的数据包以POST方式传递给开发者填写的URL。当开发者服务器接受到信息后,可以使用发送
在小程序中,通过点击<contact-button/>可以进入客服会话系统。在会话系统中,用户发送的信息(或进行某些特定的用户操作引发的事件推送),微信服务器会将消息(或事件)的数据包以POST方式传递给开发者填写的URL。当开发者服务器接受到信息后,可以使用发送服务消息接口进行异步回复,这两个行为分别是2个不同的请求。基于这个特性,可以自己研发或接入任何客服系统。
1.接入指引
接入微信小程序消息服务,整体需要2步:
1)填写开发者服务器配置。
2)开发者服务器接受请求并返回指定信息,验证服务器地址有效性。
(1)填写服务器配置
  登录微信公众平台,在“设置->消息推送”中启动消息服务,如图所示。在配置页面填写URL、Token和EncodingAESKey。其中URL是开发者服务端接收消息的接口URL地址,必须是http://或https://开头,分别支持80和443端口。Token为用户身份令牌用作生成签名,可由开发者任意填写,该Token会和接口URL中包含的Token进行对比,从而验证安全性。EncodingAESKey由开发者手动填写或随机生成,用作消息体加解密密钥。在配置界面中可以选择消息加密方式和数据格式,加密方式默认为明文,数据格式默认为XML。消息加密解密可参考https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&token=&lang=zh_CN。

(2)验证服务器地址有效性
  仅仅填写配置信息是不能完成接入的,提交配置信息后,微信服务器将发送GET请求到填写的服务器地址,开发者服务器收到请求并按要求返回才能完成接入,所以我们在配置前先完成后台服务器接口工作,GET请求参数如下:
·signatrue:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
·timestamp:时间戳。
·nonce:随机数。
·echostr:随机字符串。后台可通过检验signature验证请求。收到GET请求后,开发者服务器需要原样返回echostr参数内容,才能接入生效。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序。
2)将三个参数字符串拼接成一个字符串进行sha1加密。
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
检验signature的PHP代码示例如下:
private function checkSignature()
{  
$signature = $_GET["signature"];  
$timestamp = $_GET["timestamp"];  
$nonce = $_GET["nonce"];  
$token = TOKEN;  
$tmpArr = array($token, $timestamp, $nonce);  
sort($tmpArr, SORT_STRING);  
$tmpStr = implode( $tmpArr );  
$tmpStr = sha1( $tmpStr );
  if( $tmpStr == $signature ){    
return true;  
}else{    
return false;  
  }
}
完成URL有效性验证后便接入生效。通过配置URL接口,开发者服务器可接受微信服务器推送过来的消息和事件,并根据业务进行响应。
2.接受消息和事件
当点击<contact-button/>时便进入了客服会话状态,在会话状态中开发者服务器接收信息和发送信息是2个不同接口。当用户在客服会话中发送消息(或进行某些特定的用户操作行为引发的事件),微信服务器会将消息(或事件)的数据包(JSON或XML格式)以POST方式发送到开发者填写的URL。
  接收到信息后开发者服务器必须做出下述回复,告知微信服务器我方服务器已成功接收信息:
1)直接回复success(推荐方式)。
2)直接回复空串(指字节长度为0的空字符串,而不是结构体中content字段的内容为空)。
  微信服务器在5秒内收不到任何响应会断掉连接,并重新发起请求,总共重试3次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName+CreateTime排重。一旦遇到以下情况,微信都会在小程序会话中,向用户发出系统提示“该小程序客服暂时无法提供服务,请稍后再试”:
1)开发者在5秒内未回复任何内容。
2)开发者回复了异常数据。
如果希望增加消息安全性,可以在消息配置中开启消息加密功能,用户发给小程序的消息以及小程序被动回复用户消息都会继续加密。接收的消息按类型可划分为3类:进入会话事件、文本消息、图片消息。
(1)进入会话事件
  当用户点击小程序“客服会话按钮”进入客服会话时将产生如下数据包:
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",   "FromUserName": "fromUser",   "CreateTime": 1482048670,   "MsgType": "event",   "Event": "user_enter_tempsession",   "SessionFrom": "sessionFrom" }
字段说明如下:
·ToUserName:小程序的原始ID。
·FromUserName:发送者的openid。
·CreateTime:事件创建时间(整型)。
·MsgType:event。
·Event:事件类型,user_enter_tempsession。
·SessionFrom:开发者在客服会话按钮设置的sessionFrom参数。
(2)文本消息
用户在客服会话中发送文本消息时将产生如下数据包:
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",   "FromUserName": "fromUser",   "CreateTime": 1482048670,   "MsgType": "text",   "Content": "this is a test",   "MsgId": 1234567890123456 }  字段说明如下:
·ToUserName:小程序的原始ID。
·FromUserName:发送者的openid。
·CreateTime:消息创建时间(整型)。
·MsgType:text。·Content:文本消息内容。
·MsgId:消息id,64位整型。
(3)图片消息
用户在客服会话中发送图片消息时将产生如下数据包:
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",   "FromUserName": "fromUser",   "CreateTime": 1482048670,   "MsgType": "image",   "PicUrl": "this is a url",   "MediaId": "media_id",   "MsgId": 1234567890123456 }  
字段说明如下:
·ToUserName:小程序的原始ID。
·FromUserName:发送者的openid。
·CreateTime:消息创建时间(整型)。
·MsgType:text。·PicUrl:图片链接(由系统生成)。
·MediaId:图片消息媒体id,可以调用获取临时素材接口拉取数据。
·MsgId:消息id,64位整型。
3.发送消息
开发者在接收到微信服务器消息后,在一段时间内(目前修改为48小时)可以调用客服接口,通过POST一个JSON数据包来给用户发送消息。此接口主要用户客服等有人工消息处理环节,方便开发者为用户提供更优质的服务。
目前允许的动作列表如下,不同动作触发后,允许的客服接口下发消息条数和下发时限不同。下发条数达到上限后,会收到错误返回码,具体请见返回码说明页:

发送消息直接通过POST方式调用一下接口即可:
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
消息JSON数据格式如下:
文本消息:
{   "touser":"OPENID",   "msgtype":"text",   "text":   {     "content":"Hello World"   } }
图片消息: {   "touser":"OPENID",   "msgtype":"image",   "image":   {     "media_id":"MEDIA_ID"   } }  字段说明如下:·access_token:调用接口凭证,必填项。·touser:普通用户openid,必填项。·msgtype:消息类型,文本为text,图片为image,必填项。·content:文本消息内容,必填项。
.media_id:发送的图片的媒体ID,通过新增素材接口上传图片文件获得,必填项。
  请求接口后微信服务器将返回调用结果,其返回错误码意义如下:
·-1:系统繁忙,此时请开发者稍候再试。
·0:请求成功。·40001:获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的小程序调用接口。·40002:不合法的凭证类型。
·40003:不合法的OpenID,请开发者确认OpenID否是其他小程序的OpenID。
·45015:回复时间超过限制。
·45047:客服接口下行条数超过上限。
·48001:API功能未授权,请确认小程序已获得该接口。
4.临时素材接口
在发送消息时,media_id需要填写临时素材id。临时素材需要先调用新增临时素材接口上传至微信服务,在通过获取接口获取对应资源id。目前小程序只支持下载图片文件。(1)新增临时素材
通过新增素材接口可以把本地媒体文件(目前仅支持图片)上传至微信服务器,用于用户发送客服消息或被动回复用户消息。接口请求为POST/FORM,调用接口如下:
https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
参数说明如下:
·access_token:调用接口凭证,必填项。
·type:image,必填项。
·media:form-data中媒体文件标识,有filename、filelength、content-type等信息。
示例代码,利用curl命令,用FORM表单方式上传一个多媒体文件:
curl -F [email protected] https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
调用后正常情况会返回以下JSON数据:
{   "type":"TYPE",   "media_id":"MEDIA_ID",   "created_at":123456789 }
错误情况会返回以下JSON数据:
{   "errcode":40004,   "errmsg":"invalid media type" }  
返回字段如下:
·type:image。
·media_id:媒体上传后,获取标识。
·created_at:媒体文件上传时间戳。
(2)获取临时素材
  通过调用获取临时素材接口,可以获取已上传的临时文件,目前小程序仅支持下载图片文件。接口请求为POST/FORM,调用接口如下:
https://api.weixin.qq.com/cgi-bin/media/get?
access_token=ACCESS_TOKEN&media_id=MEDIA_ID
参数说明如下:
·access_token:调用接口凭证。
·media_id:媒体文件ID。
示例代码,利用curl命令获取多媒体文件:
curl -I -G "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
 调用成功后,正常情况将返回HTTP头如下:
HTTP/1.1 200 OK Connection: close Content-Type: image/jpeg  Content-disposition: attachment; filename="MEDIA_ID.jpg" Date: Sun, 06 Jan 2013 10:20:18 GMT Cache-Control: no-cache, must-revalidate Content-Length: 339721  
如果返回的是视频素材,内容如下:
{ "video_url":DOWN_URL}
 错误情况将返回一下JSON:
{
  "errcode":40007,
  "errmsg":"invalid media_id"
}

责任编辑:admin

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

上一篇:模板消息
下一篇:没有了

网友评论:

在“\templets\demo\comments.htm”原来的内容全部删除,插入第三方评论代码,如果不需要评论功能,删除comments.html里面的内容即可
推荐使用友言、多说、畅言(需备案后使用)等社会化评论插件

Copyright © Tricks资讯网 版权所有
本站所有资讯来源于网络 如有侵权请联系QQ:940910888 技术支持鹏博科技
Top