我正在为Asterisk队列实现回调服务。 这个想法是将所有传入呼叫放在队列中。将播放一条消息,让呼叫者知道他们可以排队等待,直到座席可用,或者他们可以按"2",挂断并让座席尽快回拨他们。
我在queues.conf中为入站队列定义了一个上下文:
[qIngresoCC]
...
context=qIngresoCC-callback
...
并在扩展.conf中定义了相应的条目:
[qIngresoCC-callback]
exten = > 2,1,NoOp("El cliente ${CALLERID(all)} solicita CallBack")
same => n,AGI(add_channel_to_callback.php)
same => n,Playback(goodbye_for_the_best)
same => n,Hangup()
传入呼叫被正确发送到队列,公告被播放,但是当按"2"时,呼叫不会发送到qIngresoCC回调上下文。
DTMF 日志记录已启用,我可以看到 Asterisk 收到它,但它根本不会跳转到指定的上下文。
[Jul 4 10:45:47] DTMF[84833][C-0000014d]: channel.c:4017 __ast_read: DTMF end '2' received on SIP/axtel-rappi-0000027b, duration 0 ms
[Jul 4 10:45:47] DTMF[84833][C-0000014d]: channel.c:4076 __ast_read: DTMF end accepted without begin '2' on SIP/axtel-rappi-0000027b
[Jul 4 10:45:47] DTMF[84833][C-0000014d]: channel.c:4087 __ast_read: DTMF end passthrough '2' on SIP/axtel-rappi-0000027b
我错过了什么?
更新我忘了指定: 我正在使用从Gentoo上的源代码(由Portage)编译的Asterisk 13.14.0,支持(USE标志)caps, curl, http, iconv, odbc, pjproject, postgres, samples, srtp
。
我没有使用 freepbx 或任何其他 GUI。一切都是通过 .conf 文件手动配置的。
我对源所做的唯一调整是将channel.h
从#define AST_MAX_ACCOUNT_CODE 20
更改为#define AST_MAX_ACCOUNT_CODE 256
,以便能够使用更长的帐户代码。
按下的数字必须与上下文中的分机级别匹配:例如,如果您的 queues.conf 中有 context=queue_out,假设您的录音说"按 5 留下语音邮件(定期通知):extes.conf 将具有以下内容
[queue_out]
exten => 5,1,Voicemail(123@default)
exten => 5,n,Hangup()
顺便说一句,我遇到了同样的问题。