阿里 ChatUI 开源:让对话美而简单
共 4605字,需浏览 10分钟
·
2020-10-02 04:25
背景
介绍
主动:用户还没想起,机器能预知用户所需;
高效:用户使用流顺,符合自然预期, 有效进行互动;
情感:用户有情感引导,情感互动,产生心理偏好或习惯,达至自然回访;
沉浸:用户能通过视觉,互动及物理传感器等触点,感受智能的新鲜感,引发交互意愿。
ChatUI 组件库
对话容器
Chat
对话容器组件。一开始是因为目前聊天应用大同小异的界面,我们为了方便把这种布局抽象成一个组件,上中下结构,集成多个基础组件,这样就不用每次重新布局了。刘海屏高度:全屏的时候需要处理刘海屏的高度,否则会被遮挡;
输入框定位:出软键盘后,输入框会被键盘挡住的问题;
响应式设计:PC 和移动端交互的差异,需要适配。
Chat
组件中。基于此,开发者通过一个组件即可实现一个对话界面,然后把重心放到业务开发上,而不再需要关心机型差异或者整体的布局设计,提高开发效率:
importReact, { useState } from 'react';
importChat from '@chatui/core';
functionApp() {
const[messages] = useState([]);
const[quickReplies] = useState([]);
const renderMessageContent = () => {};
const handleQuickReplyClick = () => {};
const handleSend = () => {};
return(
<Chat
navbar={{ title: '智能助理'}}
quickReplies={quickReplies}
onQuickReplyClick={handleQuickReplyClick}
messages={messages}
renderMessageContent={renderMessageContent}
onSend={handleSend}
/>
);
}
响应式
functionApp() {
return(
<Chat wideBreakpoint="600px"/>
);
}
wideBreakpoint
后,在超过 600px 宽度时 ChatUI 将以宽屏模式展示,内部的组件也将改变交互形式,比如:工具栏从加号里拿出来放到输入框旁边
工具栏内部渲染改成浮层中渲染
上拉弹窗会改成居中显示
body
加一个 class:S--wide
,方便开发者编写对应样式。无障碍支持
id
来实现无障碍能力,比如 aria-labelledby
属性,如果没传 id
ChatUI 也会自动生成。定制主题
:root {
--brand-1: #ffb300;
--brand-2: #ffc233;
--brand-3: #ffe48c;
--black: #000;
--white: #fff;
--gray-1: rgba(0,0,0,0.87);
--gray-2: rgba(0,0,0,0.54);
--gray-3: rgba(0,0,0,0.4);
--gray-4: rgba(0,0,0,0.26);
--gray-5: rgba(0,0,0,0.2);
--gray-6: rgba(0,0,0,0.1);
--gray-7: rgba(0,0,0,0.05);
--gray-8: rgba(0,0,0,0.03);
--light-1: #f2f4f5;
--light-2: #fafafa;
--blue: #39f;
--gray-dark: #333;
--green: #62d957;
--orange: #f70;
--red: #f56262;
--yellow: #ffc233;
--yellow-light: #fff9db;
}
除了上述特色,ChatUI 还完全使用 TypeScript 开发,提供完整的类型定义文件,支持多语言,有完善的文档和代码示例,有单元测试加持,等等。ChatUI Pro
rel="stylesheet"href="//g.alicdn.com/chatui/sdk-v2/0.0.8/sdk.css">
id="root">
ChatUI Card
data
、 ctx
、 meta
exportdefaultfunctionMyCard({ data, ctx, meta }) {
console.log(data, ctx, meta);
return
{...};
}
data
是传入卡片的数据,不同的卡片需要的数据格式不同ctx
是卡片依赖的上下文,包括通用函数和全局配置信息meta
是辅助信息,比如卡片是否在历史消息中等
newChatSDK({
components: {
'adaptable-action-card': '//g.alicdn.com/alime-components/adaptable-action-card/0.1.7/index.js'
}
}
components
配置的 key 是卡片的 code,value 是卡片代码的 CDN 地址。此外,只需要后端问答接口,返回对应的 code,以及卡片需要的数据即可。后续规划
链接
官网链接:https://chatui.io/
GitHub 仓库:https://github.com/alibaba/ChatUI
反馈建议:https://github.com/alibaba/ChatUI/issues