技术设计文档模板

技术设计文档 (TDD) 描述系统的细节。 它们是规划自定义虚拟坐席集成的重要组成部分。 此页面是为自定义虚拟坐席集成创建 TDD 的指南。

此 “TDD” 模板中的每个部分都包含有关该部分的预期内容的示例或附加信息。 在可能的情况下,这些示例与示例文本虚拟坐席集成相关。

使用本 TDD 指南和示例集成作为规划您自己的自定义集成的起点。 但是,由于它们是作为示例提供的,因此 TDD 和示例代理隧道都不是针对特定环境设计的。 您创建的 TDD 和代理隧道必须考虑您组织的独特网络架构和要求。 您可能需要添加或删除部分以满足您环境的需要。

概览

本技术设计文档描述了[您的虚拟坐席]CXone Mpower自定义集成。 该集成包括本文档中必须描述的以下组件:

  • 架构,包括代理隧道/网关中间件。
  • CXone Mpower 配置要求,包括技能、联系人和渠道。
  • Virtual Agent Hub 和自定义虚拟坐席集成的端点(自定义交换端点)。
  • Studio脚本,包括Snippet代码。
  • 认证要求。
  • 虚拟坐席配置、端点、消息发起详细信息。
  • Digital Experience 富媒体内容 JSON 架构。
  • 请求和响应模式映射。
  • [您的架构和集成特有的其他组件]

架构概述

待办:创建集成的概览图。 包括环境中涉及处理交互的所有组件。 这包括代理隧道、虚拟坐席、授权服务器等。 包括概述描述。 如果您需要更详细地显示某些部件,请创建其他图表。

示例

这是 ACD 聊天渠道上的示例文本虚拟坐席集成。 由于这是一个示例集成,因此有些内容与实际集成有所不同:

  • 代理隧道代码是 CXone Mpower 提供的示例选项之一。 本页的示例中使用了 C# 代码。
  • 代理隧道不连接到真实的虚拟坐席。
  • 代理隧道端点旨在回显用户输入的文本。
  • 渠道Closed 促进客户在联系中心交互的各种语音和数字通信媒介。的聊天未在实时网站上设置。 聊天渠道通过从 CXone Mpower 中的联络点页面获取的直接链接进行测试。

这是一个简单的集成,不需要任何授权。

CXone Mpower 配置

待办:列出渠道Closed 促进客户在联系中心交互的各种语音和数字通信媒介。技能Closed 用于根据坐席技能、能力和知识自动交付交互。联络点Closed 呼入联系人用来发起交互的入口点,如电话号码或电子邮件地址。、营销活动以及任何其他相关CXone Mpower配置设置。 如果您的集成使用 Digital Experience (Digital) 渠道,请包含 Digital Experience 渠道和所需的数字技能或路由队列Closed 使用诸如坐席具有此类案例专业知识等标准来确定将数字案例路由到哪些坐席。 如需了解更多信息,请参阅“资源”页面上的CXone Mpower配置要求

示例

  • 渠道ACD 聊天。
  • 技能:名为的聊天技能IBChat_CEESample
  • 联络点:名为IBChat_CEESample的聊天联络点。
  • 营销活动CEESample

渠道要求

由于这是一个示例集成,因此不需要聊天配置文件。 但是,在实际集成中,本部分将指定聊天配置文件的要求。 聊天配置文件定义了聊天窗口的外观。 此部分还将列出网站上聊天气泡所在的页面,以及任何其他相关要求。

Virtual Agent Hub 配置

待办:列出虚拟坐席的 Webhook URL 以及虚拟坐席需要随请求发送的任何参数。 如果您确定需要不同的超时,请将其添加到此部分。 Virtual Agent Hub 中自定义交换端点的完整配置过程在实施页面描述。

示例

  • Webhook URLhttps://https://4db3-5-46-62-207.nrgok.io/proxy/performbotexchange
  • 端点参数:不需要
  • 自定义标头(仅限集成版本 2.0.0 和 3.0.0):无要求
  • 超时:无需更改
  • 授权标头:不需要
  • OAuth 配置:不需要
    • OAuth URL:不适用
    • OAuth 请求参数:不适用
    • OAuth 标头:不适用

请注意,在集成版本 1.0.0 中,必须在脚本中配置动态身份验证,而不是在 Virtual Agent Hub 中配置。

Studio脚本

待办:添加您为自定义虚拟坐席集成设计的脚本的屏幕截图以及说明。 根据需要包括变量的描述、代码片段和其他详细信息。 如需了解更多信息,请参阅脚本指南和要求

示例聊天脚本

这与示例集成中使用的脚本相同。 您可以将其用作您自己的脚本的基础。 同样为 语音 数字 虚拟坐席提供示例脚本。

下载此脚本

此脚本以 Snippet 操作开始,该操作创建虚拟坐席集成所需的多个动态数据对象:

  • intentInfo
  • nextPromptSequence
  • nextPromptBehaviors
  • customPayload
  • botSessionState

第一个 Textbot Exchange 操作设置 意图Closed 联系人所说/键入的内容背后的含义或目的;联系人想要传达或完成的内容。 供虚拟坐席响应欢迎意图。 当虚拟坐席回复时,它会填充 botSessionStatecustomPayload 对象,并使用以下方法将它们转换为 JSON .asjson() 函数。

第一个 Textbot Exchange 操作具有三个分支:

  • Error:错误分支处理错误并向联系人提供适当的消息。
  • Return Control to Script:当虚拟坐席发出信号表示对话已完成或需要将联系转给实时坐席时,将采取此分支。
  • Prompt and Collect Next Response:该分支继续对话,如下所述。

该脚本将从虚拟坐席收到的数据传递到 botsessionStatecustomPayloadFromBotintentInfonextPrompt 对象。 Askcaller操作提示与虚拟坐席的响应 (nextPrompt) 联系。 该操作有四个分支:

  • Error
  • Return Control to Script
  • Caller Responded
  • Default

所有分支都会转至第二个 Textbot Exchange 操作,该操作将适当的信息发送到虚拟坐席,包括 RES 变量。 此 Textbot Exchange 与脚本中操作的第一个实例具有相同的分支。

服务端点授权

待办:确定虚拟坐席服务的授权要求。 如果需要授权,请填写 TDD 的这一部分。 创建一个图表来说明您的环境的授权要求。 包括授权请求所需内容的详细信息。 这可能包括:

  • 授权类型(标头或令牌)。
  • 所有必需标头的键值对。 如果您使用的是自定义交换版本 1.0.0,则仅需要标头的值。
  • 虚拟坐席服务的任何配置要求(如果您使用标头)或授权服务器(如果您使用令牌)。
  • 如果您使用令牌,则为授权服务器的 URL。
  • OAuth 请求正文和标头所需的键值对。
  • 如果您需要或想要自定义其他 OAuth 设置,请指定这些更改。 您可以更改标头名称、标头值前缀和令牌过期时间。

有关详细信息,请参阅“资源”页面上的授权部分

非授权(公共)服务端点示例

示例集成不需要授权。 下图显示的是公共服务端点的示例。

在此示例中,请求源自 Virtual Agent Hub。 它首先与 API 网关交互,然后与虚拟坐席服务交互。

授权服务端点示例

当虚拟坐席服务需要授权才能接收请求时,您必须随每个请求发送授权标头。 您还可以使用动态身份验证,这需要授权服务器(令牌提供程序)。 使用标头的集成的体系结构似乎与上一节中的公共服务端点示例中的体系结构类似。 下图显示的是动态身份验证实现的示例。

在此示例中,当脚本开始时,会向授权服务器发出 REST 请求,授权服务器会提供令牌。 令牌被发送到自定义交换端点。 只要令牌有效,请求就可以发送到虚拟坐席服务。

代理隧道

待办:确定代理隧道的详细信息,包括:

  • 您的代理隧道将如何托管。
  • 代理隧道将使用什么语言进行开发以及任何所需的应用程序、依赖关系、SDK、扩展包等。
  • 代理隧道故障转移策略。

示例

代理隧道托管

示例代理隧道将托管在设置示例文本虚拟坐席集成的人员的本地计算机上。

语言

代理隧道将在 C# 中开发。 它将需要 VS Code 编辑器和 .NET SDK。

故障转移策略

由于这是一个示例集成,因此不需要故障转移策略。

虚拟坐席用例——代理到虚拟坐席端点映射

待办: 创建详细的序列图,说明每个部分使用的响应和请求交互过程中的点。 在CXone Mpower中记录请求和响应架构以及自定义集成所需的虚拟坐席服务。 本节中的示例仅显示 CXone Mpower 的架构。 有关详细信息,请参阅“资源”页面上的代理隧道部分序列图部分

示例

序列图和接下来的所有内容都是基于发布时可用的 Swagger 的示例。 始终使用公开可用的 Swagger 一个带有从中心向外指向的箭头的正方形。 中记录的架构进行自定义虚拟坐席集成。 自定义交换端点模式可以定期更新。 如需详细了解这对您的自定义集成有何影响,请参阅“资源”页面

请求和响应模式

请求的架构包含在此页面上,作为记录架构的示例。 有关自定义虚拟坐席集成架构的详细说明,请参阅架构页面

请求 -ExternalIntegrationBotExchangeRequest

参数

类型

说明

virtualAgentId 字符串

Virtual Agent Hub 中为 Custom Exchange Endpoint 配置应用程序指定的名称。 该名称标识应用程序调用的虚拟坐席。

botConfig 对象 botConfig 中定义的参数将在本文档的其他部分中讨论。
userInput 字符串 从分配到脚本的联络点Closed 呼入联系人用来发起交互的入口点,如电话号码或电子邮件地址。接收到的用户输入的文本。
userInputType 枚举 脚本提供的用户输入类型。
executionInfo ActionExecutionInfo 在脚本中执行操作Closed 在Studio脚本中执行流程,例如收集客户数据或播放音乐。的遥测数据。
systemTelemetryData SystemTelemetryData 可用于调试的数据。 包含有关 CXone Mpower 基础设施的信息。
base64wavFile 字符串 包含 Base 64 编码的 WAV 文件,该文件包含请求的标头和用户话语Closed 联系人所说或输入的内容。音频。
botSessionState 对象 可用于从虚拟坐席接收的往返会话信息变量。
customPayload 对象 可用于从 Studio 脚本的上下文发送其他变量和参数。
mediaType 字符串 指示正在运行的脚本的媒体类型。

请求 - ActionExecutionInfo

参数

类型

说明

contactID 整数 交互的唯一标识符。
busNo 整数 租户Closed 用于管理CXone Mpower系统的技术支持、计费和全局设置的高级组织分组。的唯一标识符。
requestId 整数

标识特定交互中的每个请求的迭代数。

 

actionType 字符串 向自定义交换端点发出请求的操作类型。
actionId 整数 脚本中操作Closed 在Studio脚本中执行流程,例如收集客户数据或播放音乐。的唯一标识符。 操作 ID 基于操作添加到脚本的顺序。
scriptName 字符串 脚本的名称。

请求 - SystemTelemetryData

参数

类型

说明

consumerProccessHost 字符串 调用 API 的应用程序的主机名。
consumerProcessName 字符串 API 调用程序的进程或应用程序名称。 例如,EsnMediaServer.exe
consumerProcessVersion 字符串 有关调用 API 的应用程序的任何版本信息。
inContactClusterAlias 字符串 如果适用且可用,请提供CXone Mpower集群别名,例如C7M33
inContactScriptEngineHost 字符串 如果适用且可用,请提供CXone Mpower脚本引擎主机名,例如lax-c4cor01aoa-c32cor01
consumerMetaData 对象 有关 API 使用者的任意且可扩展的数据。

Digital Channels 的富媒体内容

如果您要为Digital Experience(Digital) 渠道设置自定义虚拟坐席集成,则可以选择支持消息中的富媒体内容。 富媒体内容包括列表选择器、图像、时间选择器等内容。

待办:配置数字脚本以发送富媒体内容。 确定您要支持的富媒体,并将内容的架构添加到您的内容的此部分时分驱动。

示例

示例集成不使用 Digital Experience 渠道。 但是,以下是用于在 数字 聊天渠道上快速回复的 JSON 架构示例:

"messageContent": {
"type": "PLUGIN",
"payload": {
	"elements": [
	 {
		"id": "Ukm0hRAiA",
		"type": "QUICK_REPLIES",
		"elements": [
				{
					"id": "Akm0hRAiX",
					"type": "TEXT",
					"text": "This is some text"
				},
				{
					"id": "Nkm0hRAiE",
					"type": "BUTTON",
					"text": "Button 1",
					"postback": "click-on-button-1"
				},
				{
				
					"id": "TkGJ6CAiN",
					"type": "BUTTON",
					"text": "Button 2",
					"postback": "click-on-button-2"
				},
				{
					"id": "EyCyTRCi4",
					"type": "BUTTON",
					"text": "Button 3",
					"postback": "click-on-button-3"
				}
			 ]
			}
		]
 	}
}