微信公眾平臺開發之相同關鍵詞不同回覆-php語言(五)
阿新 • • 發佈:2019-01-29
1.微信公眾平臺開發必備的一個基礎功能是關鍵詞回覆。但有時候我們的微信公眾號的需要關鍵詞回覆的模組比較多時,例如“預設情況下的關鍵詞回覆,查詢天氣時的關鍵詞回覆,或者成語接龍等文字遊戲的關鍵詞回覆”,模組多時不可避免的會出現關鍵詞衝突的問題。
2.在每天蒐集公眾號案例的時候發現以下幾個公眾號的情況:
案例一:
預設輸入“1”:
點選底部選單“孕媽選單”的後再輸入1:
案例二:
聊天機器人中的各種文字遊戲:
在這兩個案例中,仔細分析都是通過“點選選單”進入不同的響應事件的。
在“1號店”中,預設連線“查詢商品資料庫A”,在點選了選單後進入孕媽資料庫B/孕媽響應事件;
在“Autism”中,也是通過點選選單進入不同資料庫/響應事件。
前者以“10分鐘無應答”斷開選單事件,後者以“退出關鍵詞”斷開選單事件。
//=============背景交代完畢,擂主登臺============
這裡採用連線資料庫記錄操作的方法解決:
首先在資料庫中建立表:
id,openid(使用者的身份標識),dianji(使用者當前操作),time(時間)
在我的微信公眾號中以相同關鍵詞“濟源”為例。預設輸入“濟源”返回“山水之城…”的訊息,點選“查天氣”選單後,輸入“濟源”返回濟源當前天氣訊息。
程式碼實現
使用者是否點選,輸入文字前的判斷程式碼:
include './conn/conn.php';
mysql_set_charset('utf8');
$rs_caozuo =mysql_query("SELECT dianji,time FROM caozuo WHERE openid = '{$object->FromUserName}' ORDER BY id DESC LIMIT 0 ,1",$link);//只查詢最近一條記錄
$info_caozuo=mysql_fetch_array($rs_caozuo);
$biaoji = $info_caozuo['dianji'];
如果沒有查詢到,
if($biaoji==false or $biaoji=='0')
如果查詢到dianji=tianqi,執行天氣查詢事件
else if($biaoji=="tianqi")
點選“天氣”選單事件的程式碼:
case "tianqi":
include './conn/conn.php';
mysql_set_charset('utf8');
$time=date("Y-m-d H:i:s");
$rs=mysql_query("INSERT INTO `caozuo`(`openid`, `dianji`, `time`) VALUES ('{$object->FromUserName}','tianqi','{$time}')",$link);
$content = "請輸入您需要查詢的城市,可以語音輸入哦~\n\nTips:輸入“退出”才可以使用其它功能。";
使用者第一次點選,執行插入語句。
在天氣查詢響應訊息事件中放入“退出”關鍵詞操作,更新dianji=’0 ‘
case "退出":
$time=date("Y-m-d H:i:s");
$rs_tuichu=mysql_query("update `caozuo` set `dianji`='0', `time`='{$time}' where openid='{$object->FromUserName}'",$link);
$content ="已經退出,請查詢其它內容。";
break;
大功告成!
還有一些使用快取的方法,加入session對話的方法,全域性變數的方法但操作麻煩,有的在網頁中可用,到了微信類中就不行。所以採用資料庫的方式,靠譜。
最終的效果如圖:
輸入“濟源”,點選“查天氣”選單
輸入“退出”