# 机器人开发指南
# 概述
机器人应用可以看作是某个外部系统在FinChat的虚拟账号,来自外部系统的通知可以通过会话的形式传递给用户,用户也可以通过会话的形式命令系统执行特定操作。
在FinChat内,机器人应用可以:
- 发送消息:发送给用户或群聊,机器人“说”的能力
- 订阅事件:订阅包括用户发消息给机器人在内的各类事件,机器人“听”的能力
- 指令:定义机器人能响应的一组核心命令
- 会话卡片:一种支持自定义内容与交互的消息类型,可以帮助用户与应用服务建立连接
# 开发指南
机器人应用的创建、上架和测试流程可以查看应用开发与管理流程,本章节主要介绍机器人特有能力的配置与实现。
# 1.发送消息
机器人可以给某个用户或某个群聊发送消息,具体可以查看发送消息。
机器人还可以主动创建群聊并发送消息,具体可以查看群管理
# 2.订阅事件
订阅事件后,机器人才能接收用户发送的消息,才能在正确的时机主动发送消息给用户。
目前支持的订阅事件和回调接口可以查看事件订阅
# 配置订阅事件
1.回调配置:填写回调URL和Token
2.事件订阅:选择订阅的事件
# 3.指令
通过为机器人添加指令,可以提示用户该如何与机器人进行交互。
当用户与机器人会话时,会在输入框上方提示用户当前机器人支持的指令。用户选择某个指令并发送后,机器人通过接收“接收消息”事件获知指令,再通过发送消息进行相应。
# 指令配置
在应用开发详情-机器人指令页面,添加和编辑指令。注意,指令必须配合订阅事件才能成功使用。
# 4.会话卡片
会话卡片(Convo UI,简称CUI)是FinChat中的一种消息格式,借由该种消息,用户在房间窗口内就可以完成与系统的复杂数据交互。
FinChat定义了CUI的标准协议,开发者可以任意组合这些元素生成会话卡片,连接用户与系统。
以下图为例,“FinChat小助手”机器人发送的这条CUI消息,由context/input/submit元素组成,用户提交后即回将数据回调给应用的服务。
# CUI消息结构
{
"body": "[交互卡片]",
"info": {
"type": "form",
"status": "input", // input/loading/disable
"shared": true, // 是否为共享消息
"fcids": [ // 独享消息更新的fcid
],
"elements": [ // 元素可参考下文
],
},
"msgtype": "m.cui",
"version": "0.1.0",
}
# CUI消息元素
1.context text 文本类型
{
subtype: 'text',
type: 'context',
value: 'FinChat私有化部署POC申请'
},
2.divider 分割线
divider
可选: height: 表示分割线的粗细(默认是1px) background: 表示线条的颜
{
type: 'divider',
subtype: 'divider',
height: '1',
background: '#666'
},
3.image
image
o_url: 获取这个路径,需要先调用上传接口
{
type: 'image',
subtype: 'image',
o_url: 'mxc://dev.finogeeks.club/6465762e66696e6f6765656b732e636c75625e816df2881cef00012a43ed'
},
4.input
text-input
{
type: 'input',
subtype: 'text-input',
placeholder: '公司名称',
key: 'company',
value: '23'
},
dropdown-input
{
type: 'input',
subtype: 'dropdown-input',
key: 'test',
placeholder: 'test select',
value: '',
options: [
{ label: 'test', value: '1' },
{ label: 'test2', value: '2' },
],
},
5.button
submit
{
type: 'button',
subtype: 'submit',
value: '提交',
action: 'submit'
},
reply
类似问答选择型,该类button就是一个选项
{
type: 'button',
subtype: 'reply',
key: 'test',
value: '测试reply',
status: 'xxx'
},
openUrl
{
type: 'button',
subtype: 'openurl',
action: 'https://www.finogeeks.com/',
value: 'FinChat',
}