您的位置:首页 > 移动开发 > 微信开发

微信公众号多客服开发介绍

2016-01-27 10:42 537 查看
非开发者模式:如果公众号没有处于开发者模式,则只需要单纯的在 微信公众号后台进行设置就可以启用多客服功能

开发者模式:

用户发送消息时的2种情况:

普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上。

开发者响应包有两种(普通消息响应包,带有启动多客服指令的包)

如果希望将消息转发到多客服系统,需要开发者在响应包中返回MsgType为transfer_customer_service的消息,微信服务器收到响应后会把当次发送的消息以及之后一段 时间(2小时内)转发至多客服系统(系统会自动将用户分配给某个客服,也可指定客服)。

交互的数据通过post,数据放在XML中

多客服流程如下:

1)用户发消息

2)微信服务器接收并发送至开发者服务器(根据填写的url)

3)开发者服务器处理信息并判断是否触发多客服

4) 如果启用多客服返回一个MsgType为transfer_customer_service的消息给微信服务器

5) 微信服务器将当前的信息以及该用户之后一段时间内(2个小时后自动断开,中间若客服关闭会话也断开)

6) 信息转发至多客服系统 ,客服同该用户交流

注意:多客服系统自动将该用户分配给某一在线客服(但也可以指定某一客服,需要在响应的的信息包中加上指定的客服信息,但如果该客服不在线,该消息不会转给其他客服,所以需要提前获取客服信息,通过get请求获取客服数据(json格式)

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist?access_token=ACCESS_TOKEN



返回说明
返回数据示例(正确时的JSON返回结果):
{
"kf_online_list": [
{
"kf_account": "test1@test",
"status": 1,
"kf_id": "1001",
"auto_accept": 0,
"accepted_case": 1
},
{
"kf_account": "test2@test",
"status": 1,
"kf_id": "1002",
"auto_accept": 0,
"accepted_case": 2
}
]
}

多客服微信服务器和开发者服务器之间交互的3种数据包:

用户发送消息时微信服务器发给开发者的数据包:

<xml>

<ToUserName><![CDATA[toUser]]></ToUserName> //开发者微信号

<FromUserName><![CDATA[fromUser]]></FromUserName> //发消息用户的openid

<CreateTime>1348831860</CreateTime> //消息创建时间

<MsgType><![CDATA[text]]></MsgType> //消息类型

<Content><![CDATA[this is a test]]></Content> //消息内容

<MsgId>1234567890123456</MsgId> //消息id

</xml>

开发者服务器返回数据的2种情况(普通,多客服)

1)启用多客服系统时返回给微信服务器的数据包:


<xml>

<ToUserName><![CDATA[touser]]></ToUserName> //发消息用户的openid

<FromUserName><![CDATA[fromuser]]></FromUserName> //开发者微信号

<CreateTime>1399197672</CreateTime> //消息创建时间

<MsgType><![CDATA[transfer_customer_service]]></MsgType>

</xml>

2)普通情况开发者服务器返回给微信服务器的数据包:

<xml>

<ToUserName><![CDATA[toUser]]></ToUserName> //发消息用户的openid

<FromUserName><![CDATA[fromUser]]></FromUserName> //开发者微信号

<CreateTime>12345678</CreateTime> //消息创建时间

<MsgType><![CDATA[text]]></MsgType> //消息类型

<Content><![CDATA[你好]]></Content> //消息内容

</xml>

//回复多客服消息例子

private function transmitService($object)

{

$xmlTpl = "<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[transfer_customer_service]]></MsgType>

</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());

return $result;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: