您的位置:首页 > 其它

微擎学习之实现上下文对话

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;

    }

}

>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息