You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,执行命令:
    dialplan reload
    
    或者直接在Asterisk CLI中输入core 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:07:14