微擎学习之实现上下文对话
2016-06-30 14:50
681 查看
<?php
//实现上下文对话
class BloodTestModuleProcessor extends WeModuleProcessor {
//void: 所有处理程序必须实现虚函数 respond. 用以响应消息
public function respond() {
if(!$this->inContext) {
$reply = '请输入你的血型(A, B, O, AB), 来分析你今年的运程. ';
$this->beginContext();
// 如果是按照规则触发到本模块, 那么先输出提示问题语句, 并启动上下文来锁定会话, 以保证下次回复依然执行到本模块
} else {
$btypes = array('a', 'b', 'o', 'ab');
$b = strtolower($this->message['content']);
// 如果当前会话在上下文中, 那么表示当前回复是用户回答提示问题的答案.
if(in_array($b, $btypes)) {
switch($b) {
case 'a':
$reply = 'A型血今年.....';
break;
case 'b':
$reply = 'B型血今年.....';
break;
case 'o':
$reply = 'O型血今年.....';
break;
case 'ab':
$reply = 'AB型血今年.....';
break;
}
$this->endContext();
// 如果当前回答符合答案格式, 那么进行保存并进行下一个问题. (可以保存至 SESSION 中)
// 直到最后一个问题回答完成, 输出测试结果给用户, 并结束对话锁定. 以保证用户其他对话能正常路由.
// 本示例只有一个问题, 因此不保存答案, 直接输出测试结果.
// 如果对话默认的超时不够, 那么可以在每次提出下一个问题的时候重新调用 beginContext 来顺延超时.
} else {
$reply = '请输入正确的血型(A, B, O, AB). ';
// 回答不符合答案格式, 那么重新显示当前问题.
}
}
return $this->respText($reply);
// 返回至系统
}
/*htmlspecialchars_decode(string,flags) string 必需。规定要解码的字符串。
flags 可选。规定如何处理引号以及使用哪种文档类型。可用的引号类型:ENT_COMPAT - 默认。仅解码双引号。 ENT_QUOTES - 解码双引号和单引号。ENT_NOQUOTES - 不解码任何引号。规定使用的文档类型的附加 flags:ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。ENT_HTML5 - 作为 HTML 5 处理代码。ENT_XML1 - 作为 XML 1 处理代码。ENT_XHTML - 作为 XHTML 处理代码。*/
private function respText($content) {
$response = array();
$response['FromUserName'] = $this->message['to'];
$response['ToUserName'] = $this->message['from'];
$response['MsgType'] = 'text';
$response['Content'] = htmlspecialchars_decode($content);
return $response;
}
}
>
//实现上下文对话
class BloodTestModuleProcessor extends WeModuleProcessor {
//void: 所有处理程序必须实现虚函数 respond. 用以响应消息
public function respond() {
if(!$this->inContext) {
$reply = '请输入你的血型(A, B, O, AB), 来分析你今年的运程. ';
$this->beginContext();
// 如果是按照规则触发到本模块, 那么先输出提示问题语句, 并启动上下文来锁定会话, 以保证下次回复依然执行到本模块
} else {
$btypes = array('a', 'b', 'o', 'ab');
$b = strtolower($this->message['content']);
// 如果当前会话在上下文中, 那么表示当前回复是用户回答提示问题的答案.
if(in_array($b, $btypes)) {
switch($b) {
case 'a':
$reply = 'A型血今年.....';
break;
case 'b':
$reply = 'B型血今年.....';
break;
case 'o':
$reply = 'O型血今年.....';
break;
case 'ab':
$reply = 'AB型血今年.....';
break;
}
$this->endContext();
// 如果当前回答符合答案格式, 那么进行保存并进行下一个问题. (可以保存至 SESSION 中)
// 直到最后一个问题回答完成, 输出测试结果给用户, 并结束对话锁定. 以保证用户其他对话能正常路由.
// 本示例只有一个问题, 因此不保存答案, 直接输出测试结果.
// 如果对话默认的超时不够, 那么可以在每次提出下一个问题的时候重新调用 beginContext 来顺延超时.
} else {
$reply = '请输入正确的血型(A, B, O, AB). ';
// 回答不符合答案格式, 那么重新显示当前问题.
}
}
return $this->respText($reply);
// 返回至系统
}
/*htmlspecialchars_decode(string,flags) string 必需。规定要解码的字符串。
flags 可选。规定如何处理引号以及使用哪种文档类型。可用的引号类型:ENT_COMPAT - 默认。仅解码双引号。 ENT_QUOTES - 解码双引号和单引号。ENT_NOQUOTES - 不解码任何引号。规定使用的文档类型的附加 flags:ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。ENT_HTML5 - 作为 HTML 5 处理代码。ENT_XML1 - 作为 XML 1 处理代码。ENT_XHTML - 作为 XHTML 处理代码。*/
private function respText($content) {
$response = array();
$response['FromUserName'] = $this->message['to'];
$response['ToUserName'] = $this->message['from'];
$response['MsgType'] = 'text';
$response['Content'] = htmlspecialchars_decode($content);
return $response;
}
}
>
相关文章推荐
- 获取图片的实际宽高
- javascript学习之BOM
- project 2013 安装程序找不到office.zh-cn\officeMUI.xml
- Faster-RCNN/SSD/训练将数据集做成VOC2007格式
- iOS 查看UI控件层次结构的方法
- cocos2d-x getContentSize和getContentSizeInPixels区别
- 亲爱的,真的别再熬夜了
- Codeforces Round #360 (Div. 1) 题解(待续)
- apk
- 阿里Druid连接池配置使用
- rapidjson 添加删除对象
- 基础linux命令总结
- JavaScript的组成—ECMAScript、BOM和DOM
- jQuery 遍历函数
- JS中的!=、== 、!==、===的用法和区别
- tensorflow MNIST机器学习入门
- Elasticsearch java API (19)Percolate API
- 【R语言】文本挖掘-情感分析
- 《JavaScript权威指南》——对象
- poj2367