在 Freeswitch 的整个配置和运行流程中,变量伴随始终,并决定着整个流程的走向。
在 Freeswitch 整个执行流程中,你可以添加,查询各种系统状态,任务状态,呼叫状态,方便 Debug 自定义配置流程。
Freeswitch 中变量其实可以分为两部分:全局变量, 通道变量。
1、使用
1.1 命令行查询
全局变量: eval $${变量名}
新增全局变量设置和查询:
global_setvar
变量名=变量值global_getvar
变量名
1.2 路由表中
全局变量:$${变量名}
通道变量: ${变量名}
特殊通道变量在 condition filed
字段中,可以直接使用 变量名
, 不需要修饰符 $
,详见本章 2.2.26 【特殊直接引用型变量】
2、分类
【官方】所有变量官方飞机票
2.1 全局变量
【官方】全局变量官方飞机票
在 Freeswitch 启动中,自动设置的变量。比如:本地IP, NAT 等。
通常定义在/usr/local/freeswitch/conf/vars.xml
中的变量,也是全局变量,可以更改 Freeswitch 默认的全局变量值。
常见变量有:
Hostname
local_ip_v4
local_mask_v4
local_ip_v6
switch_serial
base_dir
recordings_dir
sound_prefix
sounds_dir
conf_dir
log_dir
run_dir
db_dir
mod_dir
htdocs_dir
script_dir
temp_dir
grammar_dir
certs_dir
storage_dir
cache_dir
core_uuid
zrtp_enabled
nat_public_addr
nat_private_addr
nat_type
全局变量的引用方式: $${变量名}
,他们不是真正的变量,而是只读的变量。它们由一个FreeSWITCH配置文件(/usr/local/freeswitch/conf/vars.xml
)分配,然后在启动时替换。
修改全局变量的方式通常是通过更改 /usr/local/freeswitch/conf/vars.xml
中的变量值进行更新。
注:如果修改了vars.xml
里的预处理变量值,你必须重启FreeSWITCH才能让它生效(只是重载XML配置
而没有重启FreeSWITCH是不够的)。
2.2 通道变量
【官方】通道变量官方飞机票
通道变量用于操纵拨号计划的执行、控制呼叫进度以及为 application
提供参数选项。
相较于全局变量的区别,可以认为是在拨号方案中可更改,可扩展的变量。
通道变量的引用:${变量名}
除了常用的 默认配置,set
定义变量外,还可以使用 export
。
如果你希望在当前话务(A-leg
)和将来发起的话务(B-leg
,之后由Bridge APP
发起)中设置一个变量,你可以使用"export
" APP导入:
<action application="export" data="absolute_codec_string=PCMA,PCMU"/>
2.2.1 CDR相关
2.2.2 挂断原因相关
2.2.3 CDR相关
2.2.4 DTMF相关
2.2.5 媒体处理
2.2.6 超时相关
2.2.7 保持音乐相关
2.2.8 区域相关
2.2.9 桥接相关
2.2.1 会议相关
2.2.10 代码执行相关
2.2.11 CallerID相关
2.2.12 CalleeID相关
2.2.13 呼叫录音相关
2.2.14 编解码相关
2.2.15 IVR相关
2.2.16 SIP相关变量
2.2.17 SDP处理
2.2.18 FIFO相关变量
2.2.19 Playback 相关变量
2.2.20 Originate相关变量
2.2.21 RTP/媒体相关变量
2.2.22 RTCP 相关
2.2.23 Camp-on相关变量
2.2.24 Answer确认变量
2.2.25 语音信箱相关变量
2.2.26 【特殊直接引用型变量】
这部分变量可以在"field
"里直接引用而不用${}
语法结构。
username :呼叫发起方的用户名
dialplan :使用的拨号 方案类型,几乎总是 "XML"
caller_id_name 主叫名称
caller_id_number 主叫号码
callee_id_name 被叫名称
callee_id_number 被叫号码
network_addr :呼叫发起端的网络地址
ani: Automatic Number Identification 自动号码识别(实际来电号码)
aniii Automatic Number Identification 2自动号码识别(实际来电号码第2版)
rdnis Redirected Dialed Number Information Service,重定向拨号号码信息服务,呼叫转接前的目的号码
destination_number
source:呼叫使用的模块,比如SIP呼叫的mod_sofia模块
uuid:呼叫的通用唯一标识符
context:拨号方案的context
2.3 区别
引用格式:
全局变量引用使用 KaTeX parse error: Can't use function '$' in math mode at position 16: {变量名},通道变量引用使用 $̲{变量名},特殊可以不适用 $… 因为是全局变量,值不变,初始化获取一次值就不再去获取该值了。(其实有编程经验的小伙伴,应该能理解,涉及到了栈堆的问题)
是否可变:
Freeswitch启动后,全局变量不可变,通道变量可变。