指令碼
在 Studio 應用程式中,指令碼是為聯絡中心路由和管理客戶流量的動作 在 Studio 指令碼內執行一個流程,如收集客戶資料、播放訊息或音樂,或將聯絡人路由至客服專員。網路。例如,如果客戶打電話到聯絡中心,客戶將與一個呼入電話指令碼進行交互,該指令碼根據呼叫者的呼叫原因將呼叫者指引到適當的部門。指令碼中的每個動作都有特定的目的。例如:設定技能或變數,播放等待音樂,或傳遞客戶資訊。這些動作透過連接器連結在一起。連接器確定呼叫者在指令碼中導覽的可能「路徑」。指令碼的範圍可以從簡單到極其複雜。一個簡單的指令碼可能只有幾個將呼叫者路由到客服專員的動作。一個複雜的指令碼可能有多個針對不同語言的分支、許多設定和管理變數的動作、對後續指令碼的引用等等。
開發指令碼的基本工作流程始於將動作從「工具」或「框架」標籤拖放到畫布上。然後,連接動作以確定交互流的可能路徑。在建立動作網路之後,您可以透過新增額外參數、自訂編程邏輯或上載要播放的提示來配置每個動作。
大多數指令碼處理都在 Studio 中執行。CXone 提供了指令碼交互的基本方法,例如建立指令碼排程或將指令碼恢復到先前的版本。
指令碼介面元素
前面的圖檔展示了 Studio 使用者介面。中間的大窗格是稱為畫布的主要工作區域。您可以在此處放置動作並與之交互以建立指令碼。Studio 提供了各種標籤或視窗,您可以在畫布周圍的窗格中開啟和排列這些標籤或視窗。這些標籤提供了對建立和管理指令碼所需元件的存取。在此圖檔中,「工具」標籤出現在右邊的窗格中,「導覽」標籤出現在左邊,「指令碼錯誤」標籤出現在畫布下面。您可以點擊「工具」和「框架」標籤(在圖檔的右邊窗格中)中的動作並將將其拖放到畫布上,以建立指令碼。請注意,「框架」標籤必須由內部管理員專門啟用。
指令碼類型
您可以建立與聯絡中心中的不同通道相互關聯的特定類型的指令碼,如下所示:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
一般 | 電郵 | 聊天 | 電話 | 語音郵件 | 工作項目 | SMS | 數位 |
在建立新指令碼時,Studio 會提示您確定要建立的指令碼類型。您選擇的指令碼類型必須與您希望實現的路由類型相互關聯。大多數動作在任何指令碼類型中都能起作用,然而,有些動作只能新增到特定的指令碼中。例如,ASR 允許聯絡人透過說話、點擊手機按鍵或兩者組合的方式來回應錄音的語音提示。 動作與電話指令碼一起運行。如果試圖使用「框架」標籤中的動作,而該動作與正在建立的指令碼類型不相容,Studio 將顯示一條錯誤訊息。此外,與特定指令碼類型不相容的動作將不會出現在該指令碼的「工具」標籤中。
除了這些主要的指令碼類型,Studio 還根據您在系統中啟用的功能和應用程式提供了一些指令碼範本,例如與 Personal Connection 相關的呼叫抑制指令碼。如果您可以存取這些範本,則可以在「建立新指令碼」對話方塊的「可用範本」區段存取它們。

在此指令碼中,系統計算可用客服專員的數目。如果該數目為零,則會播放一條訊息,系統將斷開呼叫。如果可用客服專員的數目大於零,則 IVR 自動電話菜單,允許呼叫者透過語音命令或按鍵輸入或二者進行互動,以獲取資訊、路由至呼入語音通話或二者兼有。 選單為呼叫者提供連線客服專員的選項。在客服專員上線之前,音樂會以 30 秒的間隔播放。同樣,這些動作中的大多數都可以在任何指令碼類型中使用,但是 Hangup 動作特定於電話指令碼。

連接器和分支
連接器
連接器是兩個動作之間的單獨連接。它以箭頭的形式顯示,並確定聯絡人可能的移動,以及跟隨該連接器的聯絡人的條件。您可以透過點擊動作的右下角並將連接器拖放到流程中的下一個動作來連接兩個動作。To help keep your script clean and organized, you can bend connectors by:
- Pressing and holding CTRL and SHIFT on your keyboard.
- Hovering over the connector so that it turns blue.
- Rightvclicking on the connector to place a green box (which will be a pivot point).
- Left clicking the green box and maneuvering the connector as desired.
分支
分支是將指令碼劃分成 2 個或更多子部分的路徑,這些子部分以單個連接器開始。許多動作包含可供您配置的預設分支選項,如 Default 或 OnError,但當連接兩個動作後 PickBranch 視窗出現時,您也可以建立自訂分支條件(稱為變數分支條件)。下拉式清單中的之前圖檔顯示了 3 個分支和連接器的基本範例:資訊、帳單和技術支援。每個分支的第一個連接器都帶有標籤,並顯示 3 個選單選項。許多指令碼將比範例中顯示的要復雜得多,並具有更多充實的分支。如果分支變得過於復雜和廣泛而不能直觀地適應一個畫布,指令碼編寫人員可以將分支分離成獨立的子指令碼,然後使用 Runsub 或 Runscript 動作從主要指令碼中引用子指令碼。這是使您的指令碼保持井然有序,而不是龐大、雜亂和混亂的極好方法。
例如,在下面的指令碼圖檔中,您可以看到 Yggdrasil 選單為其他 8 個北歐世界提供了 8 個選項。每個世界代表了指令碼的一個不同分支。Heimdallr 是 Asgard 熱線的指令碼編寫人員。如果他想為每個分支包含更多選項,指令碼可能會變得過於復雜。相反,他可以為其他 8 個世界分別建立一個獨立的子指令碼。執行此動作後,Heimdallr 將為每個指令碼選項使用 Runsub 或 Runscript 動作,這些選項在聯絡人選擇時啟動單獨的指令碼。

複雜:

壓縮:

指令碼錯誤
「指令碼錯誤」標籤顯示指令碼中可能存在的警告和錯誤。Studio 在點擊「儲存」按鈕後填充此標籤。您可以點擊兩下此清單中的任何警告或錯誤,以導向到發生問題的畫布上的動作。警告不會停止指令碼的執行或儲存,但是,為了避免潛在的問題,最佳做法是在將指令碼投入生產之前減輕警告。
出於預防原因,語法和驗證錯誤會使您無法儲存指令碼。如果偵測到這些錯誤,當您試圖儲存指令碼時,Studio 將顯示一個通知視窗。驗證錯誤可能不會出現在「指令碼錯誤」標籤中,比如在 Rest Api 動作中輸入了無效的 JSON,但您將收到一個包含錯誤技術細節的錯誤通知。如果試圖儲存時出現驗證錯誤,指令碼可能會恢復到指令碼的「最後一個已知的良好」版本,這將導致您丟失在上次儲存後所做的變更。
以下是阻止指令碼儲存的問題範例和錯誤描述範例:
- 拼寫錯誤的變數(「程式碼片段第 2 行。函數:尚未定義 NameLabel」)
- 使用函數作為方法參數(「未結束的函數參數」)
- 在需要特定資料類型的方法中使用不正確的資料類型(「未結束的函數參數」)
錯誤也會影響指令碼追蹤。如果試圖對未儲存的指令碼執行指令碼追蹤,Studio 會提示您儲存指令碼。如果指令碼中有錯誤,指令碼將不會儲存,並且您可能會丟失由驗證錯誤引起的變更。追蹤將執行,但它將在最後儲存的指令碼版本上執行。
指令碼 API
對於更高級的指令碼開發人員,您可以透過編程方式開啟和儲存指令碼,以幫助實現自動化的開發過程。展開下面的下拉式清單以檢視每個 API 的基本細節。

使用 GET /scripts 的 v17 或更早版本獲取
摘要:按名稱或 masterId 返回指令碼的 XML。
描述:此方法按名稱或 masterId 返回指令碼的 XML。
參數:
- 名稱:scriptPath
輸入:路徑
描述:指令碼的完整路徑
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
- 名稱:scriptId
輸入:路徑
描述:指令碼的主要 id
要求:對
樣式:簡單
切割:錯
架構:
類型:整數
回覆:
「200」:
描述:成功
內容:
application/json:
架構:
類型:物件
屬性:
名稱:
類型:字串
描述:指令碼名稱
filePath:
類型:字串
描述:檔案路徑
ScriptId:
類型:整數
描述:MasterId
主體:
類型:字串
描述:指令碼的 XML
「400」:描述:無效的參數
「404」:描述:找不到
「500」:描述:內部錯誤
「501」:描述:Incontrol.Net 服務內部錯誤

摘要:儲存新指令碼或現有指令碼。
描述:此方法將使用 base64 字串將指令碼儲存到 DB 中。
參數:
- 名稱:scriptPath
輸入:路徑
描述:指令碼的完整路徑和名稱
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
- 名稱:主體
輸入:路徑
描述:「指令碼的主體,這是一個以 base64 編碼的 XML」
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
回覆:
「200」:
描述:成功
內容:
application/json:
架構:
SaveScript:
類型:物件
屬性:
ScriptId:
類型:字串
描述:儲存成功後產生的新 ScriptId
「400」:描述:無效的參數
「405」:描述:由其他人鎖定
「500」:描述:內部錯誤
「501」:描述:服務內部錯誤

摘要:儲存新指令碼或現有指令碼。
描述:此方法將使用 base64 字串將指令碼儲存到 DB 中。
參數:
- 名稱:scriptPath
輸入:路徑
描述:指令碼的完整路徑和名稱
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
- 名稱:主體
輸入:路徑
描述:「指令碼的主體,這是一個以 base64 編碼的 XML」
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
回覆:
「200」:
描述:成功
內容:
application/json:
架構:
類型:物件
屬性:
ScriptId:
類型:字串
描述:儲存成功後產生的新 ScriptId
「400」:描述:無效的參數
「405」:描述:由其他人鎖定
「500」:描述:內部錯誤
「501」:描述:服務內部錯誤

摘要:踢掉一個鎖定的指令碼。
描述:此方法將強制解鎖指令碼。
參數:
- 名稱:scriptPath
輸入:路徑
描述:指令碼的完整路徑
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
回覆:
「200」:描述:成功
類型:物件
屬性:
類型:字串
描述:要求日期
ErrorMessage:
類型:字串
描述:來自服務的錯誤訊息
ErrorState:
類型:布爾
描述:錯誤狀態
KickResul:
類型:字串
描述:服務結果
MasterID:
類型:整數
描述:指令碼的主要 ID
CurrLockedBy:
類型:整數
描述:被踢使用者的 ID
「400」:描述:無效的參數,指令碼已解鎖,您無法從指令碼中踢出自己
「404」:描述:ScriptNotFound
「500」:描述:內部錯誤
「501」:描述:服務內部錯誤

摘要:返回指令碼的記錄。
描述:此方法按名稱返回指令碼的記錄。
參數:
- 名稱:scriptPath
輸入:路徑
描述:指令碼的完整路徑
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
回覆:
「200」:
描述:成功
內容:
application/json:
架構:
HistoryScripts:
類型:物件
屬性:
名稱:
類型:字串
描述:與名稱連接的指令碼的完整路徑
版本:
類型:陣列
項目:
HistoryScripts_versions:
類型:物件
屬性:
scriptId:
類型:整數
描述:指令碼的主要 ID
modifyDate:
類型:字串
描述:修改日期
modifyUser:
類型:字串
描述:修改使用者
狀態:
類型:字串
描述:指令碼的狀態
「400」:描述:無效的參數
「404」:描述:找不到
「500」:描述:內部錯誤
「501」:描述:Incontrol.Net 服務內部錯誤

獲取:
標記:
摘要:搜尋指令碼
描述:此方法將根據關鍵字在業務單位中搜尋指令碼。
參數:
名稱:mediaType
輸入:查詢
描述:指令碼的媒體類型。
要求:錯
切割:錯
架構:
類型:整數
名稱:scriptName
輸入:路徑
描述:可搜尋的關鍵字
要求:對
樣式:簡單
切割:錯
架構:
類型:字串
名稱:includeInactive
輸入:查詢
描述:此變數用於包括在閒置指令碼中的搜尋。
要求:錯
切割:錯
架構:
類型:布爾
名稱:includeTrusted
輸入:查詢
描述:此變數用於包括在受信任的業務單位之中的搜尋
要求:錯
切割:錯
架構:
類型:字串
名稱:modEndDate
輸入:查詢
描述:此變數用於包括在既定日期範圍內的搜尋
要求:錯
切割:錯
架構:
類型:字串
回覆:
「200」:
描述:成功
內容:
application/json:
架構:
$ref: '#/components/schemasSearchScript'
'400':
描述:無效的參數
'401':
描述:未經授權。您沒有足夠的權限
'404':
描述:找不到指令碼路徑
'500':
描述:內部錯誤
'501':
描述:Incontrol.Net 服務內部錯誤
元件:
架構:
GetScript:
類型:物件
屬性:
名稱:
類型:字串
描述:「指令碼名稱」
filePath:
類型:字串
描述:「完整的指令碼路徑」
scriptId:
類型:整數
描述:「這是指令碼識別碼,它是唯一的」
主體:
類型:字串
描述:「以 Base63 格式編碼的指令碼內容」
DeleteScript:
類型:物件
屬性:
scriptPath:
類型:字串
描述:「已刪除的完整路徑指令碼名稱的資訊」
已刪除:
類型:布爾
描述:「指令碼的狀態」
錯誤:
類型:字串
描述:「如果刪除過程中出現錯誤」
SearchScript:
類型:物件
屬性:
類型:整數
描述:「業務單位資訊」
scriptName:
類型:字串
描述:「完整的指令碼路徑」
scriptSearchDetails:
類型:陣列
描述:「搜尋結果細節」
項目:
$ref: '#/components/schemas/SearchScript_Details'
SearchScript_Details:
類型:物件
屬性:
busNo:
類型:整數
描述:「業務單位編號」
masterID:
類型:字串
描述:「指令碼識別碼」
scriptName:
類型:字串
描述:「指令碼名稱」
狀態:
類型:字串
描述:「指令碼有效/閒置的狀態」
mediaType:
類型:整數
描述:「媒體類型編號」
modifyDate:
類型:字串
描述:「上次修改日期
mUser:
類型:整數
描述:「上次修改指令碼的使用者」
actionID:
類型:整數
描述:「動作識別碼」
指令碼貼士與技巧
- 在動作中重新命名標題可以使您的指令碼更易於閱讀和遵循。在屬性對話方塊中編輯動作的標題。
- 當使用選單(或類似的動作)時,建立一個分支,以使用連接回 Menu 動作的 Loop 和 Noresponse 動作。
-
在 Music 動作後新增 Wait 動作以重播音樂(否則音訊將播放 30 秒,然後結束)。
- 確保您沒有死胡同。死胡同可能是一些問題,例如選單中缺少分支、未配置的選單分支或(如之前的項目)在 Music 動作之後沒有 Wait 動作。
- 建立選單時,最好先列出部門名稱,然後再說出要撥打/說話的號碼。聯絡人通常先聽到的是部門名稱,然後是號碼。
- 使用 Annotation 動作在整個指令碼中新增附註或說明。
- 使用指令碼名稱作為 Begin 動作標題。
- 對於 Play 和 Menu 動作,點擊兩下動作,並在短語欄位中附註提示的措辭。
- 在「瀏覽」標籤(檢視 > 瀏覽器)中用滑鼠右鍵點擊指令碼,將滑鼠游標暫留在記錄選項上,可以檢視指令碼的記錄。這允許您檢視指令碼的先前重複。