机器人消息排版.md 3.0 KB

机器人消息排版

前言

智能机器人消息作为云信内置的一种基本消息,相比其他消息类型,有其不一样的特殊性如下:

  • 机器人的上下行消息

机器人的消息分上行和下行两种。用户发给机器人的消息称为上行消息,通常以纯文本形式展现,在组件中,复用了和文本消息同样的配置;机器人发给用户的消息称为下行消息,消息模板由用户在管理后台配置,消息内容可以允许以文本,图片,按钮的形式进行自由组合,这样会造成在界面上的表现形式比较繁多。

  • 机器人消息交互层面的迷惑性

机器人消息经常会和文本消息有一定的类似,特定的交互形式下,两者还会由于用户的输入进行改变,以组件的交互举例:

  • 当用户在输入框中 @ 的用户不包括机器人时,组件认为这是一条文本,以文本消息形式发出。
  • 当用户在输入框中 @ 的用户包括机器人时,组件认为这是一段需要和机器人交互的内容,会自动以机器人消息形式发出。

虽然在界面展示形式上都是一个气泡中包含了一些文字,但由于 @ 的对象不同,实际上消息类型是有一定差异的。

  • 机器人下行消息模板界面

机器人消息模板由用户在管理后台,机器人知识库中自行配置。一般以 xml 布局文件形式下发到客户端,这个时候客户端需要解析整个模板数据,构造出适合的布局模型,再传入视图进行渲染。

机器人模板布局数据解析

由于机器人后台可提供的数据形式比较灵活,数据可以由后台内置的类型机型有限的组合,也可以由开发者进行完全的自定义。这里组件针对前一种有限组合的情况,提供了一套快速集成的模板数据转换到视图的方案。

机器人下行消息中,获取真正属于“机器人回复”的内容可通过 RobotAttachment 调用getResponse 方法,这已经是 SDK 将 xml 转换成 json 格式后的结果。

RobotAttachment attachment = (RobotAttachment) message.getAttachment();

// 下行消息
if (attachment.isRobotSend()) {
	String robotContent = attachment.getResponse();
}

接下来组件通过机器人回复内容 robotContent 构造RobotResponseContent 对象,交给 RobotContentLinearLayout 展示。

模板数据视图

机器人回复消息由文本、按钮、图片组成,其中按钮对应机器人协议中的 link 元素所对应的内容。按钮内部又可以嵌套文本、图片、按钮。 UIKit 提供了一组自定义View 展示不同的机器人消息元素。单条机器人下行消息整体视图为 RobotContentLinearLayout,可以从 RobotResponseContent 直接构建对象。

机器人回复内容元素与自定义视图对应关系

内容元素 自定义视图
文本 RobotTextView
图片 RobotImageView
link RobotLinkView