我需要配置一个 Asterisk 盒以便能够在 X 次响铃后转到语音信箱。
exten => 1234,1,Dial(SIP/ivan, 30)
exten => 1234,2,VoiceMail(777@mb_tutorial)
exten => 1234,3,PlayBack(vm-goodbye)
exten => 1234,4,HangUp()
在我的情况下,客户端是软电话客户端。如果它没有运行或没有连接到 pbx,那么这将立即将呼叫者重定向到语音邮件。当电话(sip 客户端)不可用时,30 秒的等待时间不适用于这种情况。
我如何配置 Asterisk 尝试响铃至少 5 次(无论 SIP 客户端是否离线),然后如果仍然没有答复,则将呼叫者转到语音信箱。
谢谢
答案1
您可以创建一个上下文,extensions.conf
如果您拨打该上下文,它就会一直响铃,然后拨打您想要拨打的分机号和该上下文。这保证了它将始终运行应用Dial()
程序 30 秒,然后跳转到语音邮件。(根据需要更改 30 秒的值以获得五首铃声……铃声的持续时间可以在indications.conf
您所在国家/地区的相应部分中找到,因此您可以计算出五首铃声应该持续多长时间。)
它看起来像这样:
[noop]
exten => s,1,Wait(30)
same => n,Hangup
[your_context]
exten => 1234,1,Dial(SIP/ivan&Local/s@noop,30)
exten => 1234,2,VoiceMail(777@mb_tutorial)
exten => 1234,3,PlayBack(vm-goodbye)
exten => 1234,4,HangUp()
调用无操作context 基本不会产生任何影响,如果SIP/ivan
有,则会响铃。如果您在拨打 1234 分机时听不到铃声,您可以尝试不同的选项:
第一种可能性是,使用呼叫进度(避免应答信道,从而使呼叫者可能付费才能听铃声……但并不总是有效,这取决于 SIP 提供商):
[your_context] exten => 1234,1,Progress exten => 1234,2,Ringing exten => 1234,3,Dial(SIP/ivan&Local/s@noop,30) exten => 1234,4,VoiceMail(777@mb_tutorial) exten => 1234,5,PlayBack(vm-goodbye) exten => 1234,6,HangUp()
第二种可能性,在应答信道上生成铃声(这意味着呼叫者在等待应答时也要支付通话费用,因为电话实际上已经应答):
[your_context] exten => 1234,1,Answer exten => 1234,2,Playtones(ring) exten => 1234,3,Dial(SIP/ivan&Local/s@noop,30) exten => 1234,4,VoiceMail(777@mb_tutorial) exten => 1234,5,PlayBack(vm-goodbye) exten => 1234,6,HangUp()
如果在等待时没有听到铃声,请尝试
,r
向应用程序添加一个参数Dial
:exten => 1234,3,Dial(SIP/ivan&Local/s@noop,30,r)
答案2
第二个答案不能被视为解决方案,而且语法很久以前就改变了。
它应该是 Queue(ivan,t,,,30),而不是 Queue(ivan|t|||30)。
在这种情况下,它确实会向 SIP 对等方发出响铃,但那些是“假响铃”,呼叫已经建立,因此呼叫者必须为响铃付费。我今天将尝试第一个,但我觉得这样做的问题是,如果 Ivan 离线并在 30 秒内重新上线,他将不会再收到响铃。我希望我说的没错。
无论如何,感谢您的回答。
答案3
根据您使用 Asterisk 的方式,有多种选择。
- 使用 FreePBX 或类似界面:
设置一个响铃组并将其设置为“ringall”。然后您可以指定响铃的秒数。
- 使用手写拨号计划代码:
设置一个 ringall 队列队列配置文件
[ivan]
strategy = ringall
context = default
member => SIP/ivan
调整您的拨号计划类似于:
exten => 1234,1,Answer
exten => 1234,n,Queue(ivan,t,,,30)
exten => 1234,n,VoiceMail(777@mb_tutorial)
exten => 1234,n,PlayBack(vm-goodbye)
exten => 1234,n,HangUp()