1. 使用说明
欢迎使用 “AICC” 工作台集成通信SDK。SDK 对在线工作台嵌入和被嵌入情况下的通信功能进行了封装,让您不用复杂编程即可实现在线客服工作台与自有系统的双向通信完成页面交互及数据传递。
1.1. 支持场景
当前SDK支持在以下场景使用:
-
1、您的系统页面使用iframe嵌套在线工作台页面,例如单点登录等场景
-
2、在线工作台使用iframe嵌套您的系统页面,例如工作台右侧边栏自定义tab
1.1.2. 工作台右侧边栏自定义tab
使用管理员账号登录-系统设置-在线客服-系统对接-自定义tab页,点击新建创建一个自定义tab,地址指到需要操作sdk的页面的url。(如果您的列表中没有可用的自定义菜单,请联系售后支持帮您进行配置)
再在所配置的页面接入我们在线的sdk即可
1.2. 支持功能
当前SDK支持如下主要功能:
-
1、监听在线工作台事件变化,例如:座席状态变更、切换会话、掉线等
-
2、操作在线工作台,例如:发消息,发卡片(商品、小程序、订单等)、控制工作台右侧边栏切换等
2. 快速开始
2.1. 安装SDK
首先在页面中引入integration-api.js
// 引入sdk 示例
<script src="https://agent-bj.clink.cn/sdk/integration-api.js"></script>
2.2. 初始化
1、作为上层应用(单点登录)使用sdk时, 传入AICC所在iframe的id
AICCIntegrationAPI.init('iframe-id');
2、作为下层应用(工作台右侧边栏自定义tab)使用sdk时
AICCIntegrationAPI.init();
3. 事件监听
现暂时只支持上传应用监听,即工作台被内嵌情况才能监听到
AICCIntegrationAPI.addEventListener(eventName, function)
3.1. 获取通信状态
事件名称:onReady
如果无法保证引入的sdk是立即执行的,例如异步加载sdk,可先判断通信状态,确认可用再发起动作
-
示例:
/**
* 方式一:直接获取
* 只读 boolean
* 在AICC系统发送的建立连接消息后,会跟着发送一条onReady消息,sdk接收到后isReady状态置为true
* 只纪录一次,重新加载AICC的iframe就需要重新init sdk
*/
const flag = AICCIntegrationAPI.isReady;
/**
* 方式二:监听事件
* 连接建立后会触发一次
*/
AICCIntegrationAPI.addEventListener('onReady', (e) => {
console.log('onReady-----------');
console.log(e);
});
3.2. 登录过期感知
事件名称:unAuthorization
注意:只有作为上层应用才会收到此消息
示例:
AICCIntegrationAPI.addEventListener('unAuthorization', (e) => {
console.log('unAuthorization-----------');
console.log(e);
});
3.3. 座席事件感知
事件名称:chatAgentChange
示例:
AICCIntegrationAPI.addEventListener('chatAgentChange', e => {
console.log('chatAgentChange-----------');
console.log(e);
});
具体会作为chatAgentChange事件传递过来的参数e的数据格式如下
3.3.1. 座席切换状态
名称 |
类型 |
说明 |
event |
string |
'AGENT_STATUS' ,标识座席切换状态事件 |
cno |
string |
座席号 |
prevStatus |
string |
切换前状态 |
status |
string |
目标状态,值为“管理置忙”时为管理员操作 |
示例:
{
event: 'AGENT_STATUS',
cno:'001',
prevStatus: '空闲',
status: '离线',
}
3.3.2. 座席掉线
掉线期间会频繁触发
名称 |
类型 |
说明 |
event |
string |
'CHAT_BREAK_LINE' ,标识座席掉线事件 |
cno |
string |
座席号 |
示例:
{
event: 'CHAT_BREAK_LINE',
cno: '001', // 座席号
}
3.3.3. 座席被踢下线
名称 |
类型 |
说明 |
event |
string |
'CHAT_KICKOUT' ,标识座席被踢下线事件 |
cno |
string |
座席号 |
示例:
{
event: 'CHAT_KICKOUT',
cno: '001', // 座席号
}
3.4. 会话事件感知
事件名称:chatSessionChange
示例:
AICCIntegrationAPI.addEventListener('chatSessionChange', e => {
console.log('chatSessionChange-----------');
console.log(e);
});
具体会作为chatSessionChange事件传递过来的参数如下
3.4.1. 切换会话
名称 |
类型 |
说明 |
event |
string |
'SWITCH_CHAT_CARD' ,标识切换会话事件 |
activeTab |
CHAT_STATUS_TYPE |
左侧tab选项 |
sessionState |
CARD_STATUS_TYPE |
左侧待处理tab下的子tab选项,只有当activeTab是’handle’待处理下才会有值 |
contactName |
string |
渠道名称 |
appId |
string |
渠道id |
appName |
string |
接入号名称 |
mainUniqueId |
string |
会话id |
startTime |
number |
时间戳, 开始时间 |
endTime |
number |
时间戳, 结束时间 |
qname |
string |
来源队列 |
cno |
string |
受理座席 |
clientName |
string |
受理座席名称 |
customerCity |
string |
访客地区 |
visitorId |
string |
访客id |
enterpriseId |
number |
企业id |
visitorName |
string |
访客名称 |
customerId |
string |
客户id |
visitorExtraInfo |
object |
访客自定义参数,可由访客接入会话时提供自定义参数,该值还包含询前表单内容。该值默认包含访客ID与访客名称。 |
contactType |
number |
接入渠道 1:微信、2:网页、3:座席、4:小程序、5:微博、6:企业微信、7:百度营销、8:SDK、9:微信客服(独立版)、10:第三方接入、11:移动端、12:企微客服渠道、13:飞书渠道、19:微信客服(联合版) |
ts类型
export enum CHAT_STATUS_TYPE {
HANDLE = 'handle', // 待处理
QUEUE = 'queue', // 排队
LEAVE = 'leaveMsg', // 留言
BROWSE = 'browse', // 浏览中
HISTORY = 'history', // 历史
}
export enum CARD_STATUS_TYPE {
CHAT = 'chat', // 会话中
TO_REPLAY = 'toReplay', // 未回复
ROBOT = 'robot', // 机器人
}
示例:
{
event: 'SWITCH_CHAT_CARD',
activeTab: 'handle',
sessionState: 'robot',
contactName: '网页',
appId: '6bdddf5e-xxxxxx-6bf5b4efbec4',
appName: '测试网页',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
startTime: 1716791861,
endTime: 1716793103,
qname: '客服队列一',
cno: '001',
clientName: '测试座席',
customerCity: '成都',
visitorId: '0001',
enterpriseId: 8001xxx12,
}
3.4.2. 会话结束
名称 |
类型 |
说明 |
event |
string |
'CLOSE_CHAT_CARD' ,标识会话结束事件 |
mainUniqueId |
string |
会话id |
endTime |
number |
时间戳, 结束时间 |
reason |
REASON_TYPE |
结束原因,见下面ts类型 |
enterpriseId |
number |
企业id |
ts类型
export enum REASON_TYPE {
// 队列溢出
QUEUE_FULL = 1,
// 无可用座席
QUEUE_EMPTY = 2,
// 留言结束
VISITOR_LEAVE_MESSAGE = 3,
// 座席主动关闭
CLIENT_CLOSE = 5,
// 访客主动关闭
VISITOR_CLOSE = 6,
// 系统超时
SYSTEM_TIMEOUT = 7,
// 系统关闭
SYSTEM = 10,
// 访客放弃排队
QUEUE_ABANDON = 11,
// 队列超时
QUEUE_TIMEOUT = 12,
// 访客超时未回复关闭
VISITOR_REPLY_TIMEOUT = 13,
// 访客离开超时关闭
VISITOR_LEAVE_TIMEOUT = 14,
// 访客取关公众号
VISITOR_UNSUBSCRIBE = 15,
}
示例:
{
event: 'CLOSE_CHAT_CARD',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
endTime: 1716793103,
reason: 5,
enterpriseId: 8001xxx12,
}
3.4.3. 响铃
名称 |
类型 |
说明 |
event |
string |
'CHAT_RING' ,标识响铃事件 |
cno |
string |
座席号 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
visitorName |
string |
访客名称,根据接收的推送事件不同,此字段可能不存在 |
ringType |
RING_TYPE |
响铃类型 |
ringTime |
number |
时间戳, 响铃事件 |
ts类型
enum RING_TYPE {
// 座席超时
agentTimeoutSound = 'agentTimeoutSound',
// 新会话
newSessionSound = 'newSessionSound',
// 新消息
msgSoundSetting = 'msgSoundSetting',
// 访客下线
visitorOfflineSound = 'visitorOfflineSound',
// 转接
transferApplySound = 'transferApplySound',
}
示例:
{
event: 'CHAT_RING',
cno: '001',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
visitorName: 'x先生',
ringType: 'transferApplySound',
ringTime: 1716793103,
}
3.4.4. 座席发起三方会话
名称 |
类型 |
说明 |
event |
string |
'INVITE_GROUP' ,标识座席发起三方会话事件 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
cno |
string |
发起三方会话座席号 |
targetCno |
string |
目标座席号 |
示例:
{
event: 'INVITE_GROUP',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
cno: '001',
targetCno: '002',
}
3.4.5. 座席加入三方会话
名称 |
类型 |
说明 |
event |
string |
'JOIN_GROUP' ,标识座席加入三方会话事件 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
cno |
string |
当前接受三方会话座席号 |
sourceCno |
string |
发起三方会话座席号 |
示例:
{
event: 'JOIN_GROUP',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
cno: '001',
sourceCno: '002',
}
3.4.6. 座席拒绝加入三方会话
名称 |
类型 |
说明 |
event |
string |
'REFUSE_GROUP' ,标识座席拒绝加入三方会话事件 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
cno |
string |
当前拒绝三方会话座席号 |
sourceCno |
string |
发起三方会话座席号 |
示例:
{
event: 'REFUSE_GROUP',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
cno: '001',
sourceCno: '002',
}
3.4.7. 座席转接会话
名称 |
类型 |
说明 |
event |
string |
'CHAT_TRANSFER' ,标识座席转接会话事件 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
cno |
string |
发起转接座席号 |
targetCno |
string |
目标座席号, 转给座席时才有 |
targetQno |
string |
目标队列号, 转给队列时才有 |
示例:
{
event: 'CHAT_TRANSFER',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
cno: '001',
targetCno: '002',
}
3.4.8. 座席接受转接
名称 |
类型 |
说明 |
event |
string |
'ACCEPT_TRANSFER' ,标识座席接受转接事件 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
cno |
string |
当前接受转接座席号 |
sourceCno |
string |
发起转接座席号 |
示例:
{
event: 'ACCEPT_TRANSFER',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
cno: '001',
sourceCno: '002',
}
3.4.9. 座席拒绝转接
名称 |
类型 |
说明 |
event |
string |
'REJECT_TRANSFER' ,标识座席接受转接事件 |
mainUniqueId |
string |
会话id |
visitorId |
string |
访客id |
cno |
string |
当前接收转接座席号 |
sourceCno |
string |
发起转接座席号 |
示例:
{
event: 'REJECT_TRANSFER',
mainUniqueId: '54227446-xxxxxx-c49ed4a.1716791861',
visitorId: '0001',
cno: '001',
sourceCno: '002',
}
3.5. 座席拖拽图片/视频上传感知
事件名称:chatFileDrop
注意:只有作为下层应用才会收到此消息
示例:
AICCIntegrationAPI.addEventListener('chatFileDrop', (fileUrl) => {
console.log('chatFileDrop-----------');
console.log(fileUrl);
// fileUrl为文件的url,此链接为临时链接,需要下载文件另行保存
// https://xxx.com/xxx.jpg
});
4. 事件触发
AICCIntegrationAPI.actionEmit(actionName, params[, function])
4.1. 切换路由导航
动件名称:navigate
请求参数:
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
key |
是 |
string |
需要跳转目标页面所对应 privilegeId |
params |
否 |
object |
需要跳转目标页面URL中需携带的附加参数 |
返回参数:
参数 | 类型 | 说明 |
---|---|---|
success |
boolean |
操作是否成功 |
message |
string |
操作结果信息 |
返回结果示例
{
success: true,
message: '成功'
}
示例:
function changeRoute(result) {
console.log('切换路由导航回调')
console.log(result)
}
AICCIntegrationAPI.actionEmit('navigate', {key: 'home', params: {id: '001'}, changeRoute);
4.2. 关闭页面
动件名称:close
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
key |
是 |
string |
需要关闭页面所对应 privilegeId |
params |
否 |
object |
需要关闭页面URL中携带的附加参数 |
返回参数:
参数 | 类型 | 说明 |
---|---|---|
success |
boolean |
操作是否成功 |
message |
string |
操作结果信息 |
返回结果示例
{
success: true,
message: '成功'
}
示例:
function closePage(result) {
console.log('关闭页面回调')
console.log(result)
}
AICCIntegrationAPI.actionEmit('close', {key: 'CHAT_WORKBENCH'}, closePage);
4.3. 切换右侧边栏
动件名称:switchChatRightTab
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
tabName |
是 |
string |
tab名称,会根据传入的tab名称,将工作台右侧边栏切换到对应匹配到tabName的tab |
tabUrlParams |
否 |
object |
当需要切换工作台右侧tab到一个配置的自定义tab上时,可以添加此参数,将tabUrlParams解析为url参数携带到自定义tab链接上 |
示例:
AICCIntegrationAPI.actionEmit('switchChatRightTab', {
tabName: '商品管理',
tabUrlParams: {
id: '001'
}
});
4.4. 发消息
动件名称:sendChatMessage
示例:
AICCIntegrationAPI.actionEmit('sendChatMessage', messageInfo);
具体messageInfo内容与要发的消息类型有关,见以下子菜单
4.4.1. 发送文本消息
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
type |
是 |
string |
'sendText' ,标识发送文本消息 |
content |
是 |
string |
发送文本消息的内容 |
示例:
var messageInfo = {
type: "sendText",
content: "文本消息",
};
AICCIntegrationAPI.actionEmit('sendChatMessage', messageInfo);
4.4.2. 发送商品卡片
示例:
// 参数说明:
// {
// type: "sendCard", 发送卡片消息类型,固定
// title: "", 标题
// subTitle: "", 子标题,一般用作商品名
// description: "", 描述,一般用作对商品的描述
// price: "", 价格信息
// img: "", 图片链接
// url: "", 点击卡片跳转url
// status:"", 状态
// subUrl:"",座席端点击卡片跳转链接
// tabMenuName:"",商品卡片详情所展示到的自定义菜单名称
// time: "", 时间信息
// extraInfo: [
// { name: "", value: "" }, 扩展信息,可多条
// ...
// ]
// };
var messageInfo = {
type: "sendCard",
title: '订单号:#2112323123',
subTitle: '华为P40 麒麟990 5G SoC芯片 5000万超感知徕卡三摄 30倍数字变焦',
description: '麒麟990芯片;5000万超感知徕卡三摄;30倍数字变焦;华为手机至高6期免息',
price: '¥6999',
time: '2021/12/21 21:50',
img: '',
status: '完成',
tabMenuName: '自定义菜单',
url: 'https://item.jd.com/100006607505.html',
subUrl: 'https://www.baidu.com',
extraInfo: [
{ name: '自定义字段1', value: '' },
{ name: '自定义字段2', value: '' },
{ name: '自定义字段3', value: '' },
{ name: '自定义字段4', value: '' },
{ name: '自定义字段5', value: '' },
],
};
AICCIntegrationAPI.actionEmit('sendChatMessage', messageInfo);
4.4.3. 发送订单
传入数据说明
若订单数据只传productList,则显示为商品列表。productList内只放入一个商品数据,则显示为一个商品
MessageInfo发送消息格式
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
type |
是 |
string |
'sendCard' ,标识发送卡片消息 |
cardType |
是 |
string |
'3',标识是订单卡片 |
orderInfo |
是 |
OrderInfo |
见OrderInfo订单数据,订单具体消息数据格式 |
OrderInfo订单数据
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
title |
否 |
string |
店铺名称 |
logo |
否 |
string |
店铺头像 |
time |
否 |
string |
订单时间,具体时间 |
number |
否 |
string |
订单编号 |
status |
否 |
订单状态 |
订单状态,具体文字状态 |
bottomButtonConfig |
否 |
ButtonConfig |
订单底部按钮,只支持链接模式,建议一个订单包含商品较多的情况,这里只传递有限的几个商品数据,其他商品采用此按钮配置链接跳转到查看该订单所有商品的页面。ButtonConfig见其他格式说明 |
productList |
是 |
Product[] |
商品列表数组,Product表示单个商品,说明Product |
Product
单个商品的数据格式
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
title |
是 |
string |
商品标题 |
subtitle |
否 |
string |
商品副标题 |
remark |
否 |
string |
描述,展示为标签样式 |
amount |
否 |
string |
商品数量,非数字,可携带单位 |
price |
否 |
string |
商品价格,非数字,可携带单位 |
img |
是 |
string |
商品图片url |
imgTag |
否 |
string |
商品标签,对应商品图片左上角标签文字,建议小于等于4个中文 |
imgTagStyle |
否 |
StyleType |
商品标签样式,StyleType见其他格式说明 |
agentNavigateTabName |
否 |
string |
只在在线客服工作台座席端才起作用,客服点击则定位到工作台右侧边栏同名的 tab 打开 |
visitorUrl |
否 |
string |
访客点击后打开的链接 |
agentUrl |
否 |
string |
客服点击后打开的链接 |
appId |
否 |
string |
访客点击跳转目标小程序的appId,适用于小程序嵌入H5和公众号嵌入H5,只在访客端生效,和pagePath一起传才会触发小程序跳转,优先级高于url |
pagePath |
否 |
string |
访客点击跳转目标小程序的路由地址,适用于小程序嵌入H5和公众号嵌入H5,和appId一起传才会触发小程序跳转,优先级高于url |
status |
否 |
string |
商品状态 |
其他格式说明
以下是具体的ts类型
export type ExtraDataType = string; // json
export enum ButtonType {
LINK = 'link',
}
export interface NameValue {
label: string;
value: string;
}
export interface StyleType {
fontWeight?: string; // 字重
color?: string; //字体颜色
border?: string; //边框
background?: string; //背景
}
export interface ButtonConfig {
type: ButtonType;
text: string;
style?: StyleType;
// ------------link类型字段--------------
linkUrl?: string;
target?: string; // a标签跳转的类型
// link类型需要跳转小程序字段,需要跳转小程序时以下两个字段都必须传
appId?: string;
pagePath?: string;
}
export interface Product {
title: string;
subtitle?: string;
remark?: string;
amount?: string;
price?: string;
img: string;
imgTag?: string;
imgTagStyle?: StyleType;
agentNavigateTabName?: string;
visitorUrl?: string;
agentUrl?: string;
appId?: string;
pagePath?: string;
status?: string;
extraData?: ExtraDataType;
}
export interface Order {
title?: string;
logo?: string;
time?: string;
number?: string;
status?: string;
bottomButtonConfig?: ButtonConfig;
extraData?: ExtraDataType;
productList: Product[];
}
示例:
// 发送订单
var messageInfo = {
// 固定,标识发卡片消息
type: 'sendCard',
// 固定,标识订单卡片
cardType: '3',
// 订单数据
orderInfo: {
"title": "XX专营店",
"logo": "https://xxx.com/image/xx.jpeg",
"time": "xx年xx月xx日 00:00:00",
"number": "1234**2457000",
"status": "待收货",
"bottomButtonConfig": {
"text": "共计120件,查看更多",
"type": "link",
"linkUrl": "https://xxx.com/",
"target": "",
"appId": "",
"pagePath": "",
"style": {}
},
"productList": [
{
"title": "xxx商品",
"subtitle": "商品说明",
"remark": "商品描述",
"amount": "x5",
"price": "$2999",
"img": "https://xxx.com/image/xxx.jpeg",
"imgTag": "敬请期待",
"imgTagStyle": {
"color": "red"
},
"agentNavigateTabName": "预览页面",
"visitorUrl": "https://xxx.com/",
"agentUrl": "https://xxx.com/",
"appId": "3qwrq***o43op",
"pagePath": "/xxx/path",
"status": "待收货",
}
]
}
};
AICCIntegrationAPI.actionEmit('sendChatMessage', messageInfo);
以上代码触发效果如下
4.4.4. 发送物流卡片
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
type |
是 |
string |
'sendCard' ,标识发送卡片消息 |
cardType |
是 |
string |
'1',标识是物流卡片 |
createTime |
是 |
string |
下单时间 |
goodsName |
是 |
string |
商品名称 |
senderName |
是 |
string |
寄件人姓名 |
recipientName |
是 |
string |
收件人姓名 |
goodsAmount |
是 |
string |
商品金额 |
goodsQuantity |
是 |
string |
商品数量 |
orderLink |
是 |
string |
订单链接 |
orderNumber |
否 |
string |
订单编号 |
var messageInfo = {
type: 'sendCard',
cardType: "1",
createTime: "承运日期:4月11日",
goodsName: "商品名称:石子",
senderName: "xx厂",
recipientName: "xx站",
goodsAmount: "58.00元/吨",
goodsQuantity: "可接一车",
orderLink: "https://www.xxx.com",
orderNumber: "80xxxx41258",
};
AICCIntegrationAPI.actionEmit('sendChatMessage', messageInfo);
以上代码触发效果如下
4.4.5. 发送小程序卡片
发送小程序卡片必须微信公众号和小程序关联(若想通过复制链接获取小程序链接需开启小程序链接管理权限)
名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|
type |
是 |
string |
'sendCard' ,标识发送卡片消息 |
cardType |
是 |
string |
'2',标识是小程序卡片 |
title |
是 |
string |
小程序标题 |
pagepath |
是 |
string |
点击卡片跳转的路由 |
query |
否 |
string |
点击卡片跳转的路由需要携带的参数 |
miniProgramUrl |
否 |
string |
点击卡片跳转的完整链接 |
picurl |
是 |
string |
小程序展示图,图片推荐大小为810px * 410px |
appid |
是 |
string |
小程序appId |
appSecret |
是 |
string |
小程序appSecret |
appLogo |
是 |
string |
小程序logo,推荐图片长宽比例是5:4,推荐的logo大小可以是50px40px或100px80px |
appName |
是 |
string |
小程序名称 |
访客端收到卡片后的URL点击执行优先级顺序:
1、网页:miniProgramUrl > appSecret获取的URL > pagepath+query
2、微信小程序、公众号、小程序嵌入H5、公众号嵌入H5:pagepath+query
访客端收到卡片后的URL复制执行优先级:
网页、小程序嵌入H5、公众号嵌入H5:miniProgramUrl > appSecret获取的URL > pagepath+query
示例:
var messageInfo = {
type: 'sendCard',
cardType: '2',
title: '欢迎访问',
pagepath: 'pages/index/index',
query: 'id=1&name=zs',
miniProgramUrl: 'https://wxaurl.cn/FX8cifcl49',
picurl: 'https://xxx.com/image/xx.jpeg',
appid: 'wx9a65xxxx0',
appSecret: '91cd2xxxxxxxxxxxxxxxb6e884',
appLogo:'https://xxx.com/image/xx.jpeg',
appName: '小程序测试'
};
AICCIntegrationAPI.actionEmit('sendChatMessage', messageInfo);
以上代码触发效果如下