變數

變數是儲存可變更值的佔位元。當每次執行指令碼時值都不同時使用這些變數。例如,ANI 是一個儲存來電者的 ANIClosed 也被稱為呼叫者 ID。顯示語音來電的電話號碼。 或電話號碼的變數。當在指令碼中使用 ANI 時,此變數將儲存聯絡的來電者 ID。每當指令碼運行時,它會處理不同的聯絡,因此 ANI 的值會發生變更。

您可以在需要時隨時建立您自己的變數。變數可以保留單一值。它們還可以保留動態資料物件陣列

Studio指令碼中使用的一些變數由系統定義。這表示這些變數是Studio動作Closed 在 Studio 指令碼內執行一個流程,如收集客戶資料、播放訊息或音樂,或將聯絡人路由至客服專員。內代碼的一部分,所以您不需要建立它們。有兩種類型的系統定義變數:

  • 預留變數:唯讀變數,當您需要在指令碼中包含某種特定資訊時,您可以使用此變數。
  • 預定義的變數:已經定義的變數。這些變數可寫,所以您可以向其指派值。

嘗試一下

下載變數範例指令碼將其匯入Studio 中。本說明頁面中的範例可在範例指令碼中的 Snippet 動作中找到。您可以打開 Snippet Editor 視窗並運行 偵錯程式,查看每個範例如何工作。

變數語法摘要

以下清單概括了變數語法。有關這些方面的更多資訊,請參閱本頁的其他部分。

  • 使用 ASSIGN 動作Snippet 動作建立變數並為其賦值。在 Snippet 中,聲明變數時可以使用 ASSIGN 關鍵字。這是可選項,但強烈推薦。在 SnippetASSIGN <var name> = <var value><var name> = <var value> 中使用此語法

  • 為變數賦值時:
    • 字串和日期/時間值必須用單引號或雙引號括起來。例如:ASSIGN life = "forty-two"
    • 要指定一個將與日期/時間函數一起使用的日期/時間值,請在值的前面加上井號 (#),但不要放在雙引號中。例如:ASSIGN var = #"02/09/2023"。如果日期/時間值不用於日期/時間函數,則無需使用井號字元。但是,如果不使用井號,值就是字串類型,而不是日期/時間類型。
    • 數值不需要用引號括起來。如果用引號括起一個數值,它將被視為字串,除非它在數學運算式中被求值
    • 數字和布爾Closed 具有兩種可能值的子了類型:true 和 false。運算式不能用引號括起來。如果這些運算式用引號括起來,則會被視為字串。例如:根據 var2 的值,ASSIGN myVar = var2 > 42 的值為 true 或 false。但是,ASSIGN myVar = "var2 > 42" 會導致 myVar 的值變成字面意義上的 var2 > 42
    • 布爾值不應使用引號括起來。
    • 如果需要在字串值中包含以下字元,請使用轉義序列:雙引號 (")、單引號 (' )、大括號 ({)、定位字元 (ASCII 9)、歸位符 (ASCII 13)、換行符 (ASCII 10)、退格 (ASCII 8)、null。
  • 在替換字串中的變數值時:
    • 把變數放在大括號中。例如:ASSIGN myVar = "the meaning of life is {life}"
    • 如果變數是動態資料對象,則必須引用對象中的屬性。例如:ASSIGN myVar = "the meaning of life is {anObj.thisProperty}"單獨引用物件將導致錯誤。
    • 如果變數包含一個陣列,則必須包含要賦值的索引。例如:ASSIGN myVar = myArray[4]
  • 將一個變數的值賦值給另一個變數時:
    • 不需要雙引號或大括號。例如:ASSIGN myVar = var2。這將導致變數值的副本被賦值給 myVar
    • 如果一個變數包含一個陣列,可以將其賦值給另一個變數。
    • 如果變數是物件,則只能將其賦值給另一個物件。
  • Studio 動作屬性中引用變數時,一般適用以下準則。請始終參閱您正在使用的動作的線上說明頁面,因為這些語句也有例外。

    • 屬性需要變數或資料。資料可以由文字或變數組成。當屬性需要資料時,通常可以接受文字或變數。不過也有例外情況,所以如果不確定屬性的需要,請務必參閱該動作的線上說明。
    • 如果該屬性要求一個變數名稱,請輸入不帶大括號的變數名稱。

    • 如果屬性需要使用資料,並且您想使用變數替代,請用大括號括住變數名稱:{varName}.

資料類型和隱式類型

資料類型定義了變數保留哪種資料,以及在程式中應該如何使用此變數。在 Studio 中,變數可以有以下資料類型:

  • 字串:變數的值包含英數和特殊字元,如句號、逗號和底線。子串必須用雙引號括起來。
  • 數字:變數的值是一個數字。數值不需要雙引號。
  • 日期/時間:變數的值是日期、時間或兩者。當日期/時間值與 Studio 中的日期/時間函數一起使用時,必須在引號中列出該值,並在引號邊上加注:var = #"11-23-2023"。
  • 布爾值:變數的值是 true1,或 false0。不要將布爾值放在引號中。

在許多程式設計和指令碼語言中,建立變數時必須為其明確指派資料類型。在 Studio 中,變數是隱式類型。Studio 編譯器在編譯指令碼時會確定每個變數的類型。這表示您無需為您使用的任何變數定義資料類型。唯一的例外是,當一個變數保留一個日期/時間值,而您想將其與日期/時間函數一起使用時。

類型推斷

隱式類型會影響變數的評估方式。例如,變數的比較會產生不同的結果,這取決於 Studio 將變數識別為哪種類型。Studio 的預設行為是,在需要進行數學計算之前,所有內容都被視為字串。然後,如果某內容可以被評估為數字,那麼它將被當作數字,即使它被引號括起來。這就是所謂的類型推斷。

Studio 編譯器將一個值識別為數值,即使它被引號括起來。引號表示值是字串。當數值用引號括起來時,Studio 會將其視為字串,除非您在指令碼中將其用於數學計算。例如:


var1 = "42"
var2 = 42

var3 = var2 + var1	

範例的結果 var3 = 84.Studio 推斷 var1 的值是數值,並在計算 var3 中的運算式時將其視為數值,即使它被雙引號括起來。

建立變數

您可以建立您自己的變數以在指令碼中使用。您可以在指令碼中使用 Assign 動作或 Snippet 動作來執行此操作。

指派動作

透過 Assign 動作可以建立一個變數並為其賦值。您可以使用動作的 VariableValue 屬性來執行此操作。Assign 的優勢在於它是一種易於使用、可配置的變數建立方式。

該動作還有其他屬性,允許您定義變數的使用方式。您可以:

您還可以在 Reqagent動作(在 CXone Studio 中:動作)中設定螢幕彈出畫面值。

Snippet 動作

Snippet 動作是一種基於代碼建立變數 。除了可能需要包含的任何其他自訂代碼之外,您還可以使用單個動作建立一個或多個變數。使用 Snippet 的好處是,如果您以後想在您的指令碼中新增更多變數,您可以將其新增到同一個動作中。您不需要像原來使用 Assign 動作那樣,在您的指令碼中新增更多的動作並重做連接器。

使用以下任一種語法格式:

ASSIGN varName = value varName = value

您可以為變數新增與 Assign 動作中的屬性相符合的屬性:

  • 要在螢幕彈出畫面中包含變數值,請在變數名後新增 setscreenpop(1)
  • 要將變數值儲存到資料庫中,請在變數名後新增 savetodb(1)

例如:

ASSIGN epicPoem = "Beowulf"
epicPoem.setscreenpop(1)
epicPoem.savetodb(1)

對於這兩個屬性,1 是一個布爾Closed 具有兩種可能值的子了類型:true 和 false。值,可將屬性設定為 true

Snippet 動作中建立變數的重要資訊:

  • 聲明變數時不需要聲明類型,但日期/時間變數除外。
  • 包括 ASSIGN 關鍵字為可選。但是最好的做法是每次建立變數時都使用此關鍵字。當您使用進階搜尋時,如果一個變數包含這個關鍵字,您可以快速找到它的建立位置。
  • 如果您在子指令碼中聲明了一個變數,並希望將其傳回到原指令碼,請在變數名稱的開頭新增 global:。這表示該變數具有全域範圍的作用。

單引號、雙引號、或無引號

將一個變數的值賦值給另一個變數時,某些值必須用引號括起來。其他值不需要引號。請遵循這些準則:

  • 字串值必須用單引號或雙引號括起來。即使變數名稱以美元符號結尾也是如此。如果字串沒有用引號括起來,指令碼會認為該值是一個變數。在下面的範例中,a1a2a1$ 的值都是字面值 Examplea3a3$ 的值取決於 Example 是否被聲明為變數。如果指令碼中存在變數 Example,則 a3a3$ 的值將為 Example。如果 Example 不存在,a3a3$ 的結果為空值。

    ASSIGN a1 = "Example"
    ASSIGN a2 = 'Example'
    ASSIGN a1$ = "Example"
    ASSIGN a3 = Example
    ASSIGN a3$ = Example
  • 數值不需要引號。但是,如果您願意,也可以使用引號。在下面的範例中,b1b2b3 都評估為 123

    ASSIGN b1 = "123" 
    ASSIGN b2 = '123' 
    ASSIGN b3 = 123
  • 數字運算式 不能用引號括起來。這包括數學和布爾值Closed 具有兩種可能值的子了類型:true 和 false。運算式。如果用引號括起一個數字運算式,則會將其視為文字。例如,c1 = 123 + 456 運算結果為 579,但 c2 = "123 + 456" 運算結果為 123 + 456
  • 如果將日期/時間值聲明為日期/時間類型,則必須用引號括起來。
  • 布爾值不應使用引號括起來。
  • 如果要將陣列或動態物件成員的值賦值給變數,請勿對陣列或物件成員名稱使用引號或大括號。

建立帶日期/時間值的變數

Studio 不會將日期/時間隱式識別為一種類型。不過,您可以在變數值前新增識別碼,將其聲明為該類型。只有在日期/時間函數中使用該值或要對該值執行動作時,才需要這樣做。

要將變數值聲明為日期/時間,請使用語法 ASSIGN <varName> = #"<datetime>",其中 <datetime> 是要儲存在變數中的日期/時間值。例如:date1 = #"7/15/2050 5:00pm"。如果變數沒有聲明為日期/時間,可以使用 asdatetime() 函數將其轉換為日期/時間。

某些處理日期和時間的函數需要將變數聲明為日期/時間。即使日期/時間的格式是正確的,如果變數沒有被正確聲明,函數也不會執行。您還可以使用此語法對日期和時間執行其他語法無法執行的動作。例如,您可以比較它們:

date1 = #"7/15/2050 5:00pm" 
date2 = #"7/15/2050 4pm"
x = date1 > date2 

結果是1 (true),因為date1 的常值大於date2的常值。

變數命名

遵循以下準則命名變量:

  • 使用字母數字字元 (a-z, A-Z, 0-9)。

  • 名稱的首個字元必須是字母。
  • 在名稱的任何地方使用底線字元 (_) 和美元符號 ($)。
  • 如果變數名稱的最後一個字元是美元符號, 值將被視為文字
  • 請勿使用預定義變數保留字的名稱。

變數替換

如果需要在指令碼中使用變數的值,請在 snippet 代碼或動作的屬性欄位中包含變數的名稱。

如果要將變數值代入字串,請用大括號括住變數名。在字串中,除非格式化為變數,否則所有內容都被視為純文字。例如:

ASSIGN foeName = "Grendel"
ASSIGN numberFoes = "3"
ASSIGN x = numberFoes
ASSIGN y = "One of Beowulf's foes is {foeName}. He faced {numberFoes} foes in all." 
ASSIGN z = "One of Beowulf's foes is foeName. He faced numberFoes in all." 

範例的結果

  • x=3
  • y=One of Beowulf's foes is Grendel. He faced 3 foes in all.
  • z=One of Beowulf's foes is foeName. He faced numberFoes in all.

將一個變數的值複製到另一個變數時,不需要使用大括號。這適用於文字和數值。在下面的範例中,結果為:x=3z=Grendel

ASSIGN numberFoes = "3"
ASSIGN name = "Grendel"
ASSIGN x = numberFoes 
ASSIGN y = name 

如果使用變數進行數學運算,則不必用大括號括起來。在下面的範例中,結果為 y=200

ASSIGN a1 = "100"
ASSIGN a2 = "100.00"
ASSIGN y = (a1 + a2) 

動作屬性中的變數替換

許多動作屬性可以接受變數來代替字面值。即使該動作的説明頁面沒有明確規定可以使用變數來設定屬性也是如此。

在動作屬性中使用變數允許您重複使用指令碼。例如,如果您的組織有三條業務線,則需要三個佇列指令碼定義每條業務線的 ACD 技能Closed 用於基於客服專員技能、能力和知識的互動的自動化傳遞、優先次序管理和每個業務線的其它設定(若使用字面值)。如果您使用變數設定業務線之間數值不同的屬性,則您可以使用一個指令碼而不是三個。

Studio 動作屬性中引用變數時,一般適用以下準則:

  • 屬性需要變數或資料。資料可以由文字或變數組成。當屬性需要資料時,通常可以接受文字或變數。不過也有例外情況,所以如果不確定屬性的需要,請務必參閱該動作的線上說明。
  • 如果該屬性要求一個變數名稱,請輸入不帶大括號的變數名稱。

  • 如果屬性需要使用資料,並且您想使用變數替代,請用大括號括住變數名稱:{varName}.

從指令碼到指令碼傳遞變數值

變數值可以從指令碼傳遞到指令碼。它們可以從以下傳遞:

  • 源指令碼到子指令碼:源指令碼中的所有變數都已存在,並且可以在子指令碼中使用。但是,它們屬於全域範圍。要在子指令碼中使用它們,需要在變數名前加上 global:。例如:global:varName。這包括預定義的系統變數和您建立的變數。
  • 源指令碼的子指令碼:在子指令碼中聲明的變數不會自動傳回源指令碼。如果您想把子指令碼中的自訂變數傳回原指令碼,您必須將其聲明為全域變數。同樣,如果在子指令碼中聲明變數,則必須將其聲明為全域變數,並在子指令碼和頂層源指令碼中將其引用為全域變數。

您可以在指令碼追蹤中檢視全域變數。檢視追蹤時,您可能需要在追蹤輸出視窗中啟用此選項。

有些資料可能來自指令碼之外,例如 CRMClosed 管理聯絡人、銷售資訊、支援詳情和案例歷史的第三方系統。APIClosed API 讓您可以透過將您的 CXone 系統與組織使用的其他軟體連接,來實現某些功能的自動化。 調用。您可以使用 RunSub 動作Spawn 動作 中的 Parameters 屬性,將這些值傳遞到子指令碼或產生的指令碼中。Begin動作 還有一個 Parameters 屬性。用變數名配置子指令碼中的 Begin 動作,以接收透過 RunSubSpawn 傳遞的值。

如果需要傳遞的資料包含在物件中,則必須先將物件 轉換 為 JSON 或 XML。您可以傳遞包含 JSON 或 XML 字串的變數。在第二個指令碼中,您可以根據需要 將資料轉換為物件。

變數比較和評估

事實上,Studio 對變數進行隱式類型化會影響變數在求值運算式和布爾Closed 具有兩種可能值的子了類型:true 和 false。比較中的使用。

例如:

ASSIGN a1 = "100"
ASSIGN a2 = "100"
ASSIGN y = (a1 = a2)

在本例中,運算式 y = (a1 = a2) 的值為 y = 1 (true)。

強製作為文字比較

即使變數值是數值,也可以強制將變數評估為文字。您可以透過兩種方式操作:

  • 在變數名稱的結尾新增一個美元符號。例如:varName$ = 42。進行比較時,兩個變數中只有一個需要美元符號尾碼。
  • 用大括號和雙引號將變數的名稱括起來。例如:y = ("{a1}" = "{a2}")

當變數名以美元符號結尾時,所有使用該變數的布爾Closed 一種資訊屬性,用於定義在程式中的使用方式,例如整數(可以操縱的數值)或布爾值 (true/false)。操作(=><>= <=)都將該值視為文字。例如:

ASSIGN a$ = 20
ASSIGN b = 100
ASSIGN x = a$ > b

在此範例中,變數 x1 (true)。由於變數 a$ 以美元符號結尾,因此值 20 被視為文字。這表示 a$ > b20 100 是以文字字串而非整數執行比較。作為文字比較時,20  大於 100,因為 20 的開頭數字為 2,而 100 的開頭數字為 1。如果變數名中沒有美元符號,x = a > b 就是 0 (false) ,因為值是作為整數進行比較。整數 20 不大於整數 100。

預留和預定義變數

Studio 中有預先存在的變數。它們是:

  • 預留變數:這些變數返回某種資訊,如當前時間或當前時區的 ID。預留變數為唯讀,這表示指令碼不能在這些變數儲存值。它們的存在只是為了返回資訊。當您想輸入它們返回的資訊時,可以在指令碼中使用它們。Studio 具有 10 個預留變數
  • 預定義變數:這些是系統變數。它們已在 Studio 中定義,因此無需建立即可在指令碼中使用。任何時候需要系統變數所含資訊,都可以在指令碼中使用它們。只有在線上說明或 CXone 客戶代表 指示您覆寫預定義系統變數時,才可以這樣做。您可以在預定義變數頁面了解有關 預定義變數 的更多資訊。

全域變數

全域變數用於在子指令碼中聲明一個變數,並在 Return 動作後自動傳回到原指令碼。當您在子指令碼中聲明一個全域變數時,您不必使用 Return 動作將其傳回給原指令碼。

您可以使用 Snippet 動作Assign動作建立全域變數。當使用 Snippet 建立一個全域變數時,使用以下語法:

ASSIGN global:<variable name>

ASSIGN global:<variable name>="{firstname} {lastname}"

確保冒號和變數名稱之間沒有空格。

如果使用 Assign 動作,請不要包含 ASSIGN 關鍵字。

您不需要在原生指令碼中聲明變數為全域變數。將全域變數的聲明限制為子指令碼,可為您提供有關指令碼的直觀線索。當您看到 global:var 時,說明您正處於一個子指令碼中。

全域變數範例

下面的範例顯示了如何使用全域變數。

檢視指令碼中的所有變數

有兩種方法可以查看指令碼中的所有變數。

  • Studio 中的「變數」標籤可以顯示指令碼中使用的所有變數。若此標籤已關閉,可以透過點擊 Validation > Windows > Variables 將其開啟。
  • 運行追蹤時,您也可以看到指令碼中使用的變數。當您選擇追蹤輸出中的每一行時,指令碼中在該處的變數就會出現在變數窗格中。您可以點擊追蹤中的每一行,查看變數內容如何隨著指令碼的進程而變化。

變數編校

變數編校消除了指令碼產生的追蹤和記錄中的變數值。您可以編校變數和物件。

編校是在指令碼級別的指令碼屬性VariableRedaction 欄位中配置。已編校的值被替換為一個 X 字元的字串。變數值的長度決定了使用 X 的個數。一個編輯過的五個字母的單詞會產生五個 X。不支援部分變數編校,例如信用卡號的一部分。

變數編校發生於指令碼級別。它不是一個可繼承的屬性。如果已編校的變數傳遞給其他指令碼,例如使用 RunScriptRunSub 動作,則該變數不會在後續指令碼中自動編校。如果您想要一個變數總是被編校,您必須在其可能被傳遞給的所有指令碼中配置變數編校。

被傳遞到其他指令碼中的變數有一個全域範圍。要編校它們,必須在VariableRedaction 欄位中的變數名稱前包括global:,以確保其被編校。

最佳做法是在指令碼中保留敏感性資料的時間永遠不要超過必要的時長。除了編校變數值外,還可以刪除變數中的資料。刪除資料包含在以下任務的步驟中。

  1. 在 Studio 中,點擊指令碼畫布以確保沒有選擇任何內容。
  2. 點擊 Properties 標籤。
  3. 點擊 VariableRedaction 欄位旁邊的 Ellipsis 按鈕 開啟 String Collection Editor
  4. 輸入您想要編校的變數的名稱。每行放置一個變數。
  5. 點擊 OK
  6. 如果要刪除變數中的資料,請在敏感性資料已被使用且不再需要後,在指令碼中放置一個 Snippet 動作。
  7. 點擊兩下 Snippet 動作,並在「Snippet 編輯器」視窗的「文字視圖 」標籤中新增以下內容:
    • 對於動態資料物件: DYNAMIC <object name>
    • 對於常規變數: ASSIGN <var name> = ""
  8. 點擊 OK 儲存變更。