0103.变量简介

变量为一条信息命名,因此您可以创建一个名为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 内核和加载的许多模块创建的变量。变量的完整列表记录在变量主列表中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 在启动时,FreeSWITCH会创建一些全局变量,这些变量是只读的(从技术上讲,您可以更改它们,但更改值不起作用)...
    Jafucong阅读 565评论 0 0
  • 简介 基本的 FreeSWITCH 安装使用 XML 文件来配置核心以及所有模块。您可以想象,配置可能会变得非常大...
    Jafucong阅读 401评论 0 0
  • 转载来自 骏马金龙 https://www.junmajinlong.com[https://www.junmaj...
    这货不是王马勺阅读 952评论 0 2
  • nginx的模块非常之多,可以认为所有代码都是以模块的形式组织,这包括核心模块和功能模块,针对不同的应用场合,并非...
    linux大本营阅读 623评论 0 0
  • PHP 为所有脚本提供了大量的预定义变量(predefined variables)。 这些变量包括了以下这些东西...
    咚门阅读 1,200评论 1 4