FreePBX外呼Caller ID前置1配置失效问题求助
问题分析与修复方案
你的代码没生效主要有两个核心问题,加上操作细节的遗漏,下面逐一解决:
1. 原代码的错误点
- 语法错误:GotoIf条件中的引号不匹配,且判断格式不符合Asterisk规则。原代码里的
$["${LEN(${CALLERID(num)})} = 10]多了一个开头双引号且未闭合,Asterisk的数值判断不需要额外包裹引号。 - 上下文不匹配:FreePBX中,针对外呼中继的预拨号处理钩子,正确的上下文是
macro-dialout-trunk-predial-hook,而非你使用的macro-dialout-one-predial-hook,这会导致代码根本不会被触发。
2. 修正后的配置代码
替换/etc/asterisk/extensions_custom.conf中的原有代码为以下内容:
[macro-dialout-trunk-predial-hook] exten => s,1,NoOp(Entering custom predial hook to adjust Caller ID length) ; 判断Caller ID是否为10位纯数字 exten => s,n,GotoIf($[${LEN(${CALLERID(num)})} = 10]?add_prefix) exten => s,n,MacroExit ; 给10位Caller ID添加前缀1 exten => s,n(add_prefix),Set(CALLERID(num)=1${CALLERID(num)}) exten => s,n,NoOp(Updated Caller ID: ${CALLERID(num)}) exten => s,n,MacroExit
3. 生效步骤
- 保存
extensions_custom.conf后,登录FreePBX后台,进入Admin > Asterisk CLI,执行命令:
或者直接在Asterisk CLI中输入dialplan reloadcore reload,确保拨号计划重新加载。 - 开启调试验证:在Asterisk CLI中执行
core set verbose 5,然后发起外呼,观察日志里是否出现Updated Caller ID: xxxxxxxxxx的输出,确认修改生效。
额外注意
- 确保旧交换机发送的Caller ID是纯10位数字,没有空格、括号或其他符号,否则长度判断会失效。
- 如果服务商要求的前缀不是1(比如特定地区号),直接修改
Set(CALLERID(num)=1${CALLERID(num)})中的1即可。
内容的提问来源于stack exchange,提问作者midderchaw
相关产品推荐
相关产品推荐

