麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > PHP > 正文

如何使用微信公眾平臺開發(fā)模式實(shí)現(xiàn)多客服

2024-05-04 23:41:57
字體:
供稿:網(wǎng)友
其實(shí)微信公眾平臺的多客服功能已經(jīng)出來好久了,并且一出來的時候我就已經(jīng)為自己的公眾號實(shí)現(xiàn)了,原本以為大家都已經(jīng)會了,但是今天還是有人問起這個多客服功能怎么使用,我找了下網(wǎng)上也沒什么好的教程,今天我就給大家發(fā)一篇比較簡單易懂的教程吧
 

其實(shí)微信公眾平臺的多客服功能已經(jīng)出來好久了,并且一出來的時候我就已經(jīng)為自己的公眾號實(shí)現(xiàn)了,原本以為大家都已經(jīng)會了,但是今天還是有人問起這個多客服功能怎么使用,我找了下網(wǎng)上也沒什么好的教程,今天我就給大家發(fā)一篇比較簡單易懂的教程吧!

在這篇微信公眾平臺開發(fā)教程中,我們將介紹如何使用開發(fā)模式實(shí)現(xiàn)多客服系統(tǒng)。

一、回復(fù)多客服消息

在新的微信協(xié)議中,開發(fā)模式也可以接入客服系統(tǒng)。 開發(fā)者如果需要讓用戶使用客服系統(tǒng),需要在接收到用戶發(fā)送的消息時,返回一個MsgType為transfer_customer_service的消息,微信服務(wù)器在收到這條消息時,會把用戶這次發(fā)送的和以后一段時間內(nèi)發(fā)送的消息轉(zhuǎn)發(fā)客服系統(tǒng)。

返回的消息舉例如下

<xml>  <ToUserName><![CDATA[touser]]></ToUserName>  <FromUserName><![CDATA[fromuser]]></FromUserName>  <CreateTime>1399197672</CreateTime>  <MsgType><![CDATA[transfer_customer_service]]></MsgType></xml> 

該消息的實(shí)現(xiàn)如下(以方倍工作室的微信公眾平臺PHP SDK為基礎(chǔ))

   //回復(fù)多客服消息  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;  } 

二、觸發(fā)多客服會話

一般情況下,用戶想要咨詢問題是,經(jīng)常會問“你好”,“在嗎”,這樣的問題。

我們以這些詞為觸發(fā)關(guān)鍵詞,當(dāng)用戶發(fā)送的文本消息內(nèi)容中包含這些詞的時候,就返回多客服消息給用戶(用戶在微信端感覺不到任何內(nèi)容,但微信公眾賬號會將用戶本次及以后一段時間的消息都轉(zhuǎn)發(fā)到客服)。

實(shí)現(xiàn)代碼如下:

 //接收文本消息  private function receiveText($object)  {    $keyword = trim($object->Content);    if (strstr($keyword, "投訴") || strstr($keyword, "你好") || strstr($keyword, "在嗎")){      $result = $this->transmitService($object);    }    return $result;  }

三、完整代碼

<?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;    }  }  //響應(yīng)消息  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" =>"歡迎關(guān)注方倍工作室", "Description" =>"使用方法:/n1.發(fā)送快遞單號,例如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);    }    //觸發(fā)多客服模式    else if (strstr($keyword, "您好") || strstr($keyword, "你好") || strstr($keyword, "在嗎") || strstr($keyword, "有人嗎")){      $result = $this->transmitService($object);      return $result;    }    return $result;  }  private function transmitText($object, $content)  {    $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";    $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);    return $result;  }  private function transmitNews($object, $newsArray)  {    if(!is_array($newsArray)){      return;    }    $itemTpl = "  <item>    <Title><![CDATA[%s]]></Title>    <Description><![CDATA[%s]]></Description>    <PicUrl><![CDATA[%s]]></PicUrl>    <Url><![CDATA[%s]]></Url>  </item>";    $item_str = "";    foreach ($newsArray as $item){      $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);    }    $newsTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>%s</ArticleCount><Articles>$item_str</Articles></xml>";    $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));    return $result;  }  private function transmitMusic($object, $musicArray)  {    $itemTpl = "<Music>  <Title><![CDATA[%s]]></Title>  <Description><![CDATA[%s]]></Description>  <MusicUrl><![CDATA[%s]]></MusicUrl>  <HQMusicUrl><![CDATA[%s]]></HQMusicUrl></Music>";    $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);    $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType>$item_str</xml>";    $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());    return $result;  }  //回復(fù)多客服消息  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;  }  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);    }  }}?> 

本段代碼經(jīng)過測試,在自定義菜單中返回多客服消息,無法讓用戶進(jìn)入多客服狀態(tài),使用多客服消息后,后續(xù)所有消息在一段時間內(nèi)都將作為客服消息轉(zhuǎn)發(fā),原來的開發(fā)模式下的自動回復(fù)都將失效。

本文寫的不好,還望海涵,有好的意見歡迎分享,大家共同學(xué)習(xí)進(jìn)步。同時,感謝大家一直以來對VeVb武林網(wǎng)網(wǎng)站的支持。



注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人在线视频黄色 | 一本色道久久综合亚洲精品小说 | 99riav视频一区二区 | 欧美成人精品欧美一级乱黄 | 2021狠狠操| 国产91极品 | 中文字幕在线观看免费 | 日本成人午夜 | 国产一区二区三区欧美 | 成人在线视频网 | 蜜桃精品视频 | 精品中文字幕久久久久四十五十骆 | 九九热在线免费观看视频 | 午夜爽爽爽男女免费观看hd | 日韩激情| 久久羞羞 | 久夜tv| 精品在线观看一区二区三区 | 超碰人人做人人爱 | 中文字幕在线观看91 | 久久国产精品久久久久久久久久 | 免费毛片电影 | 成人免费毛片片v | 中文字幕亚洲一区二区三区 | 欧美无限资源 | 经典三级在线视频 | 日韩中文字幕三区 | 亚洲九草 | 欧美国产永久免费看片 | 久久逼逼 | 牛牛a级毛片在线播放 | 日本欧美中文字幕 | 91精品观看91久久久久久国产 | 色猫av| 国产1区在线 | 九九热精品视频在线播放 | 真人一级毛片免费 | 国产va在线观看 | 亚洲男人的天堂在线视频 | 国产91小视频在线观看 | 成人毛片100部 |