微信公众平台开发(92) 多客服
关键字:微信公众平台开发 多客服
作者:方倍工作室
原文:http://www.cnblogs.com/txw1958/p/weixin-transfer-customer-service.html
在这篇微信公众平台开发教程中,我们将介绍如何使用开发模式实现多客服系统。
本文分为以下三个部分:
- 回复多客服消息
- 触发多客服会话
- 其他说明
一、回复多客服消息
在新的微信协议中,开发模式也可以接入客服系统。 开发者如果需要让用户使用客服系统,需要在接收到用户发送的消息时,返回一个MsgType为transfer_customer_service的消息,微信服务器在收到这条消息时,会把用户这次发送的和以后一段时间内发送的消息转发客服系统。
返回的消息举例如下
<xml><ToUserName>touser]]>ToUserName><FromUserName>fromuser]]>FromUserName><CreateTime>1399197672CreateTime><MsgType>transfer_customer_service]]>MsgType> xml>
该消息的实现如下(以方倍工作室的微信公众平台PHP SDK为基础)
//回复多客服消息private function transmitService($object){$xmlTpl = "";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());return $result;} %s
http://www.cnblogs.com/txw1958/p/weixin-transfer-customer-service.html
二、触发多客服会话
一般情况下,用户想要咨询问题是,经常会问“你好”,“在吗”,这样的问题。
我们以这些词为触发关键词,当用户发送的文本消息内容中包含这些词的时候,就返回多客服消息给用户(用户在微信端感觉不到任何内容,但微信公众账号会将用户本次及以后一段时间的消息都转发到客服)。
实现代码如下:
//接收文本消息private function receiveText($object){$keyword = trim($object->Content);if (strstr($keyword, "投诉") || strstr($keyword, "你好") || strstr($keyword, "在吗")){$result = $this->transmitService($object);}return $result;}
http://www.cnblogs.com/txw1958/p/weixin-transfer-customer-service.html
三、完整代码
php /*方倍工作室CopyRight 2014 All Rights Reserved */define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) {$wechatObj->responseMsg(); }else{$wechatObj->valid(); }class wechatCallbackapiTest {//验证消息public function valid(){$echoStr = $_GET["echostr"];if($this->checkSignature()){echo $echoStr;exit;}}//检查签名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;}}//响应消息public function responseMsg(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$this->logger("R ".$postStr);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$RX_TYPE = trim($postObj->MsgType);switch ($RX_TYPE){case "event":$result = $this->receiveEvent($postObj);break;case "text":$result = $this->receiveText($postObj);break;}$this->logger("T ".$result);echo $result;}else {echo "";exit;}}//接收事件消息private function receiveEvent($object){switch ($object->Event){case "subscribe":$content[] = array("Title" =>"欢迎关注方倍工作室", "Description" =>"使用方法:\n1.发送快递单号,例如6367532560,可查询快递详情", "PicUrl" =>"http://www.3856.cc/weixin/weixin/logo.jpg", "Url" =>"");break;default:$content = "receive a new event: ".$object->Event;break;}if(is_array($content)){if (isset($content[0])){$result = $this->transmitNews($object, $content);}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);}}else{$result = $this->transmitText($object, $content);}return $result;}//接收文本消息private function receiveText($object){$keyword = trim($object->Content);if($keyword == "时间" || $keyword == "测试"){$content = date("Y-m-d H:i:s",time());$result = $this->transmitText($object, $content);}//触发多客服模式else if (strstr($keyword, "您好") || strstr($keyword, "你好") || strstr($keyword, "在吗") || strstr($keyword, "有人吗")){$result = $this->transmitService($object);return $result;}return $result;}private function transmitText($object, $content){$textTpl = "";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);return $result;}private function transmitNews($object, $newsArray){if(!is_array($newsArray)){return;}$itemTpl = " %s - ";$item_str = "";foreach ($newsArray as $item){$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);}$newsTpl = "
$item_str ";$result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));return $result;}private function transmitMusic($object, $musicArray){$itemTpl = " %s %s ";$item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);$textTpl = " $item_str ";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());return $result;}//回复多客服消息private function transmitService($object){$xmlTpl = " %s ";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());return $result;}private function logger($log_content){if(isset($_SERVER['HTTP_APPNAME'])){ //SAEsae_set_display_errors(false);sae_debug($log_content);sae_set_display_errors(true);}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL$max_size = 10000;$log_filename = "log.xml";if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n", FILE_APPEND);}} } ?> %s
四、其他注意事项
1. 经测试,在自定义菜单中返回多客服消息,无法让用户进入多客服状态。
2. 使用多客服消息后,后续所有消息在一段时间内都将作为客服消息转发,原来的开发模式下的自动回复都将失效!!!
3. 除了上述程序开发之外,多客服系统还需要进行系统配置。配置的相关内容可参考:
多客服新手指导 http://www.cnblogs.com/txw1958/p/weixin-multi-customer-service.html
多客服FAQ http://wkd.qq.com/php/static/mp/html/faq-1_1.html
====================================================================
方倍工作室微信公众平台账号关注方法:
1. 微信通讯录-添加朋友-查找公众号-搜索“方倍工作室”
2. 微信通讯录-添加朋友-搜号码-输入“pondbaystudio”
3. 使用微信扫描下面的二维码

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
