变量

变量是存储可更改值的占位符。当每次脚本运行时值都不同时,请使用它们。例如,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>

  • 为变量赋值时:
    • 字符串和日期/时间值必须用单引号或双引号引起来。例如: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-2023 年"。
  • 布尔值:变量值为 true1,或者 false0。布尔值不要用引号括起来。

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

类型推断

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

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


var1 = "42"
var2 = 42

var3 = var2 + var1	

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

创建变量

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

分配操作

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

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

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

片段操作

Snippet 操作是一种创建变量 的基于代码的方式。使用单个操作,您即可创建一个或多个变量,此外还可以创建可能需要包含的任何其他自定义代码。使用的 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 传递的值。

如果需要传递的数据包含在对象中,则必须先将对象转换为 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 操作后将其自动传递回源脚本。在子脚本中声明全局变量时,不必使用 Return 操作将其自动传递回源脚本。

您可以使用 Snippet 操作Assign 操作创建全局变量。使用 Snippet 创建全局变量时,请使用以下语法:

ASSIGN global:<variable name>

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

确保冒号与变量名之间无空格。

如果使用 Assign 操作,请勿包含 ASSIGN 关键字。

您无需将源脚本中的变量声明为全局变量。将全局变量的声明限制为子脚本,可以为您提供有关当前使用的脚本的视觉提示。当您看到 global:var 时,您就知道自己位于子脚本中。

将子脚本中的变量声明为全局变量是访问子脚本中变量值的一种方法。另一种选择是使用 GET /contacts/{contactId}/custom-data 一个正方形图标,箭头从中心指向右上角。 API。

全局变量示例

以下示例显示了如何使用全局变量。

查看脚本中的所有变量

可以采用两种方法来查看脚本中的所有变量:

  • 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 保存更改。