变量

本帮助页面上的信息同时适用于 CXone StudioDesktop Studio

变量是存储可更改值的占位符。当每次脚本运行时值都不同时,请使用它们。例如,ANI 是保存呼叫者的 ANI关闭 也称为呼叫者 ID。所列的语音来电的电话号码。 或电话号码的变量。在脚本中使用 ANI 时,它会保存联系呼叫者 ID 。每次脚本运行时,它都会处理不同的联系,因此 ANI 的值会发生变化。

如果需要,您可以随时创建自己的变量。变量可以包含单个值。它们还可以包含动态数据对象数组

Studio脚本中使用的一些变量是系统定义的。这意味着这些变量是Studio操作关闭 在 Studio 脚本中执行一个过程,如收集客户数据、播放消息或音乐或将联系人转接给坐席。内部代码的一部分,因此您不必创建它们。有两种系统定义的变量:

  • 保留变量:只读变量,需要在脚本中包含特定信息时可以使用。
  • 预定义变量:已定义的变量。它们是可写的,因此您可以为其赋值。

尝试一下

下载变量示例脚本并将其导入 Studio。本帮助页面中的示例可在示例脚本的 Snippet 操作中使用。您可以打开 Snippet Editor 窗口并运行调试器,了解每个示例的运行情况。

变量语法摘要

以下列表总结了变量语法。有关这些要点的更多信息,请参阅本页的其他部分。

  • 使用 ASSIGN 操作Snippet 操作创建变量并为其赋值。在 Snippet 中,声明变量时可以使用 ASSIGN 关键字。这是可选的,但强烈建议使用 。在 Snippet 中使用以下语法:ASSIGN <var name> = <var value><var name> = <var value>CXone Studio 中的操作帮助页面:ASSIGN 操作Snippet 操作。)

  • 为变量赋值时:
    • 字符串和日期/时间值必须用单引号或双引号引起来。例如:ASSIGN life = "forty-two"
    • 要为将与日期/时间函数一起使用的日期/时间赋值,请在该值的前面但在双引号之外加上一个井号 (#)。例如:ASSIGN var = #"02/09/2023"。如果日期/时间值不与日期/时间函数一起使用,则不需要使用井号字符。但是,如果没有井号,则该值为字符串类型,而非日期/时间类型。
    • 数值不需要用引号引起来。如果用引号引起一个数值,除非在数学表达式中求值,否则会将其视为字符串
    • 数值表达式和布尔关闭 一种数据类型,它有两种可能值:真和假。表达式不得用引号引起来。如果这些表达式用引号引起来,则会将其视为字符串。例如:根据 var2 的值,ASSIGN myVar = var2 > 42 求值为 true 或 false。然而,ASSIGN myVar = "var2 > 42" 导致 myVar 的值实际上为 var2 > 42
    • 布尔值不得用引号引起来。
    • 如需在字符串值中包含以下字符,请使用转义序列:双引号 ( " )、单引号 ( ' )、左大括号 ( { )制表符 (ASCII 9)、回车符 (ASCII 13)、换行符 (ASCII 10)、退格键 (ASCII 8)、空。
  • 在字符串中替换变量值时:
    • 用大括号将变量括起来。例如: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-2022"。
  • 布尔值:变量值为 true1,或者 false0。布尔值不要用引号括起来。

在许多编程和脚本语言中,创建变量时必须为其显式指定数据类型。在 Studio 中,变量为隐式类型。Studio 编译器在编译脚本时会确定每个变量的类型。这意味着您无需为所使用的任何变量定义数据类型。唯一的例外是当变量包含要与日期/时间函数一起使用的日期/时间值时。

类型推断

隐式类型会影响变量的求值方式。例如,变量的比较会根据 Studio 识别变量的类型而产生不同的结果。Studio 中的默认行为是,在需要进行数学计算之前,所有变量均被视为字符串。然后,如果某个变量可以被当作数字来求值,那么它就会被当作数字来求值,即使是用引号引起来。这就是所谓的类型推断。

Studio 编译器会将一个值识别为数字,即使它是用引号引起来的。引号表示值是字符串。如果数值用引号引起来,除非在脚本的数学计算中使用,否则 Studio 会将其视为字符串。例如:


var1 = "42"
var2 = 42

var3 = var2 + var1	

示例的结果 var3 = 84Studio 推断 var1 的值为数值,并在 var3 中对表达式求值时将其视为数字,即使它是用双引号引起来的。

创建变量

您可以创建自己的变量以便在脚本中使用。您可以使用脚本中的 Assign 操作或 Snippet 操作来实现这一功能。

分配操作

Assign 操作可让您创建单个变量并为其赋值。您可以使用操作的 VariableValue 属性来实现这一功能。Assign 的好处是,它是一种易于使用、可配置的变量创建方式。CXone Studio 中的帮助页面:Assign 操作。)

该操作还有其他属性,允许您定义变量的使用方式。您可以:

您还可以在 Reqagent 操作(在 CXone Studio 中:操作)中设置弹出屏幕值

片段操作

Snippet 操作是一种创建变量 CXone Studio 中的帮助页面:操作的基于代码的方式。使用单个操作,您即可创建一个或多个变量,此外还可以创建可能需要包含的任何其他自定义代码。使用的 Snippet 好处是,如果稍后要在脚本中添加更多变量,可以将其添加到同一个操作中。您无需在脚本中添加更多操作并重做连接器,如同最初使用 Assign 操作一样。

请使用以下任一种语法格式:

ASSIGN varName = value varName = value

您可以为变量添加与 Assign 操作中的属性相匹配的属性:

  • 要在弹出屏幕中包含变量值,请将 setscreenpop(1) 添加到变量名中。
  • 要将变量值保存到数据库中,请将 savetodb(1) 添加到变量名中。

例如:

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

对于这两个属性, 1 为布尔关闭 一种数据类型,它有两种可能值:真和假。值,用于将属性设置为 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
  • 数字表达式不能用引号括起来。这包括数学和布尔关闭 一种数据类型,它有两种可能值:真和假。表达式。如果用引号括住数字表达式,会将其视为文本。例如,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 

因为 date1 的文本值大于 date2 的文本值,所以结果为 1 (true)。

变量命名

名称变量遵循以下指南:

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

  • 名称的第一个字符必须是字母。
  • 在名称的任何地方使用下划线字符 ( _ ) 和美元符号 ( $ )。
  • 如果变量名中的最后一个字符为美元符号,则会将该值视为文本
  • 请勿使用预定义变量的名称保留字

变量替换

如果需要在脚本中使用变量的值,请在代码片段或操作的属性字段中包含该变量的名称。

如果要将变量值代入字符串,请用大括号将变量名括起来。在字符串中,除非格式化为变量,否则所有内容均被视为纯文本。例如:

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 技能关闭 用于根据坐席的技能、能力和知识自动传递交互、优先级管理和其他设置。如果使用变量来配置业务线之间值不同的属性,则只需要一个而不是三个脚本。

Studio 操作属性中引用变量时,通常适用以下准则:

  • 属性需要变量或数据。数据可以由文字或变量组成。当属性期待数据时,通常它可以接受文字或变量。但也有例外情况,所以如果不确定属性的期望值,请务必参阅操作的在线帮助。
  • 如果属性期望使用变量名,请输入不带大括号的变量名。

  • 如果属性期望使用数据,而你又想使用变量替换,请用大括号括住变量名:{varName}

从脚本到脚本传递变量值

变量值可以在脚本之间传递。它们可以从以下脚本传递:

  • 原始脚本到子脚本:原始脚本中的所有变量都存在,并可在子脚本中使用。不过,它们属于全局作用域。要在子脚本中使用这些变量,需要在变量名前面加上 global:。例如,global:varName。这包括预定义的系统变量和您声明的变量。
  • 子脚本到原始脚本:在子脚本中声明的变量不会自动传回原始脚本。如果要将子脚本中的自定义变量传回原始脚本,必须将其声明为全局变量。同样,如果在子脚本中声明变量,也必须将其声明为全局变量,并在子脚本和顶层原始脚本中将其引用为全局变量。

您可以在脚本跟踪中查看全局变量。在查看跟踪时,可能需要在“跟踪输出”窗口中启用此选项。

有些数据可能来自脚本之外,如 CRM关闭 管理联系人、销售信息、支持详细信息和案例历史记录等事项的第三方系统。API关闭 API 允许您通过连接您的 CXone系统和您的组织使用的其他软件来自动化某些功能。 调用。您可以使用 RunSub 操作Spawn 操作中的 Parameters 属性将这些值传递到子脚本或生成的脚本中。Begin操作还有一个Parameters 属性。使用变量名配置子脚本中的 Begin 操作,以接收通过 RunSubSpawn 传递的值。CXone Studio 中的操作帮助页面:RunSub操作Spawn操作Begin操作。)

如果需要传递的数据包含在对象中,则必须先将对象转换为 JSON 或 XML。您可以传递包含 JSON 或 XML 字符串的变量。在第二个脚本中,您可以根据需要将数据转换为对象。

变量比较与求值

事实上,Studio隐式类型变量会影响变量在求值表达式和布尔关闭 一种数据类型,它有两种可能值:真和假。比较中的使用。

例如:

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

在本例中,表达式 y = (a1 = a2) 的求值结果为 y = 1 (true)。

强制作为文本比较

即使变量的值为数字,也可以强制将其作为文本求值。您有两种方法可以这样做:

  • 在变量名后添加一个美元符号。例如:varName$ = 42。在进行比较时,两个变量中只有一个需要美元符号后缀。
  • 使用大括号和双引号将变量名括起来。例如,y = ("{a1}" = "{a2}")

如果变量名以美元符号结尾,则使用该变量的所有布尔关闭 一种信息属性,它定义了如何在程序中使用它,如整数(可操作的数字)或布尔值(真/假)。运算(=><>= <=)均将该值视为文本。例如:

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 操作(在 CXone Studio 中:操作后将其自动传递回源脚本。在子脚本中声明全局变量时,不必使用 Return 操作将其自动传递回源脚本。

您可以使用 Snippet 操作Assign 操作(在 CXone Studio 中: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 操作并在“代码片段”编辑器窗口的“文本视图”选项卡中添加以下内容:
    • 对于动态数据对象:DYNAMIC <object name>
    • 对于常规变量:ASSIGN <var name> = ""
  8. 单击 OK 保存更改。