微信公众平台开发之多客服的示例分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下微信公众平台开发之多客服的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、回复多客服消息在新的微信协议中,开发模式也可以接入客服系统。 开发者如果需要让用
千家信息网最后更新 2026年11月02日微信公众平台开发之多客服的示例分析
小编给大家分享一下微信公众平台开发之多客服的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
一、回复多客服消息
在新的微信协议中,开发模式也可以接入客服系统。 开发者如果需要让用户使用客服系统,需要在接收到用户发送的消息时,返回一个MsgType为transfer_customer_service的消息,微信服务器在收到这条消息时,会把用户这次发送的和以后一段时间内发送的消息转发客服系统。
返回的消息举例如下
1399197672
该消息的实现如下
//回复多客服消息 private function transmitService($object) { $xmlTpl = "%s "; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time()); return $result; }二、触发多客服会话
一般情况下,用户想要咨询问题是,经常会问"你好","在吗",这样的问题。
我们以这些词为触发关键词,当用户发送的文本消息内容中包含这些词的时候,就返回多客服消息给用户(用户在微信端感觉不到任何内容,但微信公众账号会将用户本次及以后一段时间的消息都转发到客服)。
实现代码如下:
//接收文本消息 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 = "%s "; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } private function transmitNews($object, $newsArray) { if(!is_array($newsArray)){ return; } $itemTpl = " -
"; $item_str = ""; foreach ($newsArray as $item){ $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); } $newsTpl = "%s %s $item_str "; $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray)); return $result; } private function transmitMusic($object, $musicArray) { $itemTpl = " "; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $textTpl = "%s $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'])){ //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); } }}?>四、其他注意事项
1. 经测试,在自定义菜单中返回多客服消息,无法让用户进入多客服状态。
2. 使用多客服消息后,后续所有消息在一段时间内都将作为客服消息转发,原来的开发模式下的自动回复都将失效!!!
看完了这篇文章,相信你对"微信公众平台开发之多客服的示例分析"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
消息
多客
用户
开发
时间
公众
你好
文本
模式
系统
平台
示例
分析
代码
内容
篇文章
问题
快递
测试
您好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手磨咖啡
互联网科技公司经营范围
中关村互联网 科技集团
今日互联网科技
广州互联网科技公司
金融科技 互联网金融
喔噻互联网科技
互联网科技股午盘股票涨跌
华中科技有哪些互联网大佬
以后互联网后是啥科技
华夏互联网科技业
国大互联网教育科技有限公司工作
河南住房之家互联网科技
伊宁互联网科技做什么的
锡山区互联网智能科技产品供应
启辰互联网科技
湖北辰鑫科技互联网
易租星互联网科技有限公司
河南商务圈互联网科技有限公司
互联网科技快速发展优美句子
互联网科技图片
米客互联网科技
顺玮阁互联网科技
火传媒上海互联网科技
互联网巨头投资的硬核科技
青岛科技大学互联网大赛研究生
南通创西澳互联网科技有限公司
山东大美朱楼互联网科技有限公司
杭州科技互联网公司有哪些
华人运通互联网科技公司