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

Asterisk实时SIP分机无法呼出问题排查求助

问题分析与解决方案

从你的描述和配置细节来看,问题主要集中在呼叫逻辑错误和测试方式导致的Asterisk崩溃干扰两个核心点,下面一步步拆解解决:

1. 先排除console拨号的崩溃干扰

你用console dial edwin@internal测试时,日志显示chan_oss.c找不到/dev/dsp设备,这直接导致了Asterisk崩溃。这是因为console拨号依赖系统的OSS音频设备,而当前系统没有该设备(现在主流用ALSA音频架构),这个测试方式本身就会触发异常,无法反映真实的呼叫问题。

解决方式:

  • 立刻停止用console拨号测试!改用你已经配置好的正常SIP分机(比如7001)拨打7006,同时查看Asterisk的完整日志文件(比如/var/log/asterisk/messages),这里会记录真实的呼叫失败原因,不会被console崩溃打断。
  • 如果一定要用console测试,可以安装ALSA兼容OSS的工具(如alsa-oss),或者直接在Asterisk中禁用chan_oss模块。

2. 修复Extensions表的逻辑错误(核心问题)

你的psql Extensions表中,呼叫edwin的流程顺序完全颠倒了:

当前流程:Answer → Dial → Playback → Hangup

正常的呼叫逻辑应该是先尝试拨号给目标分机,只有当拨号无人接听/失败时,才执行后续的提示音播放和挂断动作。现在你先执行Answer,相当于提前接通了主叫的呼叫,再去拨号给edwin,这会导致逻辑混乱,甚至触发异常断开。

修复步骤:
修改psql的Extensions表,调整动作优先级和内容:

  • 删除优先级1的Answer动作(完全不需要提前接听)
  • 将Dial动作设为优先级1,并且建议用分机ID7006替代nameedwin,避免Realtime配置的lookup问题
  • 调整后续动作的优先级,最终表结构应为:
"1";"internal";"edwin";1;"Dial";"SIP/7006,60"
"2";"internal";"edwin";2;"Playback";"vm-nobodyavail"
"3";"internal";"edwin";3;"Hangup";" "

修改完成后,在Asterisk CLI执行dialplan reload让配置生效。

3. 修正Realtime SIP分机的配置冲突

对比你的Realtime分机(7006)和sip.conf测试用户,发现Realtime分机里包含了一些全局配置参数,这些参数应该放在sip.conf的[general]段,而不是单个分机的配置中,会导致配置冲突:

  • 移除Realtime分机中的localnet、bindport、bindaddr字段,这些是全局设置,不需要每个分机重复配置。
  • 检查rtcachefriends yes:这个参数如果在Realtime分机中单独设置,可能导致分机缓存异常,建议移到sip.conf的[general]段,或者暂时注释掉,执行sip reload后观察分机状态。

4. 验证Realtime分机的可达性

在Asterisk CLI中执行以下命令,确认分机的注册状态:

sip show peers

查看edwin(或7006)的状态是否为OK,IP地址是否正确显示为192.168.123.122,端口是否为63806。如果状态异常:

  • 执行sip reload刷新Realtime配置
  • 检查分机端的SIP客户端是否正常注册,确认没有防火墙阻止了63806端口的流量

5. 最终测试

完成以上所有步骤后,用7001拨打7006,同时查看/var/log/asterisk/messages日志,如果还有错误,截取相关日志片段可以进一步排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:09:24