脚本集成
您可以在 机器人生成器 中创建自己的机器人操作。这可使您自定义机器人在对话中的响应方式。机器人操作在对话 CXone Bot Builder 中的机器人故事和规则。中用于定义机器人在对话期间的响应。
自定义操作在 机器人生成器 中被创建为脚本集成。脚本集成支持 JavaScript。每个脚本集成均可有多个操作。启用后,当您将机器人响应添加到故事 用于训练机器人根据意图和上下文进行交互处理、规则 用于定义机器人对不随上下文变化的消息的响应。或回退 这些站点用于 CXone 的开发和支持,而不是其运营。 阻止这些可能会干扰对平台内帮助和下载链接的访问。时,自定义操作在机器人操作列表中可用 。
以下列表提供了您可以使用自定义机器人操作的一些方式的示例:
机器人生成器 脚本在服务器上运行,因此在构建脚本时需要考虑一些限制。
脚本编辑器
脚本集成可以有多个操作。每个操作都有自己的脚本。您可以从每个操作的属性访问脚本编辑器。
在编辑器中,您可以在左侧输入代码,然后单击执行三角形 ,以便在“控制台”窗格中查看结果。
脚本变量
您可以创建变量以便在 机器人生成器 脚本中使用。变量可以存储将在脚本中的其他地方使用的值。它们只能在您创建它们所在的脚本集成中使用,但您可以在该集成中的任何脚本中使用它们。
脚本中的变量值无法更改。它们只能在脚本集成页面上修改,或者在故事 用于训练机器人根据意图和上下文进行交互处理、规则 用于定义机器人对不随上下文变化的消息的响应。或回退 这些站点用于 CXone 的开发和支持,而不是其运营。 阻止这些可能会干扰对平台内帮助和下载链接的访问。中的机器人响应中使用引用变量的操作时对其进行修改。
要在某个操作中使用变量:
- 该操作的脚本必须引用该变量。
- 如果您希望能够更改值,则必须在该操作中使其可编辑。
机器人生成器 脚本支持四种类型的变量:
- 文本:文本变量保存简单的字符串值。可编辑的文本变量变成自定义机器人操作 UI 中的一个字段,您可以在该字段中输入文本来为该变量赋值。
- 数字:数字变量保存数值。可编辑的数字变量变成自定义机器人操作 UI 中的一个字段,您可以在该字段中输入数字来为该变量赋值。
- 选择:当您想要为变量定义多个可能值时,请使用选择变量。选择变量成为自定义机器人操作 UI 上的下拉列表。该下拉列表中的选项在“脚本”选项卡上变量定义的值字段中加以定义。
- 秘密:使用秘密变量来保存私有数据,例如令牌或 API 凭据。输入值后,机器人生成器 将用星号 (*) 屏蔽除前五个字符之外的所有字符。该值是只读的,不能被脚本或机器人操作覆盖或更改。如果需要更改它,则必须更新脚本中“变量”页面上的值。无法使秘密变量可编辑。
您可以定义文本、数字和选择变量的默认值。当变量可编辑时,在将操作添加到机器人响应时,可通过选择或输入不同的值来覆盖默认值。当变量不可编辑但在操作脚本中被引用时,将使用默认值(如果有)。如果未指定默认值,则该变量在脚本中没有值。
您创建的变量将被添加到脚本集成的 Variables 对象中。
标准对象和函数
除了标准 JavaScript 功能之外,机器人生成器 还具有以下特定于机器人的框架:
- Bot 对象提供了另一种方法来设计机器人在对话中的响应方式。
- Store 对象允许您保留一个已运行脚本的上下文信息。
- 变量对象保存您添加到脚本集成的所有变量。
- fetch 函数是标准 JavaScript fetch 的实现。
- 控制台允许进行调试。
由于 机器人生成器 脚本在服务器上运行,因此在构建脚本时需要考虑一些限制。
Bot 对象
Bot 对象包含触发机器人操作的方法。编写脚本时,Web 编辑器会提示您所有可用的方法,包括它们的参数和类型。使用 Bot 对象时可以使用以下方法:
- sendMessage
- sendButtons
- sendQuickReplies
- sendCards
- sendMultimedia
- sendRichLink
- sendListPicker
- handover
- addTags
- waitForResponse
- fillSlot
- slots
- sendAsCustomer
Bot 对象中的许多方法可选择使用 options 参数进行自定义。Options 可以是 fallbackText(回退)或 typing(智能输入)。typing 的可能值为 1、2 或 3。
Options = {
"fallbackText": "this is the fallback text",
"typing": 2,
}
sendMessage
输入供机器人发送的纯文本消息。使用格式 .sendMessage(text: string, options: Options): void。无需
Bot.sendMessage('This is message written by bot')
sendButtons
配置并发送最多三个按钮。所有按钮的设置都可以通过设置属性来安排。使用下面的示例将对话框中的按钮设置与脚本中的属性进行比较。使用格式 .sendButtons(text: string, buttons: ButtonPayload[], options: Options): void。无需
Bot.sendButtons('This is message written by bot', [
{
title: 'Button 1',
intent: {
name: 'mood'
}
}
])
您还可以通过脚本触发
组合这些属性可能会导致错误或意外行为。
// triggers intent
{
title: 'Title',
intent: 'mood'
}
// triggers intent with entity value
{
title: 'Title',
intent: {
name: 'mood',
entity: 'myEntity',
value: 'entity value'
}
}
// url
{
title: 'Title',
url: 'https://www.nice.com'
}
// text
{
title: 'Title',
text: 'This is a text'
}
sendQuickReplies
配置并发送最多三个快速回复。所有快速回复设置都可以通过设置属性来安排。用于快速回复的选项与用于按钮的选项相同。使用格式 .sendQuickReplies(text: string, quickReplies: QuickReplyPayload[], options: Options): void。无需
Bot.sendQuickReplies('This is message written by bot', [
{
title: 'Quick reply 1',
intent: {
name: 'mood'
}
}
])
您还可以通过脚本触发
组合这些属性可能会导致错误或意外行为。
// triggers intent
{
title: 'Title',
intent: 'mood'
}
// triggers intent with entity value
{
title: 'Title',
intent: {
name: 'mood',
entity: 'myEntity',
value: 'entity value'
}
}
// url
{
title: 'Title',
url: 'https://www.nice.com'
}
// text
{
title: 'Title',
text: 'This is a text'
}
sendCards
配置并发送最多 10 张卡。使用格式 .sendCards(cards: CardPayload[], options: Options): void。无需
Bot.sendCards([{
title: 'Card title',
description: 'Card description',
image: 'https://picsum.photos/200/300',
mimetype: 'image/jpeg',
button: {
title: 'Button title',
url: 'https://www.nice.com/'
}
}])
sendMultimedia
多媒体不通过 机器人生成器 进行验证,但可以在其他集成中进行验证。url 上的内容必须在使用脚本的整个过程中可用。该内容还必须可公开访问,因为在运行脚本时将重复下载该内容。媒体类型和大小限制与使用多媒体机器人操作时相同。使用格式 .sendMultimedia(url: string, mimetype: string, options: Options): void。无需
Bot.sendMultimedia('https://picsum.photos/200/300', 'image/jpeg')
sendRichLink
配置并发送富链接。使用格式 .sendRichLink(richlink: RichLinkPayload): void。
Bot.sendRichLink({
title: 'Title',
url: 'https://www.nice.com',
image: 'https://picsum.photos/200/300',
mimetype: 'image/jpeg'
})
sendListPicker
配置并发送最多 12 个列表选择器选项。所有列表选择器选项都可以通过设置属性来安排。用于列表选择器的选项与用于按钮的选项相同。使用格式 .sendListPicker(message: string, description: string, actions: ListPickerPayload[], options: Options): void。无需
Bot.sendListPicker('Message', 'Description', [{
title: 'Title',
description: 'Description',
image: {
url: 'https://picsum.photos/200/300',
mimetype: 'image/jpeg'
}
intent: {
name: 'mood'
}
}])
handover
使用
要查找 queueId:
-
在 CXone 中单击应用程序选择器 并选择ACD。
-
转到 Digital Experience > 路由队列。
-
找到您需要 id 的队列,然后单击编辑。
-
在队列的编辑页面上,查看浏览器中的 URL。/edit/ 之后的数字是 queueId。它应该看起来像由破折号分隔的五组数字和字母。例如,67bf5865-4556-40db-ba44-6c0cc3f88ffa。
Bot.handover(null)
// or
Bot.handover('queueId')
addTags
配置应加以应用的标记。脚本中使用的任何标记必须已存在于 机器人生成器 中。如果在脚本中调用了某个标记,但其不存在,则该操作将被忽略。使用格式 .addTags(tags: string[]): void。
Bot.addTags(['Tag 1', 'Tag 2'])
waitForResponse
在某些情况下,您需要等待客户响应并继续执行脚本。由于与客户的通信是异步的,因此等待响应也是异步的。Bot.waitForResponse 方法采用一个参数:收到响应后将执行的函数的名称。使用格式 .waitForResponse(functionName: string): void。
该函数具有延迟行为。这意味着执行结果不会立即生效。相反,当前的脚本执行必须先结束。如果希望脚本以延迟行为函数结束,必须使用返回语句或条件明确停止脚本执行。
function main() {
console.log('Testing wait for response')
Bot.waitForResponse('response') //The script continues to run and the next line executes while listening for a customer response
console.log('This is still going to be executed')
}
function response() {
console.log('Customer responded', Bot.slots['last customer message'].value)
}
fillSlot
配置应加以应用的插槽 从联系人的消息中提取并保存以用于机器人响应的实体。 类似于变量。。脚本中使用的任何插槽必须已存在于 机器人生成器 中。如果在脚本中调用了某个插槽,但其不存在,则该操作将被忽略。
如果您只想存储已运行脚本的值,请使用局部变量或使用 Store 对象。使用格式 .fillSlot(name: string, value: any[]): void。
要访问实际插槽值,您必须访问 .value 属性。
function main() {
Bot.fillSlot('slotName', 'slotValue');
console.log(Bot.slots.slotName.value);
}
slots
在点符号中,编辑器可提示可用的插槽 从联系人的消息中提取并保存以用于机器人响应的实体。 类似于变量。,但这仅在插槽名称不包含空格或特殊字符时适用。如果插槽名称包含空格或特殊字符,则必须使用方括号表示法。
console.log(Bot.slots)
// example
let contactId = Bot.slots['contact.id'].value
let lastCustomerMessage = Bot.slots['last customer message'].value
sendAsCustomer
此功能允许您添加联系人 与联络中心的坐席、IVR 或机器人交互的人员。在您的故事 用于训练机器人根据意图和上下文进行交互处理和规则 用于定义机器人对不随上下文变化的消息的响应。中可能说的内容。使用格式 .sendAsCustomer(text: string): void。
该函数具有延迟行为。这意味着执行结果不会立即生效。相反,当前的脚本执行必须先结束。如果希望脚本以延迟行为函数结束,必须使用返回语句或条件明确停止脚本执行。
Bot.sendAsCustomer('Hello bot')
Store 对象
Store 是为了在脚本执行期间存储数据而创建的对象。与局部变量相比,它的优点是可以跨多个 .waitForResponse 函数使用。
set , get
Store.set(name: string, value: any[]): void
Store.get(name: string): any[]
function main() {
Store.set('token', 'my-secret-token')
Bot.waitForResponse('response')
}
async function response() {
console.log(Store.get('token')) // my-secret-token is logged
}
变量对象
Variables 对象保存您在脚本集成中创建的变量。每个变量都是 Variables 的属性。每个变量都有一组保存有关它的信息的子属性。以下示例显示了一个名为 colorChoice 的选择变量:
"colorChoice": {
"defaultValue": "red",
"options": [
"red",
"green",
"blue"
],
"type": "select",
"value": "red",
"name": "colorChoice"
}
在该示例中,分配给变量的值列表包含在 options 属性中。
defaultValue 和 value 属性最初保存相同的值。如果您没有为选择变量指定默认值,则默认值为 null。变量值无法在脚本中更改,但可使它们可编辑,然后在故事或规则中使用操作时进行更改。
引用脚本中的变量
使用点表示法引用变量值:Variables.varName.value
引用选择变量中的选项列表:Variables.varName.options
查看脚本集成中的现有变量
通过将以下行添加到代码中,然后执行脚本,您可以在脚本中查看现有变量及其属性的列表。该列表显示在控制台中。代码是:console.log(Variables)。同样,您可以通过向脚本中添加 console.log(Variables.varName.value) 或 console.log(Variables.varName.options) 来查看单个变量的内容。
fetch 函数
fetch(url: string, ?options),可能的选项有:
- 方法 - 'GET'、'POST'、'PUT'、'DELETE'
- 标头
- form_params
- json
- 正文
使用 fetch 与 API 进行通信。这些可以是任何 CXoneAPI 或您自己的 API。
const URL = 'https://nice.com'
async function main() {
// 1. using async/await
try {
const response1 = await fetch(URL, { 'method': 'GET' })
console.log(
'response 1',
response1.ok,
response1.status,
response1.statusText,
response1.url,
response1.headers
)
console.log('response 1', await response1.text())
} catch (exception) {
console.log('Error occured', exception)
}
// 2. using Promises
fetch(URL, { 'method': 'GET' })
.then(response => {
console.log(
'response 2',
response.ok,
response.status,
response.statusText,
response.url,
response.headers
)
return response.text()
})
.then(response => {
console.log('response 2', response)
})
.catch(exception => {
console.log('Error occured', exception)
})
// 3. using fetchSync
try {
const response3 = fetchSync(URL, { 'method': 'GET' })
console.log('response 3', response3)
} catch (exception) {
console.log('Error occured', exception)
}
}
fetchSync
fetch 函数是 JavaScript fetch 的标准实现,它返回 Promise,并在响应时实现 .json() 或 .text() 函数。
还有一个同步变体 fetchSync,它直接返回响应,而不是 Promise。如果您想与 JavaScript 的异步世界保持一致,请使用标准的 fetch 函数。
console 函数
log
使用格式 console.log(…output: any[]): void。
console.log('my log', 123, {pi: 3.14})
warn
使用格式 console.warn(…output: any[]): void。
console.warn('my warn', 123, {pi: 3.14})
info
使用格式 console.info(…output: any[]): void。
console.info('my info output', 123, {pi: 3.14})
debug
使用格式 console.debug(…output: any[]): void。
console.debug('my debug output', 123, {pi: 3.14})
error
使用格式 console.error(…output: any[]): void。
console.error('my error output', 123, {pi: 3.14})
错误处理
onError
您可以通过定义 onError 函数来处理意外例外情况引起的错误。
let onError = (e) => console.log('my handler', e.message)
function main() {
Bot.nonExistentMethod()
}
CXone 机器人生成器 脚本限制
在服务器上运行以 机器人生成器 编写的自定义脚本。以下描述了确保脚本和服务器的最佳性能的当前限制。
- 结构:所有代码必须包含在 main 函数内。函数之外的代码将不会被执行。
- 最大事件限制:每个脚本最多只能运行 200 个事件。事件包括每个函数和由每个函数触发的任何操作。
- 内存限制:每次脚本运行最多允许占用 10MB 内存。
- 执行时间限制:每个脚本的执行时间限制为 10 秒。
- 机器人函数的调用限制:每个脚本运行时最多可调用以下机器人函数 20 次:
- sendMessage
- sendButtons
- sendQuickReplies
- sendCards
- sendMultimedia
- sendRichLink
- sendListPicker
- handover
- addTags
- waitforResponse
- fillSlot 的调用限制:每次运行脚本时最多可调用 fillSlot 函数 100 次。
- console 函数的调用限制:每次运行脚本时,以下 console 函数每个最多可调用 100 次:
- log
- info
- warn
- debug
- error
- fetchSync 的调用限制:每次运行脚本时最多可调用 fetchSync 方法 20 次。