1. 程式人生 > >微信公眾平臺開發之相同關鍵詞不同回覆-php語言(五)

微信公眾平臺開發之相同關鍵詞不同回覆-php語言(五)

1.微信公眾平臺開發必備的一個基礎功能是關鍵詞回覆。但有時候我們的微信公眾號的需要關鍵詞回覆的模組比較多時,例如“預設情況下的關鍵詞回覆,查詢天氣時的關鍵詞回覆,或者成語接龍等文字遊戲的關鍵詞回覆”,模組多時不可避免的會出現關鍵詞衝突的問題。
2.在每天蒐集公眾號案例的時候發現以下幾個公眾號的情況:
案例一:
預設輸入“1”:

預設輸入1

點選底部選單“孕媽選單”的後再輸入1:

點選選單輸入1
案例二:
聊天機器人中的各種文字遊戲:

聊天機器人

在這兩個案例中,仔細分析都是通過“點選選單”進入不同的響應事件的。

在“1號店”中,預設連線“查詢商品資料庫A”,在點選了選單後進入孕媽資料庫B/孕媽響應事件;

在“Autism”中,也是通過點選選單進入不同資料庫/響應事件。
前者以“10分鐘無應答”斷開選單事件,後者以“退出關鍵詞”斷開選單事件。
流程圖


//=============背景交代完畢,擂主登臺============
這裡採用連線資料庫記錄操作的方法解決:

首先在資料庫中建立表:
id,openid(使用者的身份標識),dianji(使用者當前操作),time(時間)
caozuo表

在我的微信公眾號中以相同關鍵詞“濟源”為例。預設輸入“濟源”返回“山水之城…”的訊息,點選“查天氣”選單後,輸入“濟源”返回濟源當前天氣訊息。

程式碼實現
流程圖

使用者是否點選,輸入文字前的判斷程式碼:

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對話的方法,全域性變數的方法但操作麻煩,有的在網頁中可用,到了微信類中就不行。所以採用資料庫的方式,靠譜。

最終的效果如圖:
輸入“濟源”,點選“查天氣”選單

效果
輸入“退出”

效果2