Asterisk 星号-在.call文件中播放多个声音文件的最佳实践

Asterisk 星号-在.call文件中播放多个声音文件的最佳实践,asterisk,Asterisk,在.call文件中播放多个声音文件(.wav)时遇到问题。 我在变量中传递了很多声音文件(SetVar:sound=custom/1_Messages0201&custom/20c&…) 问题是字符串大小。当大小小于240个字符时,所有声音文件都能正确播放。第240个字符之后的所有文件都将被修剪,并出现错误 pbx_spool.c: Syntax error at line 10 of /var/spool/asterisk/outgoing/333.call 我正在阅读拨号串长度的限制 注意

在.call文件中播放多个声音文件(.wav)时遇到问题。 我在变量中传递了很多声音文件(SetVar:sound=custom/1_Messages0201&custom/20c&…) 问题是字符串大小。当大小小于240个字符时,所有声音文件都能正确播放。第240个字符之后的所有文件都将被修剪,并出现错误

pbx_spool.c: Syntax error at line 10 of /var/spool/asterisk/outgoing/333.call
我正在阅读拨号串长度的限制

注意:在星号1.2之前(包括星号1.2),拨号字符串的长度不能超过240个字符(超过的字符将被截断)。星号1.4中已删除此限制,除非您在编译选项中设置了低内存

有没有办法消除这个限制,或者增加拨号串的大小。 也许有人能给我推荐其他更好的主意

星号版本:

Asterisk 11.2.1 built by root @ ip-XX-XXX-XXX-XXX on a x86_64 running Linux
拨号计划:

exten =>    123,1,AGI(monitor.php,outgoing,Outgoing_UNLIMITED,${CALLERID(num)},${EXTEN},Set(CALLERID (num)=XXXXXXXXX))
exten => 123,1,Dial(SIP/6845987568/${EXTEN:0},30,T)
exten => 123,2,Set(CDR(userfield)=${NumberDialed})
exten => 123,3,Playback(${Sound})
调用文件:

Channel: SIP/XXXXX/XXXXXX
CallerID: XXXXXXX
MaxRetries: 2
RetryTime: 15
Context: XXXXXX
Extension: 123
Priority: 1
Account: XXXXXX
SetVar:    Sound=custom/1_Messages0201&custom/20c&custom/i&custom/1om&custom/March&custom/2c&custom/hiliadi&custom/i&custom/13of&custom/godina&custom/1_Messages0202&custom/3c&custom/3c&custom/3c&custom/3c&custom/3c&custom/3c&custom/3c&custom/3c&custom/1_Messages0203&custom/200c&custom/50c&custom/i&custom/6c&custom/leva&custom/i&custom/70c&custom/i&custom/8c&custom/stotinki&custom/1_Messages0204
SetVar: NumberDialed=XXXXXXXX

呼叫文件火灾后,您的拨号计划中也会出现同样的问题(它也有限制)。播放应用程序不是为播放大量不同的文件而设计的。如果你需要这样做,你必须按计划去做

您可以这样发送:

Setvar: file_max=2
Setvar: file1=custom/1_message
Setvar: file2=custom/2_message
exten => 123,3,Set(i=0);
exten => 123,n(loop),Set(i=$[ ${i} + 1 ])
exten => 123,n,GotoIF($[ $i > ${file_max} ]?exit)
exten => 123,n,Playback(${file${i}})
exten => 123,n,Goto(loop)
exten => 123,n(exit),Noop(end)
之后,使用星号拨号计划逐个播放文件。例如:

Setvar: file_max=2
Setvar: file1=custom/1_message
Setvar: file2=custom/2_message
exten => 123,3,Set(i=0);
exten => 123,n(loop),Set(i=$[ ${i} + 1 ])
exten => 123,n,GotoIF($[ $i > ${file_max} ]?exit)
exten => 123,n,Playback(${file${i}})
exten => 123,n,Goto(loop)
exten => 123,n(exit),Noop(end)

注意,此任务还存在许多其他问题,我建议您检查开源拨号程序代码,如vicidial或hire expert。

我解决此问题的方法是设置一个“活动”调用变量,然后在数据库中定义各种“活动”。然后,我使用拨号计划中的DB查找来获取声音文件列表。我让我的DBGet Ruby脚本返回两个值;“更多文件”标志和最多十个声音文件的列表。只要“morefiles”标志为true,我就循环DBGet并继续向客户播放文件集


它就像一个符咒。并使通话文件更易于阅读。

谢谢您的回答。我们计划使用大量声音文件执行数百个调用文件。我想,连接到DB可能会延迟.call文件的执行,所以请在PBX上保留DB的本地副本。这几乎是一个即时查找。现代多核PBX服务器的敌人是转码呼叫,而不是本地主机网络IO。