聊天机器人插件开发实例教程

一、创建插件在系统管理-扩展管理-设计新插件处填写要创建的插件基本信息。因为将要开发的聊天机器人插件只需要在微信聊天框中处理用户发送的消息并给出回复,不涉及到后台管理功能和前端页面显示,所以只需要勾选是否需要响应规则是否需要配置参数即可。聊天机器人 - 图1

插件创建成功后会在Addons目录下生成插件文件夹,如下所示聊天机器人 - 图2

插件创建成功后生成的插件信息文件info.php如下:聊天机器人 - 图3

二、设置插件配置信息此插件需要使用图灵机器人的聊天API,所以在info.php里面设置插件的配置信息如下:

  1. 'config' => array(
  2. 'respond_rule' => 1,
  3. 'setting' => 1,
  4. 'setting_list' => array(
  5. 'can_voice' => array(
  6. 'title' => '是否开启语音聊天',
  7. 'type' => 'radio',
  8. 'options' => array(
  9. 0 => '不开启',
  10. 1 => '开启'
  11. ),
  12. 'value' => 0,
  13. 'tip' => '开启语音聊天,需要在微信后台开启语音识别功能'
  14. ),
  15. 'api_url' => array(
  16. 'title' => '图灵API地址',
  17. 'type' => 'text',
  18. 'placeholder' => 'http://www.tuling123.com/openapi/api',
  19. 'value' => '',
  20. 'tip' => ''
  21. ),
  22. 'api_key' => array(
  23. 'title' => '图灵API KEY',
  24. 'type' => 'text',
  25. 'placeholder' => '5b6d54d86d958fe4fabb67883903dbe9',
  26. 'value' => '',
  27. 'tip' => '<a href="http://www.tuling123.com/web/robot_access!index.action?cur=l_05" target="_blank">前往图灵机器人官网申请API</a>'
  28. ),
  29. 'enter_tip' => array(
  30. 'title' => '进入聊天提示语',
  31. 'type' => 'textarea',
  32. 'placeholder' => '你想聊点什么呢',
  33. 'value' => '',
  34. 'tip' => '用户发送关键词进入机器人聊天模式时回复给用户的内容'
  35. ),
  36. 'keep_time' => array(
  37. 'title' => '会话保持时间',
  38. 'type' => 'text',
  39. 'placeholder' => '300',
  40. 'value' => '',
  41. 'tip' => '在此时间范围内,用户一直处在机器人聊天模式中,默认300秒(5分钟)'
  42. ),
  43. 'exit_keyword' => array(
  44. 'title' => '退出聊天关键词',
  45. 'type' => 'text',
  46. 'placeholder' => '退出',
  47. 'value' => '',
  48. 'tip' => '用户发送此关键词主动退出机器人聊天模式'
  49. ),
  50. 'exit_tip' => array(
  51. 'title' => '退出聊天提示语',
  52. 'type' => 'textarea',
  53. 'placeholder' => '下次无聊的时候可以再找我聊天哦',
  54. 'value' => '',
  55. 'tip' => '用户退出机器人聊天模式时回复给用户的内容'
  56. )
  57. )
  58. )

设置成功后在插件管理后台可以看到插件配置项聊天机器人 - 图4

三、编写微信交互代码在插件后台配制处填写好申请到的图灵机器人api并进行其他的聊天回复设置后,就可以通过插件的RespondController来编写微信端的交互代码。

  1. /**
  2. * 微信交互
  3. * @param $message array 微信消息数组
  4. * @author 艾逗笔<765532665@qq.com>
  5. */
  6. public function wechat($message = array()) {
  7. $settings = get_addon_settings('IdouChat');
  8. $settings['enter_tip'] || $settings['enter_tip'] = '你想聊点什么呢';
  9. $settings['keep_time'] || $settings['keep_time'] = 300;
  10. $settings['exit_keyword'] || $settings['exit_keyword'] = '退出';
  11. $settings['exit_tip'] || $settings['exit_tip'] = '下次无聊的时候可以再找我聊天哦';
  12. if (!$settings['api_url'] || !$settings['api_key']) {
  13. reply_text('机器人聊天接口未填写,暂时不能使用此功能');
  14. exit();
  15. }
  16. if ($message['MsgType'] == 'voice') {
  17. if ($settings['can_voice'] == '1') {
  18. $content = $message['Recognition']; // 语音识别,直接开启机器人聊天模式
  19. $reply = $this->turingAPI($content);
  20. if (is_array($reply)) {
  21. return reply_news($reply);
  22. } else {
  23. return reply_text($reply);
  24. }
  25. }
  26. } else {
  27. $content = $message['Content']; // 通过消息上下文机制与机器人展开聊天
  28. if (!$this->in_context) {
  29. $reply = $settings['enter_tip'];
  30. $this->begin_context($settings['keep_time']); // 开启上下文模式
  31. } else {
  32. if ($content == $settings['exit_keyword']) {
  33. $reply = $settings['exit_tip'];
  34. $this->end_context();
  35. } else {
  36. $reply = $this->turingAPI($content);
  37. $this->keep_context($settings['keep_time']); // 保持消息上下文
  38. }
  39. }
  40. if (is_array($reply)) {
  41. return reply_news($reply);
  42. } else {
  43. return reply_text($reply);
  44. }
  45. }
  46. }

上述代码的大致逻辑是:1、使用get_addon_settings('IdouChat')获取到插件的配置信息2、接收微信端用户发送的消息并判断消息上下文3、调用图灵机器人API给用户回复消息

四、设置关键词响应在编写了上述代码后,需要在插件管理后台的响应规则出设置一下触发关键词,设置成功后微信端用户发送对应的关键词内容后,消息会被分发到此插件的Respond控制器的wechat方法,那么第三步中设置的交互代码将会执行,从而可以实现机器人聊天功能。聊天机器人 - 图5

五、效果预览聊天机器人 - 图6

总结本篇教程简要讲解了使用豆信框架开发一个聊天机器人功能的流程。涉及到的知识点有:1、使用豆信框架后台创建插件2、在插件信息文件info.php里面编写插件配置信息3、使用图灵机器人API4、编写插件响应控制器,处理微信端发送的消息5、使用消息上下文将用户连续两次的交互绑定在一起

插件源代码:https://github.com/mikemintang/douchat_addons/tree/master/IdouChat