如何获取Dinstar GSM/SIP网关外呼时的主叫号码
以下是几种可行的方案,根据你的场景选择:
捕获FreeSWITCH通道变量
Dinstar网关在呼叫建立后,通常会将实际使用的SIM卡号通过SIP头传递给FreeSWITCH,并映射为通道变量。你可以在拨号计划中添加日志动作,或者通过ESL脚本监听呼叫事件来获取这个变量。常见的变量名可能是variable_gsm_sim_number或variable_sip_x_dinstar_sim,具体可以通过show channels命令查看通道的所有变量。示例拨号计划配置:<extension name="dinstar_call"> <condition field="destination_number" expression="^(\d+)$"> <action application="bridge" data="sofia/gateway/dinstar/$1"/> <action application="log" data="NOTICE Call to $1 used SIM: ${variable_gsm_sim_number}"/> </condition> </extension>开启Dinstar网关的详细CDR
登录Dinstar网关后台,找到CDR配置选项,开启"详细CDR"功能。多数Dinstar型号会在CDR中包含SIM卡号、通道号等字段,你可以将CDR导出到本地文件或推送至FreeSWITCH的CDR系统,这样每通呼叫的SIM号就能和通话记录一一对应。手动绑定网关通道与SIM卡
如果可以放弃自动选空闲通道的功能,你可以直接指定Dinstar网关的具体通道发起呼叫(通道号对应SIM卡槽位,比如dinstar/1对应第1张SIM),这样发起呼叫时就能明确知道使用的SIM卡号。示例originate命令:originate sofia/gateway/dinstar/5/138xxxxxxxxx &park若需要保留自动选空闲的能力,可以自己写一个简单的脚本:先通过Dinstar API查询所有空闲通道,再选择对应通道发起呼叫,同时记录该通道对应的SIM号。
通过Dinstar API查询通道-SIM映射
Dinstar网关提供HTTP/SNMP API接口,可以查询每个通道绑定的SIM卡号。你可以预先调用API获取通道与SIM的映射表并存储,当FreeSWITCH发起呼叫后,通过通道变量variable_sofia_gateway_channel获取实际使用的网关通道号,再去映射表中匹配对应的SIM卡号。
内容的提问来源于stack exchange,提问作者Sharath

