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对话的方法,全局变量的方法但操作麻烦,有的在网页中可用,到了微信类中就不行。所以采用数据库的方式,靠谱。
最终的效果如图:
输入“济源”,点击“查天气”菜单
输入“退出”
2016-11-10 16:31:08更新:
公众号由于后期使用,以上代码已失效。
附数据表资源:http://download.csdn.net/detail/afanxingzhou/9679126