指令碼整合

您可以在機器人產生器 中建立自己的機器人動作。這允許您自訂機器人在對話中如何回應。機器人動作用在對話Closed 機器人產生器中的機器人故事和規則。中,用於定義機器人在對話期間的回應。

自訂動作在機器人產生器中建立為指令碼整合。指令碼整合支援JavaScript。每個指令碼整合可以有多個動作。啟用後,當您為案例Closed 透過通道與客服專員的完整對話。例如,互動可以是語音通話、電郵、聊天或社交媒體對話。規則Closed 用於定義機器人對訊息回覆,不隨內容變化。遞補Closed 這些網站用於開發和支援 CXone,而非其運行。阻止這些網站可能會影響存取平台內的説明和下載連結。新增機器人回應時,可以在機器人動作清單中使用自訂動作。

以下清單提供了使用自訂機器人動作的一些方法的範例:

  • 編寫代碼來設計機器人動作,以滿足您組織的特定需求。
  • 呼叫您自己的外部 API 作為機器人動作。
  • 將指令碼加入機器人技能並發布在技能儲存區

機器人產生器指令碼在伺服器上運行,因此構建指令碼時要考慮一些限制因素。

指令碼編輯器

指令碼整合可以有多個動作。每個動作都有自己的指令碼。您可以從每個動作的屬性存取指令碼編輯器。

在編輯器中,您可以在左側輸入代碼,然後點擊執行三角形一個指向右側的三角形箭頭。在控制台窗格中檢視結果。

指令碼變數

您可以建立變數以便在機器人產生器指令碼中使用。變數可以存儲要在指令碼中其他地方使用的值。它們只能在建立它們的指令碼整合中使用,但您可以在該整合中的任何指令碼中使用。

指令碼中的變數值無法變更。它們只能在指令碼整合頁面上修改,或在案例Closed 透過通道與客服專員的完整對話。例如,互動可以是語音通話、電郵、聊天或社交媒體對話。規則Closed 用於定義機器人對訊息回覆,不隨內容變化。遞補Closed 這些網站用於開發和支援 CXone,而非其運行。阻止這些網站可能會影響存取平台內的説明和下載連結。的機器人回應中使用引用變數的動作時進行修改。

要在動作中使用變數:

  • 動作的指令碼必須引用該變數。
  • 如果您希望能夠更改變數值,必須在該動作中將其設為可編輯

機器人產生器指令碼支援四種類型的變數:

  • 文字:文字變數存儲簡單的字串值。可編輯文字變數將成為自訂機器人動作 UI 中的一個欄位,您可以在該欄位中輸入文字來為該變數指派值。
  • 數字:數字變數存儲數字值。可編輯的數字變數將成為自訂機器人動作 UI 中的一個欄位,您可以在該欄位中輸入數字來為該變數指派值。
  • 選擇:當您想要為變數定義多個可能的值時,請使用選擇變數。選擇變數將成為自訂機器人動作 UI 上的下拉式清單。下拉式清單中的選項在「指令碼」標籤上變數定義的欄位中定義。
  • 秘密:使用秘密變數來存儲私有資料,例如權杖或 API 認證。輸入值後,機器人產生器將用星號 (*) 遮罩除前五個字元之外的所有字元。該值是唯讀的,不能被指令碼或機器人動作覆寫或更改。如果需要變更,則必須更新指令碼中「變數」頁面上的值。秘密變數無法編輯。

您可以定義文字、數字和選擇變數的預設值。當變數可編輯時,在將動作新增至機器人回應時,可以透過選擇或輸入不同的值來覆寫預設值。當變數不可編輯但在動作指令碼中引用時,將使用預設值(如果有)。如果未指定預設值,則該變數在指令碼中沒有值。

您所建立的變數將會新增至指令碼整合的Variables物件中。

標準物件和函數

除了標準 JavaScript 功能外,機器人產生器還有以下特定於機器人的框架:

由於機器人產生器指令碼在伺服器上運行,因此在建立指令碼時需要考慮一些限制

機器人物件

Bot物件包含觸發機器人動作 的方法。編寫指令碼時,網頁編輯器會提示您所有可用的方法,包括實參和類型。使用機器人物件時,可以使用以下方法:

Bot 物件中的許多方法可以選擇使用options參數進行自訂。Options 可以是fallbackText(遞補) 或typing(智慧輸入)。typing 的可能值為 123

Options = {
	"fallbackText": "this is the fallback text",
	"typing": 2,
}

sendMessage

輸入要讓機器人傳送的純文字訊息。使用格式.sendMessage(text: string, options: Options): voidoptions 參數不是必需的。

Bot.sendMessage('This is message written by bot')

sendButtons

最多配置和傳送三個按鈕。可透過設定屬性安排所有按鈕設定。使用下面的範例比較對話方塊中的按鈕設定和指令碼中的屬性。使用格式.sendButtons(text: string, buttons: ButtonPayload[], options: Options): voidoptions 參數不是必需的。

Bot.sendButtons('This is message written by bot', [
{
	title: 'Button 1',
	intent: {
		name: 'mood'
	}
}
])

您也可以透過指令碼觸發entityValue、文字或 url。

組合這些屬性可能會導致錯誤或意外行為。

// 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): voidoptions 參數不是必需的。

Bot.sendQuickReplies('This is message written by bot', [
{
	title: 'Quick reply 1',
	intent: {
		name: 'mood'
	}
}
])

您也可以透過指令碼觸發entityValue、文字或 url。

組合這些屬性可能會導致錯誤或意外行為。

// 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): voidoptions 參數不是必需的。

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): voidoptions 參數不是必需的。

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): voidoptions 參數不是必需的。

Bot.sendListPicker('Message', 'Description', [{
	title: 'Title',
	description: 'Description',
	image: {
		url: 'https://picsum.photos/200/300',
		mimetype: 'image/jpeg'
	}
	intent: {
		name: 'mood'
	}
}])

handover

使用queueId 配置移交Closed 任何應該觸發轉移給真人客服專員的聯絡訊息的位置。可以保留null以使用自動重新路由,也可以是現有佇列的 id。使用格式.handover(queueId: ?string): void

尋找queueId:

  1. CXone 中,點擊應用程式選擇器 並選擇ACD

  2. 前往Digital Experience>路由佇列

  3. 找到需要 ID 的佇列,然後點擊編輯

  4. 在佇列的編輯頁面上,查看流覽器中的 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

配置應套用哪個 插槽Closed 從聯絡人的訊息中提取並儲存以用於機器人回覆的實體。類似於變數。。指令碼中使用的插槽必須已存在於機器人產生器中。如果指令碼中調用了一個插槽,但該插槽不存在,則該動作將被忽略。

如果只想存儲指令碼運行得到的值,可使用本地變數或 Store 物件。使用格式.fillSlot(name: string, value: any[]): void

要存取實際插槽值,必須存取.value屬性。

function main() {
	Bot.fillSlot('slotName', 'slotValue');
	console.log(Bot.slots.slotName.value);
}

slots

在點符號中,編輯器可以提示可用的插槽Closed 從聯絡人的訊息中提取並儲存以用於機器人回覆的實體。類似於變數。,但這只適用於時段名不包含空格或特殊字元的情況。如果插槽名包含空格或特殊字元,則必須使用括號符號。

console.log(Bot.slots)

// example
let contactId = Bot.slots['contact.id'].value
let lastCustomerMessage = Bot.slots['last customer message'].value

sendAsCustomer

此功能允許您在故事和規則Closed 用於定義機器人對訊息回覆,不隨內容變化。中新增聯絡人Closed 在聯絡中心與客服專員、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屬性中。

defaultValuevalue屬性最初存儲相同的值。如果您沒有為選擇變數指定預設值,則預設值為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 函數

console 用於測試您的指令碼。您可以記錄任何資料。記錄結果也會存儲在對話歷史記錄中,但不會傳送給 聯絡人Closed 在聯絡中心與客服專員、IVR 或機器人互動的人。

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 次。