变量为一条信息命名,因此您可以创建一个名为local_ip_v4的变量,而不是使用类似 192.168.1.1 的IP地址。从现在开始,每当您需要引用此 IP 地址时,请使用 ${local_ip_v4} 而不是键入实际的 IP 地址。变量值存储在服务器上的内存中,当您检索变量时,FreeSWITCH 会从内存中提取当前值。local_ip_v4
使用变量有几个好处:
管理更改
如果值发生更改,则只需在一个位置更改该值。例如,通过使用变量定义 IP 地址,只需指定一次实际 IP 地址,然后在需要 IP 地址的任何地方使用该变量。可读性更好
提供配置值的上下文。通过为特定值命名,可以更轻松地理解配置。例如,如果您在配置文件中看到一个数字 1000,则该数字的含义并不明显:它是扩展名吗?是否为超时期限?你不会知道的。您必须花费宝贵的时间尝试从周围的文本中获取上下文。通过使用具有有意义名称的变量,您可以避免猜测。传递数据
由于 FreeSWITCH 建立在模块化架构之上,变量提供了一种在不同模块之间共享数据的便捷方式。配置
FreeSWITCH 核心和许多模块都有用作配置设置的预定义变量。这些通常具有可以覆盖的默认值。FreeSWITCH的行为可以通过更改其中一个预定义变量的值来控制。
请参阅通道变量目录中的“变量列表”,“全局变量”,“变量主列表”,以及一堆其他晦涩难懂的地方(例如,变量,FS通道变量,交换机核心变量,CDR和账户变量,__DTMF变量以及FreeSWITCH源代码)。
引用变量
变量可以使用美元符号来引用:${variable_name}
无论您在哪里使用此语法,FreeSWITCH 引擎都会将其替换为变量的当前值。
- 对于全局变量,所有通道 channels (即 通话call)的值将相同。
- 通道变量 仅在通道的上下文中可用,并且将计算为当前通道的值。
例如,在拨号计划中,可以基于destination_number通道变量创建规则。在为通道解析拨号计划时,它将检索此特定通道的拨号号码。
单个$和$$前缀之间的区别
前缀为单 $ 或双 $$ 的变量名称之间的差异仅在配置文件中具有重要意义:
- 双
$$
语法仅适用于全局变量。
$${variable_name}
将被预处理器完全删除,并替换为变量的值。如果没有匹配的全局变量,它将保持空白。由于这是由预处理器完成的,因此仅当配置文件加载到内存中(在启动时或重新加载时)时才对其进行解析。 - 单个
$
语法不受预处理器的影响,而是在运行时进行解析。
例如,如果您在拨号计划中使用它,则将针对每个呼叫重新解析变量值。因此,如果更改全局变量的值,$ 语法将反映新值。
另一个区别(在配置文件之外)是:
-
$
语法可用于检索全局变量和通道变量。 -
$$
语法仅适用于全局变量。
令人困惑的是,这种区别仅适用于配置文件。在scripts,CLI,API calls等中,$ 和$$语法之间没有区别;两者都可用于检索全局变量和通道变量,并且根据定义,它们在运行时进行解析。` (没看懂😂)
显示变量
在mod_commands中使用eval
对于全局变量,请在fs_cli中使用以下内容:
freeswitch@lofa> eval ${variable_name}
或者在终端:
$ fs_cli -x '${variable_name}'
使用单引号还是双引号?
如果您使用终端,请确保使用正确的引号。例如,在Bash中,建议使用单引号,因为它们会导致引号之间的所有内容都按字面解释;否则,Bash 将尝试计算局部变量,因为 $ 字符在Bash具有特殊含义,而双引号将允许它首先计算这些变量。
eval 也可用于通道变量,但由于这些变量仅在调用会话期间设置,因此 eval 将需要所需会话的 UUID,否则它将返回 -ERR no reply。请参阅mod_commands中的完整说明。
在mod_commands中使用 global_getvar 获取 全局变量
freeswitch@lofa> global_getvar variable_name
在mod_commands中使用 uuid_getvar 获取 通道变量
freeswitch@lofa> uuid_getvar <uuid> variable_name
全局变量
顾名思义,全局变量可用于整个 FreeSWITCH 系统,并且它们的值对于所有通道都是相同的。它旨在用于不经常更改的变量。
可以使用set预处理器命令在配置中创建/修改全局变量(请参见了解配置文件)。您还可以使用 global_setvar API 命令设置全局变量(请参阅mod_commands)。
FreeSWITCH内核以及单个模块具有许多预定义的变量,其中一些变量在vars.xml中默认配置,其他变量具有由FreeSWITCH内核分配的默认值。
有关预定义全局变量的完整列表,请参阅“全局变量”页面(但通道变量目录也列出了这些变量)。
通道变量
通道变量是特定于单个通道(或单个call)的变量,例如caller_id_number等。您可以使用set预处理器指令创建通道变量(请参见了解配置文件)。由于通道变量特定于通道,因此它们仅在通道的上下文中(如在拨号计划中)或作为拨号计划的一部分运行的脚本中可用。
系统定义的变量
除了使用set预处理器指令创建的变量之外,还有数百个由 FreeSWITCH 内核和加载的许多模块创建的变量。变量的完整列表记录在变量主列表中。