指令碼整合
您可以在機器人產生器 中建立自己的機器人動作。這允許您自訂機器人在對話中如何回應。機器人動作用在對話 CXone Bot Builder中的機器人故事和規則。中,用於定義機器人在對話期間的回應。
自訂動作在機器人產生器中建立為指令碼整合。指令碼整合支援JavaScript。每個指令碼整合可以有多個動作。啟用後,當您為案例 透過通道與客服專員的完整對話。 例如,互動可以是語音通話、電郵、聊天或社交媒體對話。 、規則 用於定義機器人對訊息回覆,不隨內容變化。或遞補 這些網站用於開發和支援 CXone,而非其運行。 阻止這些網站可能會影響存取平台內的説明和下載連結。新增機器人回應時,可以在機器人動作清單中使用自訂動作。
以下清單提供了使用自訂機器人動作的一些方法的範例:
機器人產生器指令碼在伺服器上運行,因此構建指令碼時要考慮一些限制因素。
指令碼編輯器
指令碼整合可以有多個動作。每個動作都有自己的指令碼。您可以從每個動作的屬性存取指令碼編輯器。
在編輯器中,您可以在左側輸入代碼,然後點擊執行三角形在控制台窗格中檢視結果。
指令碼變數
您可以建立變數以便在機器人產生器指令碼中使用。變數可以存儲要在指令碼中其他地方使用的值。它們只能在建立它們的指令碼整合中使用,但您可以在該整合中的任何指令碼中使用。
指令碼中的變數值無法變更。它們只能在指令碼整合頁面上修改,或在案例 透過通道與客服專員的完整對話。 例如,互動可以是語音通話、電郵、聊天或社交媒體對話。、規則 用於定義機器人對訊息回覆,不隨內容變化。或遞補 這些網站用於開發和支援 CXone,而非其運行。 阻止這些網站可能會影響存取平台內的説明和下載連結。的機器人回應中使用引用變數的動作時進行修改。
要在動作中使用變數:
- 動作的指令碼必須引用該變數。
- 如果您希望能夠更改變數值,必須在該動作中將其設為可編輯。
機器人產生器指令碼支援四種類型的變數:
- 文字:文字變數存儲簡單的字串值。可編輯文字變數將成為自訂機器人動作 UI 中的一個欄位,您可以在該欄位中輸入文字來為該變數指派值。
- 數字:數字變數存儲數字值。可編輯的數字變數將成為自訂機器人動作 UI 中的一個欄位,您可以在該欄位中輸入數字來為該變數指派值。
- 選擇:當您想要為變數定義多個可能的值時,請使用選擇變數。選擇變數將成為自訂機器人動作 UI 上的下拉式清單。下拉式清單中的選項在「指令碼」標籤上變數定義的值欄位中定義。
- 秘密:使用秘密變數來存儲私有資料,例如權杖或 API 認證。輸入值後,機器人產生器將用星號 (*) 遮罩除前五個字元之外的所有字元。該值是唯讀的,不能被指令碼或機器人動作覆寫或更改。如果需要變更,則必須更新指令碼中「變數」頁面上的值。秘密變數無法編輯。
您可以定義文字、數字和選擇變數的預設值。當變數可編輯時,在將動作新增至機器人回應時,可以透過選擇或輸入不同的值來覆寫預設值。當變數不可編輯但在動作指令碼中引用時,將使用預設值(如果有)。如果未指定預設值,則該變數在指令碼中沒有值。
您所建立的變數將會新增至指令碼整合的Variables物件中。
標準物件和函數
除了標準 JavaScript 功能外,機器人產生器還有以下特定於機器人的框架:
- 機器人物件提供了另一種方式來設計機器人在對話中的回應方式。
- 透過存儲物件,您可以儲存一次指令碼運行的上下文資訊。
- 變數物件存儲您新增到指令碼整合的所有變數。
- fetch 函數是標準 JavaScript fetch 的實施。
- 控制台允許偵錯。
由於機器人產生器指令碼在伺服器上運行,因此在建立指令碼時需要考慮一些限制。
機器人物件
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 上的內容必須可用。它還必須是可公開存取的,因為指令碼運行時會重複下載。媒體類型和大小限制與使用 multimedia bot action 時相同。使用格式.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 通信。這些 API 可以是任何 CXone API,也可以是您自己的 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,它會直接返回回應,而不是承諾。如果想與 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 次。