借助自定义 CRM 解决方案,公司在使用未与 CCAI 平台进行标准集成的 CRM 时,可以充分利用 Contact Center AI 平台 (CCAI 平台) 门户。使用自研 CRM 或任何非标准 CRM 时,自定义 CRM 配置均可正常运行。
客服人员处理来电和聊天,主管可以使用 CCAI 平台门户网站监控和提取报告。有关通话或聊天会话的所有详细信息都存储在会话元数据文件中。此文件可包含 20 多种数据点,包括会话信息、转移、通话时长、参与者、诊断信息等。会话元数据文件可以解析并用于会话后分析和跟踪。
会话元数据和消费者上传的媒体文件会被推送到外部存储服务,客服人员能够在会话期间直接在客服人员适配器中看到消费者上传的媒体文件。
自定义 CRM 解决方案通过以下组件的组合来实现。部分组件可能适用于您的配置,也可能不适用:
为每次通话和聊天会话生成会话元数据文件
将元数据和媒体文件推送到外部存储服务
通用 API 集成
自定义查找网址
通过电子邮件更新 CRM 记录
通过客服人员适配器查找账号或支持请求
前提条件
如需使用自定义 CRM 功能,您必须先设置外部存储空间。如需了解详情,请参阅自定义 CRM 解决方案的外部存储。
会话元数据
会话元数据文件包含有关会话的详细信息。此电子邮件会在会话结束后 15 分钟发送。如需了解详情,请参阅会话元数据文件。
自定义 CRM 互动和集成方法
| 通用 API | 自定义网址 | |
|---|---|---|
| 账号查找 | 是 | 是 |
| 支持请求查询 | 是 | |
| 支持请求更新 | 是 | 否 |
通用 API
借助通用 API 集成方法,您可以使用自定义 CRM 的 API 与 CCAI Platform 建立双向连接。这种无缝方法与开箱即用的 CRM 集成体验相同。代理无需采取任何操作即可为通话或聊天会话创建 CRM 记录,具体取决于唯一的 API 配置。它可以实现无缝的记录查找和记录更新。
自定义网址
借助“自定义链接”选项,客服人员可以利用为每个会话创建的自定义链接与 CRM 进行互动。与标准 CRM 集成和通用 API 体验不同,客服人员需要采取行动才能创建 CRM 记录。在某些情况下,这可能只是在会话中启动带有自定义链接的标签页,而在其他情况下,客服人员可能需要手动创建记录。
自定义查找网址详情和配置
该网址的基本功能是执行 CRM 查找,但根据您的 CRM,可以根据自定义网址内容触发更复杂的流程。自定义 CRM 的网址可以使用包含会话信息的变量进行配置,并且在会话期间可在客服人员适配器中访问。访问该网址后,系统会触发自定义 CRM 执行查找操作。通过此 CRM 查找,客服人员可以针对正在进行的通话或聊天会话使用“工单弹出”功能。自定义链接流程完全依赖于自定义 CRM 处理此链接并根据需要修改或重写它的能力。
除非还使用了列出的电子邮件更新方法,否则外部存储的会话元数据、通话录音和其他文件不会与 CRM 记录相关联。
在这种配置中,座席将分别在不同的标签页中登录 CCAI 平台门户和 CRM。通话和聊天将在 CCAI Platform 标签页中处理,工单详情将在 CRM 标签页中访问。
此配置需要满足以下条件才能正常运行:
客服人员必须在浏览器中登录其 CRM
代理必须在其浏览器中登录 CCAI 平台门户
自定义查找网址必须预先配置
您的 CRM 需要处理自定义网址,以显示相关的 CRM 记录
自定义查找网址行为
CCAI 平台只会包含网址中不为空的参数。
会话结束后,CCAI 平台不会在 CCAI 平台数据库中存储包含 ANI/UID/电子邮件地址的生成的网址。
自定义查找网址配置
由于唯一标识符、CRM 功能和行为各不相同,您需要创建 2 个不同的网址,一个用于 IVR/PSTN/SMS 会话,另一个用于 Web 和移动 SDK 会话。IVR/PSTN/SMS 会话将使用 ANI 作为唯一标识符,而 Web 和移动 SDK 可能会使用 CUID 和电子邮件地址。
以下变量可用于配置查找网址:
| 变量 | 值 |
|---|---|
{CUSTOMER_PHONE_NUMBER} |
最终用户的手机号码 |
{ANI} |
最终用户的手机号码。为保持向后兼容性而保留。 |
{CUID} |
自定义用户 ID |
{EMAIL} |
最终用户电子邮件地址 |
{MENU_PATH} |
完整的队列菜单路径。 例如,“订单/订单确认/订单信息”。 |
{MENU_ID} |
菜单 ID |
{CHANNEL} |
会话渠道。可能的值:
|
{TYPE} |
会话类型。 通话的可能值:
聊天的可能值:
|
{SUPPORT_PHONE_NUMBER} |
最终用户拨打的支持中心手机号码。 |
{OUTBOUND_NUMBER} |
客服人员用于外拨手机的手机号码。 |
{SESSION_ID} |
会话 ID。可能的值:
|
{CUSTOM_AGENT_ID} |
user 对象中的可选代理 ID 字段。在会话建立并分配客服人员之前,无法获取客服人员 ID。因此,请配置您的实例,以延迟通话或聊天记录创建,从而为定义此变量留出时间。您可以在设置 > 操作管理 > CRM 记录创建详情中延迟创建通话或聊天记录。如需了解详情,请参阅 CRM 记录创建详情。 |
CCAI 平台门户配置
使用分配有管理员角色的账号登录 CCAI 平台门户。
依次前往设置 > 开发者设置。
在“CRM”部分中,选择自定义 CRM。
在 CRM 查找下,输入您的自定义网址。
选择要在 CRM 请求中使用的电话号码格式。
点击保存更改。
如果您尚未配置外部存储服务,请进行配置。如需了解详情,请参阅“外部存储空间”。
通过电子邮件更新 CRM 记录
在自定义查找网址等配置中,会话完成后,需要在 CRM 中更新会话元数据。借助此功能,CCAI Platform 可以使用电子邮件自动发送会话数据。会话结束后大约 15 分钟,系统会向配置的位置发送一封电子邮件,并使用电子邮件内容更新 CRM 中的记录。此功能可以进行全局配置,也可以按队列进行配置。收到电子邮件后,您的 CRM 可能会配置为更新或创建会话的新 CRM 记录。
用电子邮件发送详细信息
包含:
Subject line
包含会话元数据的正文(采用 JSON 语法)
TXT 格式的附件,包含聊天转写内容(如适用)
CCAI 平台会在会话结束后等待 15 分钟,然后发送电子邮件。
电子邮件仅在会话成功结束后发送。对于失败或放弃的会话,系统不会发送此事件。
全局配置
使用分配有管理员角色的账号登录 CCAI 平台门户。
依次前往设置 > 开发者设置。
在“CRM”部分中,确保已选择自定义 CRM。
启用通过电子邮件发送会话结果。
输入您希望接收电子邮件的电子邮件地址。
点击保存更改。
按队列配置
使用分配有管理员角色的账号登录 CCAI 平台门户。
前往设置 > 队列,然后选择任意子队列。
启用通过电子邮件发送会话结果。
输入您希望接收电子邮件的电子邮件地址。

点击保存自定义 CRM 设置。
设置继承和替换
| 设置 | 行为 |
|---|---|
| 全局 = 未启用 队列 = 未启用 |
不针对所有队列发送。 |
| 全局 = 未启用 队列 = 已启用 |
队列设置(即开启/关闭状态)会替换全局设置。电子邮件会从指定队列发送到队列设置中定义的电子邮件地址。 |
| 全局 = 已启用 队列 = 未启用 |
队列设置(电子邮件地址、开启/关闭状态)继承全局设置。 电子邮件从给定队列发送到全局设置中定义的电子邮件地址。 |
| 全局 = 已启用 队列 = 已启用 |
队列设置(电子邮件地址)会覆盖全局设置。 电子邮件会从指定队列发送到队列设置中定义的电子邮件地址。 如果电子邮件地址为空,则不会发送电子邮件。 |
代理体验
CRM 记录查找
使用分配了“代理”角色的账号登录 CCAI Platform 门户。
打开通话或聊天适配器。
使用在新浏览器窗口中打开按钮触发查找。
使用复制链接按钮将查找网址复制到剪贴板。

适用于自定义 CRM 解决方案的外部存储空间
借助“自定义解决方案的外部存储”,您可以使用外部存储服务来存储和检索 CCAI 平台会话元数据、通话录音、聊天记录和消费者上传的媒体文件。文件存储在 CRM 之外。
如需配置外部存储空间,您必须具备以下条件:
有效的 CCAI Platform 账号,并分配了管理员和代理角色,用于配置和测试
外部存储服务
文件夹结构
以下文件夹结构将整理到外部存储空间中的文件夹路径:
ujet-chat-transcripts
ujet-media
ujet-metadata
ujet-voice-recordings
ujet-voicemails
文件格式和命名惯例
以下文件类型可以推送到外部存储服务。 文件在传输过程中会使用 HTTPS 进行加密:
| 文件 | 名称 |
|---|---|
| 通话录音 | - call-{id}.mp3 - call-{id}.wav |
| 媒体文件 | - call-{id}-photo-{photo-id}.jpg - call-{id}-video-{video-id}.mp4 - chat-{id}-photo-{photo-id}.jpg - chat-{id}-video-{video-id}.mp4 |
| Chat 转写文稿 | - chat-{id}.txt |
| 会话元数据 | - call-{id}.json - chat-{id}.json |
客服人员和主管体验
在通话或聊天会话期间,消费者使用智能操作上传的照片和视频会显示在客服人员适配器中。
如果您将自定义网址 CRM 互动与会话元数据文件电子邮件更新方法结合使用,客服人员和主管可以使用您的外部服务器访问会话信息。
配置外部存储服务
完成以下步骤以配置外部存储设备:
使用分配有“管理员”角色的账号登录 CCAI Platform 门户。
依次前往设置 > 开发者设置。
在“开发者设置”页面上,前往外部存储部分。
将开关切换为开启,以启用在 CRM 服务器外部存储信息的功能,然后选择要存储的文件类型。
在“服务器设置”部分中,选择您的存储类型,然后完成设置步骤:SFTP 服务器、Google Cloud 存储桶。
SFTP 服务器
输入 SFTP 主机(网址或 IP 地址)。
输入端口号。
输入 SFTP 登录用户 ID。
如果 SFTP 服务器需要密码进行身份验证,请在密码字段中输入密码。
如果 SFTP 服务器需要使用私钥进行身份验证,请选中 SSH 私钥复选框。
输入(复制并粘贴)SSH 私钥。
输入私钥密码。如果会话信息应存储在 SFTP 服务器上的特定文件夹中,请选中文件夹路径复选框,然后输入 SFTP 文件夹路径。
点击保存更改。
Cloud Storage
输入目标 Google Cloud 存储分区名称。
输入 Google Cloud 客户端 ID。
输入 Google Cloud 客户端密钥。
如果会话信息应存储在 Google Cloud 存储桶中的特定文件夹中,请选中文件夹路径复选框,然后输入Google Cloud 文件夹路径。
点击关联并保存。
测试外部存储配置
对于具有现有标准集成的 CRM:
登录 CRM。
使用分配了“代理”角色的 CCAI Platform 凭据登录 CRM 中的 CCAI Platform。
发起通话或聊天。系统会显示与相应会话关联的 CRM 记录。
会话结束后,转写文件应在几秒钟内上传完毕。
直接前往外部服务器存储文件夹,并验证该文件是否可用。
将会话文件发送到 CRM
启用外部存储空间后,CRM 存储空间和外部存储空间网址开发者设置可用于发送会话文件,并决定使用哪个来源在客服人员适配器中显示文件。
如需查看这些设置,必须在“设置”>“开发者设置”>“外部存储空间”中启用“外部存储空间”。将在 CRM 服务器外部启用信息存储切换为开启。
CRM 存储空间
依次前往设置 > 开发者设置 > 外部存储 > CRM 存储。
勾选 Also send session files to the CRM(同时将会议文件发送到 CRM)旁边的复选框,即可将会议文件(例如通话录音或聊天记录)发送到 CRM 和配置的外部存储空间。
点击保存更改。
如果选中此复选框,录音将同时存储在 CRM 和外部存储空间中。
外部存储网址
外部存储网址用于以下两个位置:
代理适配器。
报告:在报告以及“设置”“通话”“已完成”等菜单中显示媒体网址。
依次前往设置 > 开发者设置 > 外部存储 > 外部存储网址
选择来源 CRM 网址或外部存储网址,以在代理适配器中显示文件。
点击保存更改。
CRM 存储空间
如果未选中 CRM 存储复选框,录制内容将仅存储在外部存储空间中,并使用指向 CRM 的链接。
如果选中此复选框,录音将同时存储在 CRM 和外部存储空间中。
外部存储网址
该网址用于以下两个位置:
一个是显示 CCAI 平台适配器中的媒体。外部存储空间或 CRM。
另一个则在报告中。我们会在报告以及“设置”“通话”“已完成”等菜单中显示媒体网址。
在 CCAI Platform 门户中显示自定义 CRM
将自定义 CRM 集成与您自己的自定义构建 CRM 搭配使用时,您可以在 CCAI 平台门户内的专用页面上加载 CRM。启用后,CCAI 平台门户中的“CRM”标签页会加载并显示您自定义构建的 CRM 页面。您可以在开发者设置 > CRM 中配置此设置。
借助此功能,客服人员可以使用 CCAI 平台通话和聊天适配器处理实时支持会话,同时还可以在自定义 CRM 中工作。这包括使用 CCAI 平台门户网站查看自动弹出的账号和记录详细信息,以及从您的移动应用或消费者处传入的会话特定文件和数据。
配置自定义 CRM 页面
如需配置自定义 CRM 页面,请按以下步骤操作:
在 CCAI 平台门户中,依次点击设置 > 开发者设置。 如果您没有看到设置菜单,请点击 菜单。
在 CRM 窗格中,点击自定义 CRM。
点击在 CCAI 平台门户中显示 CRM 切换开关,将其切换到开启位置。
在显示网址下,输入自定义 CRM 页面的网址,然后点击保存。
打开自定义网址屏幕弹出窗口
使用 Open Custom 网址 在系统中找不到相应联系人时显示自定义网址界面。创建具有临时账号 ID 的 CRM 记录,并根据队列级配置触发带有参数的自定义链接。
按队列启用屏幕弹出
依次前往设置 > 队列 > IVR,然后点击要修改的队列。
前往面板中的打开自定义网址。
输入网址以显示屏幕弹出窗口。
在网址中添加变量参数 {ACCOUNT_ID} 和 {PHONE_NUMBER}。
下面提供了一个示例。
- 点击保存。
自定义 CRM 通用 API 集成
借助通用 API 集成方法,您可以使用 CRM 的 API 与 CCAI 平台建立双向连接。这种无缝方法与开箱即用的 CRM 集成体验相同。
客服人员无需执行任何操作即可为通话或聊天会话创建 CRM 记录。根据独特的 API 配置,它可以实现无缝的记录查找和记录更新。
术语
期限 |
说明 |
账号 |
用于指代 CRM 中的“客户/联系人/客户/潜在客户”实体。您的 CRM 可能为此实体提供了其他名称。 账号包含记录。 |
录制 |
用于指代 CRM 中的支持请求/工单/对话/突发事件实体。您的 CRM 可能为此实体提供了其他名称。 记录属于账号。 |
备注 |
用于指代 CRM 中的注释/备注实体。您的 CRM 可能为此实体指定了其他名称。 评论属于记录。 |
API 设置
本部分概述了自定义 CRM API 设置特有的设置。
身份验证方法
CCAI Platform 支持以下三种 CRM 身份验证方法:
基本身份验证:配置包含用户名和密码的身份验证凭据。
自定义标头:配置自定义标头键值对:字段键和字段值。根据需要输入任意数量的配对。
OAuth:CCAI 平台支持行业标准授权协议 OAuth 2.0。如果您需要启用“将重定向网址作为授权网址和令牌网址的一部分包含在内”选项,请指定 OAuth 信息。
配置以下值:
授权网址(必填)
令牌网址(必填)
客户端 ID(必需)
客户端密钥(必需)
范围
州
访问类型
电话号码格式
选择要在 CRM 请求中使用的电话号码格式:
自动:创建:+1 222 333 4444,搜索:*222*333*4444
E.164:+12223334444
美国本地:2223334444
美国本地标准:(111) 222-3333
国际:+1 222 333 4444
API 请求超时
使用下拉菜单将 API 请求超时时间配置为 1-10 秒。此超时时间将应用于您配置的所有端点。
CRM 查询网址
指定用于将代理指向当前账号和记录的查找网址。
输入在浏览器中打开账号或记录页面时,CRM 中显示的查找网址。
您还可以将 CRM 查找网址与 Web SDK 和移动 SDK 搭配使用。您可以配置 SDK,以查找 CRM 账号并记录要在客服人员适配器中显示的信息。如需查看 CRM 查找网址的完整列表,请参阅请求网址参数。
账号查找网址
使用 {ACCOUNT_ID} 变量插入实际的账号 ID。
示例:
https://www.example.com/contact/{ACCOUNT_ID}
记录查找网址
使用 {RECORD_ID} 变量插入实际记录 ID。
示例:
https://www.example.com/record/{RECORD_ID}
API 端点
这是通用 API 最重要的配置。
如需让客服人员能够查找账号,您必须配置查找账号和创建账号端点。
此外,您还可以设置查找记录和创建记录端点,以便客服人员能够查找或创建记录。为此,您需要完成上一步中的账号设置。
最后,如果您输入更新记录、上传文件和评论端点,系统将启用记录更新。为此,您需要使用上一步中的记录设置。
端点配置
进行以下设置:
请求网址:API 端点网址。
从 POST、GET、PUT 或 PATCH 中选择请求方法。
指定请求参数。您可以使用 CCAI 平台定义的变量来传递所需的信息(请参阅下表)。 此外,您还可以输入纯文本或数字作为参数的值。您可以根据需要添加任意数量的形参。
如果端点是 POST/PUT/PATCH,CCAI 平台会提供更精细的控制,以控制如何构建请求。从媒体资源或容器中选择请求数据格式。它指定了请求 JSON 的格式。
Property 的实例。这表示当 CCAI Platform 从参数构建请求正文时,请求对象是一个基本属性映射。
容器。这表示要发送的请求对象数据需要嵌套在结构中。从 Map 或 Array 中选择 Container Type。输入容器名称。当从参数构建请求正文时,它用作父对象名称。
示例:映射:{ container_name : { ...parameters } }
示例:数组:{container_name : [ { ...parameters } ] }
输入响应数据位置。用于在 JSON 响应中查找目标响应对象。
请求网址参数
| 参数 | 变量 | 评论 |
|---|---|---|
| 代理 ID | {AGENT_ID} |
内部代理 ID。 |
| 代理自定义 ID | {AGENT_CUSTOM_ID} |
用户个人资料中的可选字段。 |
| 客服人员电子邮件地址 | {AGENT_EMAIL} |
回答问题的客服人员的电子邮件地址(如适用)。 |
| 最终用户的姓名 | {NAME} |
|
| 最终用户的名字 | {FIRST_NAME} |
摘自 Name |
| 最终用户的姓氏 | {LAST_NAME} |
取自 Name,如果缺失,则默认为 --。 |
| 外部 ID | {UJET_ID} |
CCAI Platform 最终用户 ID |
| 电子邮件 | {EMAIL} |
|
| 通话类型/会话类型 | {SESSION_TYPE} |
|
| 最终用户的手机号码 | {PHONE_NUMBER} |
使用所选设置进行格式化 |
| 通话 ID | {Call_ID} |
CCAI 平台通话 ID。 |
| 聊天 ID | {Chat_ID} |
CCAI Platform 对话 ID。 |
| 语言 | {LANG} |
|
| 自定义 UID | {CUSTOM_USER_ID} |
对于移动设备:这是电子邮件的左侧。例如,从 test.user3@test.co 生成 test.user3 |
| 账号 ID | {ACCOUNT_ID} |
通过调用“查找/创建联系人”端点找到。 |
| 记录 ID | {RECORD_ID} |
通过调用“查找/创建记录”端点找到。 |
| 会话 ID | {SESSION_ID} |
CCAI Platform 会话 ID |
| 菜单路径 | {MENU_PATH} |
|
| 拨出的手机号码 | {OUTBOUND_PHONE_NUMBER} |
使用所选设置进行格式化 |
| 队列名称 | {QUEUE_NAME} |
|
| 队列 ID | {QUEUE_ID} |
内部队列 ID。 |
| SDK 名称 | {SDK_NAME} |
Web SDK 或移动 SDK 中指明的最终用户名称。 |
| SDK 电子邮件地址 | {SDK_EMAIL} | Web SDK 或移动 SDK 中指明的最终用户电子邮件地址。 |
| SDK 手机 | {SDK_PHONE} | 最终用户手机号码,如 Web SDK 或移动 SDK 中所示。 |
| SDK 标识符 | {SDK_IDENTIFIER} |
用于标识 Web 或移动 SDK 最终用户或账号。请勿在此属性中添加个人身份信息。创建账号时,必须在请求中提供此标识符。 |
| SmartAction 会话 ID | {SMART_ACTION_SESSION_ID} |
|
| SmartAction:验证 | (即将推出) | |
| SmartAction:文字输入 | (即将推出) | |
| 评分 | {RATING} |
仅在用户留下该评价时可用 |
| 反馈消息 | {FEEDBACK} |
仅在用户留下该评价时可用 |
| 通话时长 | {CALL_DURATION} |
以 mm:ss 格式显示 |
| 保持时间 | {HOLD_TIME} |
以 mm:ss 格式显示 |
| 等待时间 | {WAIT_TIME} |
以 mm:ss 格式显示 |
| 通话后工作时长 | (即将推出) | |
| 设备类型 | {DEVICE_TYPE} |
|
| 断开连接者 | {DISCONNECTED_BY} |
|
| 渠道 | {CHANNEL} |
|
| 记录主题 | {TICKET_SUBJECT} |
用作记录标题 |
| 记录说明 | {TICKET_DESCRIPTION} |
|
| 记录说明 HTML | {TICKET_DESCRIPTION_HTML} |
与说明相同,只是格式为 HTML |
| 评论正文 | {COMMENT_BODY} |
仅在添加评论的情况下可用(保存评分、结束通话/聊天、开始通话/聊天) |
| 文件数据 | {FILE_DATA} |
仅在上传文件端点中可用,但包含多部分表单的 base64 或数据。 |
请求网址参数函数
系统提供了函数来帮助处理动态 CCAI 平台变量。这些函数只能在端点设置的请求参数部分中使用。
通过函数创建的结果值将是字符串。如果该函数未返回任何值,则在执行之前,系统会从请求的参数列表中移除相应参数。
| 函数 | 函数语法 | 说明 |
|---|---|---|
| 默认值 | =DEFAULT_VALUE(val1, val2) |
除非值为 null 或空,否则将使用 val1,并默认恢复为 val2。 |
串联 Or | =CONCAT_OR(val1, val2,
val3) | 使用 or 串联多个值。示例:'val1 or val2 or val3' |
串联 And | =CONCAT_AND(val1, val2,
val3) | 使用 and 串联多个值。示例:'val1 and val2 and val3' |
示例
以下是使用请求网址参数函数的一些示例。
默认
以下示例在 Create a Record Endpoint 中使用 DEFAULT_VALUE。
代理设置的键和值使用默认函数,以便在代理电子邮件地址为空值时提供回退。在创建记录时,客服人员电子邮件地址可能为空,原因有以下几种:客户可能在分配的客服人员接听来电之前结束了 IVR 通话;或者,如果是聊天,系统会在客服人员接听之前创建记录。这样一来,必需参数可能会默认设置为安全值,直到后续更新或在放弃的调用中设置。

串联
以下示例在 Find an Account by Query 端点中使用 CONCAT_OR。此示例专门针对 Zoho CRM,但展示了如何使用 CONCAT_OR。CONCAT_AND 遵循相同的规则,只是使用 and 连接值,而不是使用 or。请参阅以下示例,了解执行时端点中存在的值以及作为请求参数传递的最终值。

| 存在密钥 | 生成的值 |
|---|---|
ACCOUNT_ID |
(Id:equals:<uuid>) |
ACCOUNT_ID,EMAIL |
(Id:equals:<uuid>) 或 (Email:equals:kim@example) |
PHONE_NUMBER,EMAIL |
(Phone:equals:+12223334444) 或 (Email:equals:kim@example) |
API 账号
API 客户账号端点支持与 CRM 中的客户账号集成。
对返回 400 错误的端点的调用会重试。返回其他错误的调用不会重试。重试会持续一周,并以指数斜坡递减。如需了解 API 流程,请参阅自定义 CRM 通用 API:流程。
通过查询端点(以前称为“查找账号”端点)查找账号
此端点用于通过手机号码、电子邮件地址或内部 CRM ID 查找账号。这是用于查找账号的默认端点。
示例响应:
{
"id": 123,
"name": "Kim",
"phone": "11234567890",
"email": "Kim@agents.co"
}
按 ID 查找账号端点
此端点用于按 ID 查找账号。一般来说,此 ID 将是网址的一部分。网址验证还会考虑网址是否未使用 ID 构成,如果未使用,则不会使用此端点。这将遵循 REST 标准。 如果查找失败时返回 404,则接下来会按查询查找。
示例响应:
{
"id": 123,
"name": "Kim",
"phone": "11234567890",
"email": "Kim@agents.co"
}
创建账号端点
此端点用于在未找到账号时创建账号。大多数 CRM 都要求记录附加到账号。为了创建统一的流程,我们针对所有 CRM 强制执行此要求。
API 记录
借助 API 记录端点,您可以与 CRM 中的记录或支持请求集成。
通过查询查找记录(以前称为“查找记录”端点)
此端点用于按条件查找记录。通常,此方法用于查找与账号关联的记录。如果 CCAI 平台配置为重复使用现有记录,则会使用找到的记录。这是用于查找记录的默认端点。
示例响应:
{
"id": 456,
"subject": "Record title",
"status": "open", // enumerated status open/closed, or 1,2,3
"contactId": 123, // contact attached to ticket
"phone": "11234567890", // contact phone
}
创建记录端点
此端点用于创建记录。如果 Find a record 请求未找到记录,或者 CCAI Platform 配置为不重复使用现有记录,则会创建新记录。
示例请求:
{
"id": 123,
"subject": "Record title",
"description": "A longer description of the record, can be formatted in html",
"phone": "11234567890", // can be saved in multiple formats
"contactId": 123,
"sourceType": "PHONE", // PHONE/CHAT
"menu": "queue1",
"direction": "outgoing",
"rating": 5, // 1-5 scale
"feedback": "the agent was great!" // description of rating
}
更新记录端点
此端点用于更新记录。它会更新记录的标题和说明。此端点还可以选择性地根据 CCAI 平台事件(例如保存 CSAT 评分、通话或聊天结束事件、所选队列、验证用户等)来更新记录。
上传文件端点
此端点用于上传附件。
为上传端点选择类型
Base64 编码形式
多部分表单
选择要附加的文件
通话录音
聊天转写内容
语音信息
相册
视频
会话元数据文件
从 ID 和 Attachment 网址 中选择附件类型。它指定了响应 JSON 的格式。
ID
附件 ID。输入 JSON 响应中附件 ID 的参数位置。此 ID 将作为附件构建器网址的 {ATTACHMENT_ID} 提供。
附件构建工具网址。输入用于下载文件附件的网址。RECORD_ID 和 ATTACHMENT_ID 是可用的变量。
例如:
https://www.example.com/Accounts/{RECORD_ID}/Attachments/{ATTACHMENT_ID}附件网址
输入 JSON 响应中文件下载网址的参数位置。
如果您希望 CCAI Platform 在上传文件后向记录添加评论,请选中向 CRM 添加评论记录复选框。系统将针对这些评论遵循来自 Comment 端点的 Text Format 设置。
以下示例是使用 POST/PUT/PATCH 的多部分表单示例:
{
"file": <file data>
"id": 123, // optional, this can also just be part of the URL;
// for example https://example-customer.com/upload/record/{RECORD_ID}
}
示例响应:
示例 A:存在下载网址
{
"id": 123,
"url": "https://some-hosted-url.com"
}
示例 B
在这种情况下,下载网址不存在,但存在使用此 ID 的下载附件端点。例如 https://www.customer-api.com/record/{RECORD_ID}/Attachments/{ATTACHMENT_ID}。
{
"id": 123
}
评论端点
此端点用于向记录添加评论。如果配置了端点,CCAI 平台将向包含以下事件的记录添加注释:
通话或聊天开始
通话或聊天结束
客户满意度评分和评论
自定义数据包
转移评论
处置代码和备注
调查问卷的问题和答案
为评论选择文本格式。如果选中将文本转换为 HTML 复选框,则文本将采用 HTML 格式,否则将采用纯文本格式。
请求示例,POST/PUT/PATCH:
{
"comment": "Some text",
// string can also be formatted on ujet side as html
"id": 123,
// optional, this can also just be part of the URL;
// for example https://example-customer.com/comment/record/{RECORD_ID}
}
自定义 CRM 通用 API:流程
本部分提供了自定义 CRM 通用 API 流程的流程图。
基本流程图

查找或创建账号流程

查找或创建记录流

通话或聊天后的操作流程

更新记录流程

评论流

上传文件流程

代理适配器
自定义 CRM 提供了一种将适配器(界面 widget)集成到 CRM 系统中的通用方法。CRM 系统必须能够处理适配器在其内部的激活和触发方式。
为了集成用户界面适配器,通常需要 CRM 软件或应用。我们已为 Salesforce、Kustomer、Zendesk 等多种 CRM 软件提供此功能。
iFrame
通过使用 iFrame 标记,代理适配器可以无缝集成到 CRM 或任何其他工具中。如需详细了解 HTML iframe 代码,请参阅 HTML iframe 代码。
不过,CRM 需要处理向用户呈现适配器的方式。例如,它可能包含用于显示和隐藏适配器的界面按钮。此外,适配器可以设计为可拖动,以便代理可以根据自己的需要将其重新放置在屏幕上。以下示例演示了网址格式。
通话适配器:
https://tenant.loc.ccaiplatform.com/agent/?type=call&from=custom
Chat 适配器:
https://tenant.loc.ccaiplatform.com/agent/?type=chat&from=custom
iframe 模板
通话适配器:
html
<iframe src="https://tenant.loc.CCAI Platformlatform.com/agent/?type=call&from=custom" allow="microphone; camera; geolocation" width="290" height="600"></iframe>
Chat 适配器:
html
<iframe src="https://tenant.loc.CCAI Platformlatform.com/agent/?type=chat&from=custom" allow="microphone; camera; geolocation" width="450" height="590"></iframe>
网址参数
网址参数可用于向软件提供其他信息,例如互动类型(通话或聊天)、互动来源(自定义)和其他相关详细信息。
如果列表中没有租户 CRM 设置,则 From 参数必须始终设置为 Custom。
类型
- 致电
- 聊天
发件人
- 自定义(此值必须与租户 CRM 设置一致)。对于列表中的任何 CRM 以外的 CRM,它必须始终为 custom。如果没有 CRM 设置,您可以跳过此参数。
代理适配器中的事件
代理适配器会发布可由 CRM 系统挂钩的事件,然后处理对 CRM 的更新。为此,CRM 需要监听来自父窗口的 post 并读取 post 数据。根据这些数据,它可以触发一些操作,例如为特定会话 ID 打开支持请求标签页。
通话适配器和聊天适配器都有可用于增强 CRM 功能的特定事件。
通话适配器
- 新通话
- 通话内容遮盖已开始
- 通话内容遮盖已结束
- 结束通话
聊天适配器
- 发起新对话
- 进行中的对话
- 聊天入站消息
- Chat 发送的消息
- 结束聊天
- 已关闭的对话
两个适配器
- 代理登录
- 屏幕共享会话已开始
- 屏幕共享会话的远程控制权限已更改
- 屏幕共享会话完整设备已更改
- 屏幕共享会话已结束
- 转移
- 已添加方
- 客服人员连接到会话
- 代理退出
- 已添加客服助手
活动数据
call_id:这是通过 IVR(交互式语音响应)进行的语音呼入的标识符。chat_id:这是消息传递入站通话(网站或移动聊天)的标识符。cobrowse_session_id:这是屏幕共享会话的标识符。可以在通话或聊天会话中发起屏幕共享会话。session_type:会话类型,例如语音、聊天或即时通讯。va_data_parameters:队列中配置的所有要发送给虚拟代理的变量。仅当事件涉及虚拟代理时,此字段才是必需字段。可选。session_variable:从虚拟客服发送到 CCAI 平台的所有变量(位于载荷中)。可选。custom_sip_headers:此设置可让来自传入 SIP 调用的自定义 SIP 标头显示在 POST 事件日志中。仅在使用自定义 SIP 标头时才需要。可选。custom_data_secured:包含来自服务器的已签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据。可选。
代理 ID
agent_id:这是代理的标识符。from_agent_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明发起转接的客服人员。to_agent_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指示目标客服人员。agent_custom_id:这是用户个人资料中的代理 ID(如果已在个人资料中输入)。可选。from_agent_custom_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明发起方客服人员。to_agent_custom_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明目标客服人员。agent_email:这是代理的电子邮件地址。from_agent_email:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明发起转接的客服人员。to_agent_email:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明目标客服人员。
虚拟代理 ID
virtual_agent_id:这是分配给特定虚拟代理的 ID 编号。
队列 ID
queue_id:这是 CCAI 平台队列的标识符,仅当呼叫源自队列时才存在。from_queue_id:用于在将通话或聊天从一个队列路由到另一个队列时,指示原始队列。to_queue_id:用于在将通话或聊天从一个队列路由到另一个队列时,指示目标队列。queue_path:这是 CCAI 平台队列的路径,仅当呼叫源自队列时才存在。from_queue_path:用于在将通话或聊天从一个队列路由到另一个队列时,指示原始队列。to_queue_path:用于在将通话或聊天从一个队列路由到另一个队列时,指示目标队列。
Campaign ID
campaign_id:CCAI Platform 广告系列 ID。只有在调用类型为广告系列调用时,才会包含这些参数。campaign_name:CCAI Platform 广告系列名称。只有当调用类型为广告系列调用时,才会包含这些信息。
消息
message:表示收到新的消费者消息的事件,以及消息内容。
会话类型
session_type:CCAI Platform 会话类型。cobrowse_session_remote_control:表示所请求的远程控制屏幕共享会话的状态。值:off、requested、rejected、on。cobrowse_session_full_device:表示全设备屏幕共享会话的状态。值:off、requested、rejected、on。
参与者
type:参与者类型 -end_user;agent(来自 /api/v1/calls 或 /api/v1/chats 响应的 participants.type)。cobrowse_session_requested_by:表示谁发起了屏幕共享会话。 可能的值为agent或end_user。cobrowse_session_ended_by:表示是谁结束了屏幕共享会话。可能的值为agent、end_user或api。end_user_id:/api/v1/calls或/api/v1/chats响应的participants.end_user_id。只有在类型为end_user时,此字段才会显示。
互动 / 会话类型
通话类型
- 语音拨入:标准 PSTN 通话。
- 语音入站(使用移动设备的 IVR):通过移动 SDK 发出的后备 PSTN 呼叫。
- 语音入站(移动设备):由使用已安装的移动 SDK 的消费者放置。
- 语音回调(Web):从 Web SDK 发起。
- 语音入站(API):使用 API 发起。
- 语音预定(移动设备):使用已安装的移动 SDK 进行预定。
- 语音预定(Web):使用已安装的 Web SDK 进行预定。
- Voice Outbound:由客服人员通过拨号发起。
- 语音出站(API):使用 API 发起。
- 语音广告系列:使用外拨电话拨号器(广告系列)发起。
聊天类型
- 即时通讯 (WhatsApp):使用 WhatsApp 发起。
- 即时通讯入站(短信)
- 消息传递出站 (SMS)
- Messaging Outbound(使用 API 发送短信)
- Messaging(网站):使用已安装的 Web SDK 发起。
- 消息(移动设备):使用已安装的移动 SDK 发起。
通话或聊天类型
- 屏幕共享会话:由代理或最终用户在通话或聊天期间发起。
事件类型
以下是代理适配器发布的事件类型:
代理登录
当客服人员登录到适配器时,会发生客服人员登录事件。
以下是 Agent_Login 事件的示例:
{
"type": "Agent_Login",
"data": {
"agent_id": 1,
"agent_custom_id": "007",
"agent_email": "Kim@example.com",
}
}
以下是事件数据字段的说明:
agent_id:代理标识符可选:
agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。agent_email:与代理账号关联的电子邮件地址。
发起新通话
当客服人员接听电话时,系统会触发新的通话事件。此事件包含的信息包括通话开始时间、接听通话的客服人员以及通话的来源。
以下是 New_Call 事件的示例:
{
"type": "New_Call",
"data": {
"agent_id": 1,
"agent_custom_id": "007",
"agent_email": "Kim@example.com",
"queue_id": 8469,
"queue_path": "Developers / Kim",
"campaign_id": 1432,
"campaign_name": "Survey Movie",
"call_id": 103646,
"session_type": "Voice Campaign (UJET)"
}
}
以下是事件数据字段的说明:
agent_id:代理标识符agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。可选。agent_email:与代理账号关联的电子邮件地址queue_id:发起调用的队列的标识符。如果通话源自队列,则会包含此字段。可选。queue_path:发起调用的队列的路径。如果通话源自队列,则会包含此字段。可选。campaign_id:宣传活动的标识符。此字段包含在广告系列调用中。可选。campaign_name:广告系列的名称。此字段包含在广告系列调用中。可选。call_id:通话标识符session_type:会话类型virtual_agent_id:虚拟客服标识符。此字段包含在涉及虚拟客服的事件中。可选。va_data_parameters:在队列中配置的要发送给虚拟客服的变量。此字段包含在涉及虚拟客服的事件中。可选。session_variable:从虚拟客服发送到 Contact Center AI 平台的所有变量。可选。custom_sip_headers:允许在 POST 事件日志中显示来自传入 SIP 调用的自定义会话发起协议 (SIP) 标头。如果使用自定义 SIP 标头,则包含此字段。可选。custom_data_secured:包含来自服务器的签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据。可选。
通话内容遮盖已开始
当通话内容编辑开始且未录制时,系统会触发“通话内容编辑开始”事件。事件数据包含处理通话的客服人员的 ID 和通话 ID。
agent_id:接听电话的客服人员的 IDcall_id:通话的 ID
以下是“通话内容遮盖开始”事件的示例:
{
"agent_id": 2896,
"call_id": 97939
}
通话内容编辑已停止
当通话内容遮盖结束且录制已恢复时,系统会触发通话内容遮盖停止事件。此事件包含处理通话的客服人员的 ID 和 call ID。
agent_id:处理通话的代理的IDcall_id:通话的ID
以下是通话内容编辑停止事件数据的示例:
{
"agent_id": 2896,
"call_id": 97939
}
结束通话
通话结束时会发生通话结束事件。此事件包含通话结束时间、接听通话的客服人员以及通话来源地等信息。
以下是 End_Call 事件的示例:
{
"type": "End_Call",
"data": {
"agent_id": 1,
"agent_custom_id": "007",
"agent_email": "Kim@example.com",
"queue_id": 8469,
"queue_path": "Developers / Kim",
"campaign_id": 1432,
"campaign_name": "Survey Movie",
"call_id": 103646,
"session_type": "Voice Campaign (UJET)"
}
}
以下是事件数据字段的说明:
agent_id:代理标识符agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。可选。agent_email:与代理账号关联的电子邮件地址queue_id:发起调用的队列的标识符。如果通话源自队列,则会包含此字段。可选。queue_path:发起调用的队列的路径。如果通话源自队列,则会包含此字段。可选。campaign_id:宣传活动的标识符。此字段包含在广告系列调用中。可选。campaign_name:广告系列的名称。此字段包含在广告系列调用中。可选。call_id:通话标识符session_type:会话类型virtual_agent_id:虚拟客服标识符。此字段包含在涉及虚拟客服的事件中。可选。va_data_parameters:在队列中配置的要发送给虚拟客服的变量。此字段包含在涉及虚拟客服的事件中。可选。session_variable:从虚拟客服发送到 Contact Center AI 平台的所有变量。可选。custom_sip_headers:允许在 POST 事件日志中显示来自传入 SIP 调用的自定义会话发起协议 (SIP) 标头。如果使用自定义 SIP 标头,则包含此字段。可选。custom_data_secured:包含来自服务器的签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
发起新对话
当客服人员接起聊天会话时,系统会生成新的聊天事件。此事件表示聊天开始的时间,并包含聊天由哪个客服人员处理、聊天发起位置等信息。
以下是 New_chat 事件的示例:
{
"type": "New_Chat",
"data": {
"chat_id": 73522,
"session_type": "messaging inbound (web chat)",
"agent_id": 1,
"agent_email": "ariel@example.com",
"queue_id": 7678,
"queue_path": "HB TEAM / Ariel"
}
}
以下是事件数据字段的说明:
chat_id:聊天标识符session_type:会话类型agent_id:代理标识符agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。可选。agent_email:与代理账号关联的电子邮件地址。queue_id:发起调用的队列的标识符。如果通话源自队列,则会包含此字段。可选。queue_path:调用来源的队列的路径。如果通话源自队列,则会包含此字段。可选。custom_data_secured:包含来自服务器的签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
结束聊天
当聊天会话结束时,系统会触发结束聊天事件。此事件表示聊天结束的时间,并包含聊天由哪个客服人员处理、聊天源自何处等信息。
以下是 End_Chat 事件的示例:
{
"type": "End_Chat",
"data": {
"chat_id": 73522,
"session_type": "Messaging Inbound (Web Chat)",
"agent_id": 1,
"agent_email": "ariel@example.com",
"queue_id": null,
"queue_path": null,
"agent_custom_id": null
}
}
以下是事件数据字段的说明:
chat_id:聊天标识符。session_type:会话类型。agent_id:代理标识符。agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。可选。agent_email:与代理账号关联的电子邮件地址。queue_id:发起调用的队列的标识符。如果通话源自队列,则会包含此字段。可选。queue_path:发起调用的队列的路径。如果通话源自队列,则会包含此字段。可选。custom_data_secured:包含来自服务器的已签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
进行中的对话
当代理切换到聊天适配器中的聊天标签页时,会发生活跃聊天事件。
以下是 Active_Chat 事件的示例:
{
"type": "Active_Chat",
"data": {
"chat_id": 73521,
"session_type": "messaging inbound (web chat)",
"agent_id": 1,
"agent_email": "ariel@example.com",
"queue_id": 7678,
"queue_path": "HB TEAM / Ariel"
}
}
以下是事件数据字段的说明:
chat_id:聊天标识符session_type:会话类型agent_id:代理标识符agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。可选。agent_email:与代理账号关联的电子邮件地址。queue_id:发起调用的队列的标识符。如果通话源自队列,则会包含此字段。可选。queue_path:发起调用的队列的路径。如果通话源自队列,则会包含此字段。可选。custom_data_secured:包含来自服务器的已签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
Chat 入站消息
聊天入站消息事件表示收到了新的客户消息。 它包含消息内容。
对于聊天入站消息事件,系统会报告以下字段的数据:
chat_id:用于标识聊天会话session_type:表示正在创建的会话的类型,例如通过网络聊天进行的即时通讯入站会话agent_id:标识处理聊天会话的代理agent_custom_id:仅当代理的个人资料包含自定义 ID 时,此字段才会存在。可选。agent_email:处理聊天会话的客服人员的电子邮件地址。仅当聊天来自队列时,才会包含此字段。可选。queue_id:相应聊天会话的来源队列的 ID。仅当聊天来自队列时才会包含此字段。queue_path:聊天会话的来源队列的路径。仅当聊天来自队列时才会包含此字段。message:表示收到新消费者消息的事件,以及消息内容custom_data_secured:允许传输安全的 SDK 自定义数据。 可选。custom_data_not_secured:允许传输不安全的 SDK 自定义数据。可选。
下面是一个 Chat_Inbound_Message 事件示例:
{
"type": "Chat_Inbound_Message",
"data": {
"chat_id": 73522,
"session_type": "messaging inbound (web chat)",
"agent_id": 1,
"agent_email": "ariel@example.com",
"queue_id": 7678,
"queue_path": "HB TEAM / Ariel",
"message" : "Can you help me with my order tracking number?"
}
}
Chat 出站消息
当收到新的消费者消息时,会发生聊天出站消息事件。 它包含消息内容。
系统会针对聊天出站消息事件报告以下字段的数据:
chat_id:用于标识聊天会话session_type:表示正在创建的会话的类型,例如通过网络聊天进行的即时通讯入站会话agent_id:标识处理聊天会话的代理agent_custom_id:仅当代理的个人资料具有自定义 ID 时,才会包含此字段。可选。agent_email:处理聊天会话的客服人员的电子邮件地址。仅当对话来自队列时,才会包含此字段。可选。queue_id:相应聊天会话的来源队列的 ID。仅当对话来自队列时,才会包含此字段。queue_path:聊天会话的来源队列的路径。仅当聊天来自队列时才会包含此字段。message:事件表示收到了新的消费者消息,以及消息内容custom_data_secured:允许传输安全的 SDK 自定义数据。 可选。custom_data_not_secured:允许传输不安全的 SDK 自定义数据。可选。
下面是一个 Chat_Outbound_Message 事件示例:
{
"type": "Chat_Outbound_Message",
"data": {
"chat_id": 73522,
"session_type": "messaging inbound (web chat)",
"agent_id": 1,
"agent_email": "ariel@example.com",
"queue_id": 7678,
"queue_path": "HB TEAM / Ariel",
"message" : "Please give me a moment to look up your account information"
}
}
已关闭的对话
当代理关闭聊天适配器中的聊天标签页时,会发生已关闭的聊天事件。
下面是一个 Dismissed_Chat 事件示例:
{
"type":"Dismissed_Chat",
"data":{"chat_id":73522,
"session_type":"Messaging Inbound (Web Chat)",
"agent_id":1,
"agent_email":"ariel@example.com"
}
}
以下是事件数据字段的说明:
chat_id:聊天标识符session_type:会话类型agent_id:代理标识符agent_custom_id:代理的自定义标识符(如果已在代理的个人资料中输入)。可选。agent_email:与代理账号关联的电子邮件地址queue_id:发起调用的队列的标识符。如果通话源自队列,则会包含此字段。可选。queue_path:发起调用的队列的路径。如果通话源自队列,则会包含此字段。可选。custom_data_secured:包含来自服务器的签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
屏幕共享会话已开始
当客服人员或最终用户启动屏幕共享会话时,系统会触发屏幕共享会话已开始事件。您可以在通话或聊天期间开始屏幕共享会话。如需了解详情,请参阅屏幕共享。
以下是“开始屏幕共享会话”事件的 JSON 对象示例:
{
"type": "Cobrowse_Session_Started",
"data": {
"agent_id": 5,
"chat_id": 791,
"cobrowse_session_id": "Y1zYY6XIYX4oapqpEz3qHw",
"cobrowse_session_requested_by": "agent",
"cobrowse_session_remote_control": "off",
"cobrowse_session_full_device": "off"
}
}
以下是事件数据字段的说明:
agent_id:代理标识符。call_id:IVR(交互式语音响应)渠道上入站通话的标识符。如果屏幕共享会话是在通话期间开始的,则会包含此字段。chat_id:网页或移动渠道上入站聊天的标识符。如果屏幕共享会话是在聊天期间开始的,则会包含此字段。cobrowse_session_id:屏幕共享会话的标识符。cobrowse_session_requested_by:表示谁发起了屏幕共享会话。值为agent和end-user。cobrowse_session_remote_control:表示远程控制屏幕共享会话的状态。值为on、rejected、requested和off。cobrowse_session_full_device:表示完整设备屏幕共享会话的状态。值为on、rejected、requested和off。custom_data_secured:包含来自服务器的已签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
屏幕共享会话的远程控制权限已更改
当远程控制屏幕共享会话的状态发生变化时,会发生屏幕共享会话远程控制更改事件。此事件表示远程控制屏幕共享会话的状态。如需了解详情,请参阅 屏幕共享。
以下是 Cobrowse_Session_Remote_Control_Changed 活动的 JSON 对象示例:
{
"type": "Cobrowse_Session_Remote_Control_Changed",
"data": {
"agent_id": 5,
"chat_id": 791,
"cobrowse_session_id": "Y1zYY6XIYX4oapqpEz3qHw",
"cobrowse_session_remote_control": "requested"
}
}
以下是事件数据字段的说明:
agent_id:代理标识符。call_id:IVR(交互式语音响应)渠道上入站通话的标识符。如果屏幕共享会话是在通话期间开始的,则会包含此字段。chat_id:网页或移动渠道上入站聊天的标识符。如果屏幕共享会话是在聊天期间开始的,则会包含此字段。cobrowse_session_id:屏幕共享会话的标识符。cobrowse_session_remote_control:表示远程控制屏幕共享会话的状态。值为on、rejected、requested和off。custom_data_secured:包含来自服务器的已签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
屏幕共享会话完整设备已更改
当全设备屏幕共享会话的状态发生变化时,会发生“屏幕共享会话全设备已更改”事件。此事件表示整个设备屏幕共享会话的状态。如需了解详情,请参阅屏幕共享。
下面是一个 Cobrowse_Session_Full_Device_Changed 事件示例:
{
"type": "Cobrowse_Session_Full_Device_Changed",
"data": {
"agent_id": 5,
"cobrowse_session_id": "9-Kshrag-gn6ZSuIxoMtWQ",
"cobrowse_session_full_device": "rejected"
}
}
以下是事件数据字段的说明:
agent_id:代理标识符。call_id:IVR(交互式语音响应)渠道上入站通话的标识符。如果屏幕共享会话是在通话期间开始的,则会包含此字段。chat_id:网页或移动渠道上入站聊天的标识符。如果屏幕共享会话是在聊天期间开始的,则会包含此字段。Cobrowse_session_id:屏幕共享会话的标识符。Cobrowse_session_full_device:表示完整设备屏幕共享会话的状态。值为on、rejected、requested和off。custom_data_secured:包含来自服务器的签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
屏幕共享会话已结束
当客服人员、最终用户或 API 结束屏幕共享会话时,系统会触发“屏幕共享会话已开始”事件。如需了解详情,请参阅配置屏幕共享。
下面是一个 Cobrowse_Session_Ended 事件示例:
{
"type": "Cobrowse_Session_Ended",
"data": {
"agent_id": 5,
"cobrowse_session_id": "9-Kshrag-gn6ZSuIxoMtWQ",
"cobrowse_session_requested_by": "end_user",
"cobrowse_session_ended_by": "agent",
"cobrowse_session_remote_control": "on",
"cobrowse_session_full_device": "rejected"
}
}
以下是事件数据字段的说明:
agent_id:代理标识符。call_id:IVR(交互式语音响应)渠道上入站通话的标识符。如果屏幕共享会话是在通话期间开始的,则会包含此字段。chat_id:网页或移动渠道上入站聊天的标识符。如果屏幕共享会话是在聊天期间开始的,则会包含此字段。cobrowse_session_id:屏幕共享会话的标识符。cobrowse_session_ended_by:表示谁结束了屏幕共享会话。值为agent、end-user和api。cobrowse_session_remote_control:表示远程控制屏幕共享会话的状态。值为on、rejected、requested和off。cobrowse_session_full_device:表示完整设备屏幕共享会话的状态。值为on、rejected、requested和off。custom_data_secured:包含来自服务器的已签名自定义数据。可选。custom_data_not_secured:包含来自网页的未签名自定义数据。如需了解详情,请参阅聊天未签名自定义数据(可选)。可选。
转移
当通话或聊天被转接时,会发生转接事件。它可以指热转移或冷转移。
以下事件字段是转移事件的一部分。
chat_id或call_id:标识通话或聊天会话session_type:表示正在创建的会话的类型,例如通过网络聊天进行的即时通讯入站会话campaign_id:宣传活动的 ID。仅当调用类型为广告系列调用时,此字段才会显示。可选。campaign_name:宣传广告系列的名称。仅当调用类型为广告系列调用时,此字段才会显示。可选。from_agent_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指示发起客服人员from_agent_custom_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明发起方客服人员。可选。from_agent_email:用于在将通话或聊天从一位客服人员转接到另一位客服人员时,指明发起转接的客服人员to_agent_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明目标客服人员to_agent_custom_id:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指明目标客服人员。可选。to_agent_email:用于在将通话或聊天从一个客服人员转接到另一个客服人员时,指示目标客服人员from_queue_id:用于在将通话或聊天从一个队列路由到另一个队列时,指示源队列from_queue_path:用于在将通话或聊天从一个队列路由到另一个队列时,指示源队列to_queue_id:用于在将通话或聊天从一个队列路由到另一个队列时指示目标队列to_queue_path:用于在将通话或聊天从一个队列路由到另一个队列时指示目标队列virtual_agent_id:分配给虚拟客服的 ID。可选。va_data_parameters:在队列中配置的所有要发送给虚拟客服的变量。仅当事件涉及虚拟客服时,此参数才是必需的。 可选。(
session_variable:从虚拟客服发送到 CCAI 平台的所有变量,包含在载荷中。可选。custom_sip_headers:允许在 POST 事件日志中显示来自传入 SIP 调用的自定义 SIP 标头。仅在使用自定义 SIP 标头时才需要。可选。custom_data_secured:允许传输安全的 SDK 自定义数据。 可选。custom_data_not_secured:允许传输不安全的 SDK 自定义数据。可选。
以下是转移活动的示例:
{
"type": "Transfer_Chat",
"data": {
"chat_id": 103646,
"session_type": "Messaging Inbound (SMS)",
"campaign_id": 1432,
"campaign_name": "Survey Movie",
"from_agent_id": 1,
"from_agent_custom_id": "007",
"from_agent_email": "Ira@example.com",
"to_agent_id" : 5
"to_agent_custom_id": "100"
"to_agent_email" : "ariel@example.com"
"from_queue_id": 8469,
"from_queue_path": "Developers / Ariel",
"to_queue_id" : 1234,
"to_queue_path" : "Schemes / Auric"
}
}
已添加方
一方当事人添加事件是指任何转移。可以是通话转移,也可以是聊天转移。
添加了派对的事件包含以下数据:
chat_id或call_id:标识通话或聊天会话session_type:表示正在创建的会话的类型,例如通过网络聊天进行的即时通讯入站会话agent_custom_id:仅当代理的个人资料包含自定义 ID 时,此字段才会存在。可选。agent_email:处理通话或聊天会话的客服人员的电子邮件地址。queue_id:相应聊天会话的来源队列的 ID。仅当聊天来自队列时,才会包含此字段。可选。queue_path:聊天会话的来源队列的路径。仅当聊天来自队列时才会包含此字段。可选。campaign_id:宣传活动的 ID。只有在调用类型为广告系列调用时,才会包含此字段。可选。campaign_name:宣传广告系列的名称。只有在调用类型为广告系列调用时,才会包含此字段。可选。type:参与者类型,例如 end_user 或 agent。此字段作为参与者的/api/v1/calls或/api/v1/chats类型响应的一部分返回end_user_id:end_user_id。此字段作为来自/api/v1/calls或/api/v1/chats响应的一部分返回。此字段仅适用于从一个客服人员转接到另一个客服人员的最终用户来电或聊天,用于指示目标客服人员。可选。virtual_agent_id:分配给虚拟客服的标识符。可选。va_data_parameters:在队列中配置的所有要发送给虚拟客服的变量。仅当事件涉及虚拟客服时,此参数才是必需的。 可选。session_variable:虚拟客服中在载荷中发送到 CCAI 平台的所有变量。可选。custom_sip_headers:此标志可让来自传入 SIP 调用的自定义 SIP 标头显示在 POST 事件日志中。仅在使用自定义 SIP 标头时才需要。可选。custom_data_secured:允许传输安全的 SDK 自定义数据。 可选。custom_data_not_secured:允许传输不安全的 SDK 自定义数据。可选。
以下是 Party_Added 事件的示例。
{
"type": "Party_Added",
"data": {
"chat_id": 103646,
"session_type": "Messaging Inbound (SMS)",
"campaign_id": 1432,
"campaign_name": "Survey Movie",
"agent_id": 1,
"agent_custom_id": "007",
"agent_email": "ariel@example.com",
"queue_id": 8469,
"queue_path": "Developers / Ariel",
"type" : "agent"
}
}
客服人员连接到会话
当客服人员连接到会话时,系统会触发“客服人员连接到会话”事件。事件分为两种不同的类型。类型取决于是通话还是聊天。
以下事件字段是代理连接到会话事件的一部分。
agent_id:用于标识处理通话或聊天会话的客服人员。agent_email:处理通话或聊天会话的客服人员的电子邮件地址。agent_custom_id:仅当代理的个人资料包含自定义 ID 时,此字段才会存在。可选。chat_id或call_id:标识通话或聊天会话。virtual_agent_id:分配给特定虚拟客服的 ID。可选。campaign_id:宣传活动的 ID。只有当调用类型为广告系列调用时,才会包含此字段。可选。campaign_name:宣传广告系列的名称。只有在调用类型为广告系列调用时,才会包含此字段。可选。queue_id:相应聊天会话的来源队列的 ID。仅当聊天来自队列时,才会包含此字段。可选。queue_path:聊天会话的来源队列的路径。仅当聊天来自队列时才会包含此字段。可选。session_type:表示正在创建的会话的类型,例如通过网络聊天进行的即时通讯入站会话。virtual_agent_id:分配给虚拟客服的 ID。可选。va_data_parameters:队列中配置的所有要发送给虚拟客服的变量。仅当事件涉及虚拟代理时,此字段才是必需字段。可选。session_variable:虚拟客服中在载荷中发送到 UJET 的所有变量。可选。custom_sip_headers:此标志可让来自传入 SIP 调用的自定义 SIP 标头显示在 POST 事件日志中。仅在使用自定义 SIP 标头时才需要。可选。custom_data_secured:允许传输安全的 SDK 自定义数据。 可选。custom_data_not_secured:允许传输不安全的 SDK 自定义数据。可选。
以下是 Agent_Joined_Chat 事件数据的示例:
{
"type": "Agent_Joined_Chat",
"data": {
"chat_id": 103646,
"campaign_id": 1432,
"campaign_name": "Survey Movie",
"agent_id": 1,
"agent_custom_id": "007",
"agent_email": "ariel@example.com",
"queue_id": 8469,
"queue_path": "Developers / Ariel",
"session_type": "Messaging Inbound (SMS)",
}
}
代理退出
当客服人员从客服人员适配器中退出时,会发生客服人员退出事件。
以下事件字段是 Agent_Logout 事件的一部分。
agent_id:登录的客服人员的标识符agent_email:与代理账号关联的电子邮件地址agent_custom_id:代理的自定义 ID(如果已在代理的个人资料中输入)。可选。
以下是 Agent_Logout 事件的示例:
{
"type": "Agent_Logout",
"data": {
"agent_id": 1,
"agent_custom_id": "007",
"agent_email": "ariel@example.com",
}
}
Agent Assist 已启动
当客服在通话或聊天会话期间激活 Agent Assist 时,系统会触发“Agent Assist 已启动”事件。
以下是 Agent_Assist_Started 事件的示例:
{
"type": "Agent_Assist_Started",
"data": {
"conversation_id": "12345",
"queue_id": "65",
"agent_id": "1",
"session_id": "78534G4RT4284",
"queue_language_id": "en",
"timestamp": "12:45:15"
}
}
以下是事件字段:
conversation_id:对话标识符queue_id:队列标识符agent_id:代理标识符session_id:会话标识符queue_language_id:队列的语言timestamp:时间戳
后台屏幕弹出
屏幕弹出功能可让客服人员在后台执行 CRM 屏幕弹出操作,这意味着客户信息会显示在客服人员的屏幕上,而无需客服人员执行任何操作。这样可以为消费者提供更顺畅的体验,并缩短客服人员的处理时间。
CRM 记录弹出式窗口
事件 CRM_Record_Pop 是一个服务器端事件,当需要弹出票券时会触发该事件。此事件包含一个名为 recordUrl 的参数,其中包含 CRM 记录的网址。如果您使用的是嵌入式适配器,则可以通过订阅 POST 事件来执行屏幕弹出操作。
为此,以下示例演示了如何添加一个事件监听器,用于监听从其他框架或窗口发送的消息。此代码段旨在实现不同框架或窗口之间的通信,并允许根据收到的消息动态更新 iframe 中显示的内容。
// name is the html property of the iframe
const iframeTarget = document.querySelector('iframe[name="target_iframe_adapter"]')
// example usage of add event listener
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
window.addEventListener('message', (e) => {
try {
const data = JSON.parse(e.data)
const type = data.type
console.log('EventListener: ', JSON.stringify(data))
if (type === 'CRM_Record_Pop') {
const recordUrl = data.data.recordUrl
if (!recordUrl) {
return
}
console.log(`Opening <strong>recordUrl</strong> in iframe <strong>${iframeTarget.getAttribute('name')}</strong>`)
// changing an iframe target to the record URL pop
iframeTarget.src = recordUrl
} else if (type === 'New_Chat') {
console.log(`<strong>Chat started...</strong>`)
// handling here for new_chat events
} else if (type === 'End_Chat') {
console.log(`<strong>Chat ended...</strong>`)
// handling here for end_chat events
} if (.... //other event types) {
// code handling for other types
}else {
console.log(JSON.stringify(data))
}
} catch (e) {
log(e, true)
}
}, false)