## 聊天机器人插件开发实例教程
一、创建插件
在*系统管理-扩展管理-设计新插件*处填写要创建的插件基本信息。因为将要开发的聊天机器人插件只需要在微信聊天框中处理用户发送的消息并给出回复,不涉及到后台管理功能和前端页面显示,所以只需要勾选*是否需要响应规则*和*是否需要配置参数*即可。
![](https://box.kancloud.cn/f8b5a9e7fcdb70c27b7979322695bcb8_1272x1019.png)
插件创建成功后会在Addons目录下生成插件文件夹,如下所示
![](https://box.kancloud.cn/b835f722126a7b9c3c2acfd27595ca11_284x109.png)
插件创建成功后生成的插件信息文件info.php如下:
![](https://box.kancloud.cn/ca1050a46e8577f26fcbaf0fa89d9afd_776x389.png)
二、设置插件配置信息
此插件需要使用图灵机器人的聊天API,所以在info.php里面设置插件的配置信息如下:
```
'config' => array(
'respond_rule' => 1,
'setting' => 1,
'setting_list' => array(
'can_voice' => array(
'title' => '是否开启语音聊天',
'type' => 'radio',
'options' => array(
0 => '不开启',
1 => '开启'
),
'value' => 0,
'tip' => '开启语音聊天,需要在微信后台开启语音识别功能'
),
'api_url' => array(
'title' => '图灵API地址',
'type' => 'text',
'placeholder' => 'http://www.tuling123.com/openapi/api',
'value' => '',
'tip' => ''
),
'api_key' => array(
'title' => '图灵API KEY',
'type' => 'text',
'placeholder' => '5b6d54d86d958fe4fabb67883903dbe9',
'value' => '',
'tip' => '<a href="http://www.tuling123.com/web/robot_access!index.action?cur=l_05" target="_blank">前往图灵机器人官网申请API</a>'
),
'enter_tip' => array(
'title' => '进入聊天提示语',
'type' => 'textarea',
'placeholder' => '你想聊点什么呢',
'value' => '',
'tip' => '用户发送关键词进入机器人聊天模式时回复给用户的内容'
),
'keep_time' => array(
'title' => '会话保持时间',
'type' => 'text',
'placeholder' => '300',
'value' => '',
'tip' => '在此时间范围内,用户一直处在机器人聊天模式中,默认300秒(5分钟)'
),
'exit_keyword' => array(
'title' => '退出聊天关键词',
'type' => 'text',
'placeholder' => '退出',
'value' => '',
'tip' => '用户发送此关键词主动退出机器人聊天模式'
),
'exit_tip' => array(
'title' => '退出聊天提示语',
'type' => 'textarea',
'placeholder' => '下次无聊的时候可以再找我聊天哦',
'value' => '',
'tip' => '用户退出机器人聊天模式时回复给用户的内容'
)
)
)
```
设置成功后在插件管理后台可以看到插件配置项
![](https://box.kancloud.cn/74f634ee4547b309fbfd02405400d9fb_1067x1012.png)
三、编写微信交互代码
在插件后台配制处填写好申请到的图灵机器人api并进行其他的聊天回复设置后,就可以通过插件的RespondController来编写微信端的交互代码。
```
/**
* 微信交互
* @param $message array 微信消息数组
* @author 艾逗笔<765532665@qq.com>
*/
public function wechat($message = array()) {
$settings = get_addon_settings('IdouChat');
$settings['enter_tip'] || $settings['enter_tip'] = '你想聊点什么呢';
$settings['keep_time'] || $settings['keep_time'] = 300;
$settings['exit_keyword'] || $settings['exit_keyword'] = '退出';
$settings['exit_tip'] || $settings['exit_tip'] = '下次无聊的时候可以再找我聊天哦';
if (!$settings['api_url'] || !$settings['api_key']) {
reply_text('机器人聊天接口未填写,暂时不能使用此功能');
exit();
}
if ($message['MsgType'] == 'voice') {
if ($settings['can_voice'] == '1') {
$content = $message['Recognition']; // 语音识别,直接开启机器人聊天模式
$reply = $this->turingAPI($content);
if (is_array($reply)) {
return reply_news($reply);
} else {
return reply_text($reply);
}
}
} else {
$content = $message['Content']; // 通过消息上下文机制与机器人展开聊天
if (!$this->in_context) {
$reply = $settings['enter_tip'];
$this->begin_context($settings['keep_time']); // 开启上下文模式
} else {
if ($content == $settings['exit_keyword']) {
$reply = $settings['exit_tip'];
$this->end_context();
} else {
$reply = $this->turingAPI($content);
$this->keep_context($settings['keep_time']); // 保持消息上下文
}
}
if (is_array($reply)) {
return reply_news($reply);
} else {
return reply_text($reply);
}
}
}
```
上述代码的大致逻辑是:
1、使用`get_addon_settings('IdouChat')`获取到插件的配置信息
2、接收微信端用户发送的消息并判断消息上下文
3、调用图灵机器人API给用户回复消息
四、设置关键词响应
在编写了上述代码后,需要在插件管理后台的响应规则出设置一下触发关键词,设置成功后微信端用户发送对应的关键词内容后,消息会被分发到此插件的Respond控制器的wechat方法,那么第三步中设置的交互代码将会执行,从而可以实现机器人聊天功能。
![](https://box.kancloud.cn/90bd1156fb199f6ae19e9c1698ec1687_1102x399.png)
五、效果预览
![](https://box.kancloud.cn/f045949976a1e24b0ec2dba2a0e78f85_411x728.png)
>[info] 总结
本篇教程简要讲解了使用豆信框架开发一个聊天机器人功能的流程。涉及到的知识点有:
1、使用豆信框架后台创建插件
2、在插件信息文件info.php里面编写插件配置信息
3、使用图灵机器人API
4、编写插件响应控制器,处理微信端发送的消息
5、使用消息上下文将用户连续两次的交互绑定在一起
插件源代码:
https://github.com/mikemintang/douchat_addons/tree/master/IdouChat
- 更新日志
- 入门
- 关于豆信
- 系统安装
- 功能介绍
- 公众号对接
- 小程序对接
- 系统架构
- 数据字典
- 框架目录结构
- 插件目录结构
- 运行流程
- 插件开发
- 新建插件
- info.php
- 设计数据表
- 插件控制器
- 后台管理控制器
- 移动端控制器
- 交互响应控制器
- 接口管理控制器
- 插件模型
- 插件视图
- 发布插件
- 自定义模型
- 通用增删改查
- common_lists
- common_add
- common_edit
- common_delete
- setMetaTitle
- setSubmitType
- setModel
- setListMap
- setListSearch
- setListOrder
- setListPer
- setEditMap
- setDeleteMap
- setFindMap
- addCrumb
- addNav
- addButton
- setTip
- 函数手册
- get_addon
- get_addon_settings
- tomedia
- get_fans_info
- 小程序开发专题
- 小程序对接插件.js
- 获取插件配置
- 获取用户信息
- 更新用户资料
- 公众号开发专题
- 获取粉丝信息
- 自定义分享
- 消息上下文
- 微信支付
- 企业付款
- 发送现金红包
- 发送模板消息
- 发送客服消息
- 引入前端资源
- 限制页面仅在微信浏览器访问
- 在插件页面中引入样式文件
- 在插件中创建跳转链接
- 数据预处理
- 插件开发实例
- 聊天机器人
- 留言板
- 常见问题解答