微信公众平台开发之多客服的示例分析
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,小编给大家分享一下微信公众平台开发之多客服的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、回复多客服消息在新的微信协议中,开发模式也可以接入客服系统。 开发者如果需要让用
千家信息网最后更新 2024年09月22日微信公众平台开发之多客服的示例分析
小编给大家分享一下微信公众平台开发之多客服的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
一、回复多客服消息
在新的微信协议中,开发模式也可以接入客服系统。 开发者如果需要让用户使用客服系统,需要在接收到用户发送的消息时,返回一个MsgType为transfer_customer_service的消息,微信服务器在收到这条消息时,会把用户这次发送的和以后一段时间内发送的消息转发客服系统。
返回的消息举例如下
1399197672
该消息的实现如下
//回复多客服消息 private function transmitService($object) { $xmlTpl = ""; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } %s
二、触发多客服会话
一般情况下,用户想要咨询问题是,经常会问"你好","在吗",这样的问题。
我们以这些词为触发关键词,当用户发送的文本消息内容中包含这些词的时候,就返回多客服消息给用户(用户在微信端感觉不到任何内容,但微信公众账号会将用户本次及以后一段时间的消息都转发到客服)。
实现代码如下:
//接收文本消息 private function receiveText($object) { $keyword = trim($object->Content); if (strstr($keyword, "投诉") || strstr($keyword, "你好") || strstr($keyword, "在吗")){ $result = $this->transmitService($object); } return $result; }
三、完整代码
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" =>"https://cache.yisu.com/upload/information/20201208/260/13620.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 = "
"; $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray)); return $result; } private function transmitMusic($object, $musicArray) { $itemTpl = " %s %s $item_str "; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $textTpl = " "; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } //回复多客服消息 private function transmitService($object) { $xmlTpl = " %s $item_str "; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } private function logger($log_content) { if(isset($_SERVER['HTTP_APPNAME'])){ //SAE sae_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. 使用多客服消息后,后续所有消息在一段时间内都将作为客服消息转发,原来的开发模式下的自动回复都将失效!!!
看完了这篇文章,相信你对"微信公众平台开发之多客服的示例分析"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
消息
多客
用户
开发
时间
公众
你好
文本
模式
系统
平台
示例
分析
代码
内容
篇文章
问题
快递
测试
您好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器怎么增加磁盘
药物数据库分类
数据库导入没权限
网警网络安全执法
cs1.6无法连接服务器
从网管到红客网络安全创业者
华为弹性云服务器有数据库吗
营口网络安全宣传周
长沙职业技术学校网络技术
虹口区网络技术开发报价表
重庆统一软件开发服务品质保障
大学网络安全宣讲
数据库 having
反恐与网络安全治理论坛成都
拟上市公司网络安全要求
本地软件文档数据库
网络安全管理员证书中级有用吗
重庆易展辰网络技术有限公司
润益互联网科技有限公司
阳春颜料网络技术有限公司
mc手机版如何在服务器隐藏名字
数据库竖着显示
数据库系统技术 填空题
播网络技术有限公司
长清丁香路软件开发实习
云服务器安全价格
服务器故障安全电压错误
戴尔服务器启动不了
学计算机网络安全可以在那里工作
应用程序不能连接到服务器