【问题标题】:Incoming calls fail Asterisk来电失败 Asterisk
【发布时间】:2014-01-02 18:00:33
【问题描述】:

我在 CentOS 6.4 x64 上配置了 Asterisk 11.7.0,并具有以下 sip.conf 配置:

[general]
register =>mynumber:mypass@xxx.xxx.xxx.xxx
registertimeout=20
context=incoming
allowoverlap=no
bindport=5060
bindaddr=192.168.0.3
srvlookup=no
subscribecontext=from-sip

; The SIP provider
[VoIPProvider]
canreinvite=no
username=mynumber
fromuser=mynumber
secret=mypass
context=incoming
type=friend
fromdomain=xxx.xxx.xxx.xxx
host=xxx.xxx.xxx.xxx
dtmfmode=rfc2833
disallow=all
allow=alaw
allow=ulaw
nat=yes
insecure=very

; ext 100
[100]
type=friend
host=dynamic
secret=MyPass123
context=internal
mailbox=100@default
callgroup=1
pickupgroup=1
dtmfmode=rfc2833
canreinvite=no

; ext 200
[200]
type=friend
host=dynamic
secret=MyPass123
context=internal
callgroup=1
pickupgroup=1
dtmfmode=rfc2833
canreinvite=no

并关注extensions.conf

[incoming]
; Ring on extension 100, 200 and the mobile phone.
exten => s,1,Answer()
exten => s,n,Dial(SIP/100&SIP/200&SIP/VoIPProvider/*320423456789,150,r,t,)

; Pass unanswered call to a mobile phone
exten => s,n,Dial(SIP/VoIPProvider/*320423456789,150,r)

; Still not answered? Pass unanswered calls to voicemail
exten => s,n,Voicemail(100,u)
exten => s,n,Hangup

[outgoing]
exten => _XXXXXXXXXXXXXXX,1,Dial(SIP/VoIPProvider/${EXTEN})
exten => _XXXXXXXXXX,1,Dial(SIP/VoIPProvider/${EXTEN})
exten => _XXXXXX,1,Dial(SIP/VoIPProvider/${EXTEN})

[internal]
exten => _XXX,1,Dial(SIP/${EXTEN})

; Calls to ext 100
exten => 100,1,Dial(SIP/100,20)
exten => 100,n,VoiceMail(100,u)
exten => 100,n,Hangup

; Calls to ext 200
exten => 200,1,Dial(SIP/100,20)
exten => 200,n,Hangup

每当我从手机拨打我的号码时,我都会收到拒绝信号。当我检查 Wireshark 日志时,我看到三个 SIP 数据包:

MySipProvider -> 我:邀请 sip:s@192.168.0.3:5060 我 -> MySipProvider:401 未经授权 MySipProvider -> 我:ACK sip:s@192.168.0.3:5060

仅此而已。会发生什么?谢谢。

【问题讨论】:

    标签: centos sip voip asterisk pbx


    【解决方案1】:

    看起来您的 Asterisk 服务器正在请求对来自您的提供商的来电进行身份验证。我猜为什么是因为 sip.conf 中“VoIPProvider”条目上的“主机”值与呼叫来源的 IP 地址相匹配。您可以通过临时注释掉“主机”值并查看来电是否有效来检查这是否是问题所在。如果是这样,您将需要对“VoIPProvider”条目进行调整,以便仅匹配拨出电话而不是拨入和拨出电话(您曾经通过设置“类型”来做到这一点,但我在路上不是最新的现在已经完成了)。

    【讨论】:

    • 我这样做了,现在来电没有问题,现在还有一个问题: -- 执行 [XXXXXXXXX@outgoing:1] Dial("SIP/XXX-00000002", "SIP/新堆栈中的 VoIPProvider/XXXXXXXXX") [Jan 4 08:17:48] WARNING[19884][C-00000003]:app_dial.c:2437 dial_exec_full:无法创建类型为“SIP”的通道(原因 20 - 用户不存在) == 此时每个人都很忙/拥塞 (1:0/0/1) -- 自动失败,通道 'SIP/XXX-00000002' 状态为 'CHANUNAVAIL' localhost*CLI> 这意味着,当我在某个地方打电话时,命令行写入此文本并通话结束...有什么建议吗?谢谢。
    【解决方案2】:

    要解决传出问题,您的内部和传出的用户上下文不包含在其中,请在 extension.conf 的 context internal 下添加以下行

    [内部] 包括=传出

    以便您的用户可以拨打 SIP 中继。 :)

    【讨论】:

      【解决方案3】:

      使用注册字符串如下: 注册 => urusername:urpassword@IPaddress/providername

      就像你的情况:

      注册 => mynumber:mypassword@X.X.X.X/VoIPProvider

      试一试,我认为这将解决问题:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多