You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FreePBX无法呼叫手机,Asterisk提示纯数字主机名(102)拒绝连接

解决FreePBX中IP电话呼叫手机失败的问题

让我们一步步拆解你的问题,从错误日志到配置文件逐一排查:

核心错误:通道格式解析失败

第一个警告日志是问题的关键:

[2019-06-19 14:08:39] WARNING[8744]: chan_sip.c:6274 create_addr: Purely numeric hostname (102), and not a peer--rejecting!

Asterisk在解析SIP/102/myphonenumber这个通道时完全误解了你的意图——它把102当成了要呼叫的主机名/IP地址,但纯数字的“主机名”既不是合法域名,也不是你配置好的SIP Peer,所以直接拒绝了请求。这是因为你写错了test.call里的Channel字段格式。

配置文件的错误修正

1. 修复test.call的格式问题

你的呼叫文件格式完全错误,正确的写法应该是:

Channel: SIP/102
MaxRetries: 2
RetryTime: 30
WaitTime: 15
Context: cocugunuzukarsilayin
Extension: <你的实际手机号>  # 替换成你要呼叫的真实手机号
Priority: 1
  • Channel字段只需要指定分机:SIP/102,不需要追加目标号码
  • Priority必须从1开始,对应extensions.conf里分机的起始优先级
  • Extension要填写你实际要呼叫的目标号码(你的手机)

2. 调整extensions.conf的逻辑

当前的extensions.conf上下文只是接听后播放声音就挂断,没有触发呼叫手机的逻辑。如果你需要分机102接听后自动呼叫你的手机并播放声音,需要添加Dial指令(前提是你已经配置好能呼叫公网的外线Trunk):

[cocugunuzukarsilayin]
exten => <你的实际手机号>,1,Answer()
exten => <你的实际手机号>,n,Wait(1)
exten => <你的实际手机号>,n,Playback(custom/sound2)
exten => <你的实际手机号>,n,Dial(SIP/<你的外线Trunk名称>/<你的实际手机号>)
exten => <你的实际手机号>,n,Hangup()

注意:<你的外线Trunk名称>需要替换成你在FreePBX中配置的出局Trunk的名称,没有正确的外线配置,Asterisk无法把呼叫转到公网手机。

3. 修复文件权限问题

最后一个错误日志:

[2019-06-19 14:08:39] WARNING[8744]: pbx_spool.c:350 safe_append: Unable to set utime on /var/spool/asterisk/outgoing/test.call: Operation not permitted

这是呼叫文件所在目录的权限不足,执行以下命令修复:

chown -R asterisk:asterisk /var/spool/asterisk/outgoing
chmod -R 755 /var/spool/asterisk/outgoing

总结问题根源

  1. test.callChannel字段格式错误,导致Asterisk误将分机号解析为主机名
  2. 呼叫文件的Priority设置不符合Asterisk的优先级规则(必须从1开始)
  3. extensions.conf缺少呼叫手机的核心Dial指令,且依赖正确配置的外线Trunk
  4. 呼叫文件目录的权限配置不正确,导致Asterisk无法正常处理文件

内容的提问来源于stack exchange,提问作者fbdev1907

火山引擎 最新活动