在Linux上运行的命令行Perl应用程序中,我需要拨打电话(SIP),播放音频文件,然后等待并接收来自被叫方的DTMF输入。
我无法运行任何GUI应用程序,因此大多数Linux SIP客户端都不在竞争中。
目前我正在使用pjsua,不幸的是,这有一些我想避免的问题。
实现这一目标的最佳方式是什么?
是否有适用于Linux的完全可编写脚本的命令行SIP客户端? 有没有可以使用的理智的图书馆?
答案 0 :(得分:1)
尽量不要在Perl中实现自己的SIP客户端。这将是一个PITA并浪费时间,因为那里有现成的实现。
例如,您可以使用Asterisk。凭借其脚本功能,它非常灵活。它有一个很棒的社区,并且有很好的文档记录 - 你可以在网上找到很多例子。
与Asterisk相比的其他解决方案是Yate和FreeSwitch。
在Asterisk中,你基本上可以:
示例拨号脚本:
[specialstuff]
exten => s,1,Wait(1) ; wait a second before playback
exten => s,2,Playback(yourfile.wav) ; play your file
exten => s,3,AGI(yourscript.pl) ; run your script with AGI interface
; in "yourscript.pl" you can wait for / receive DTMF and react on it
或者,您可以在Asterisk中完全实现DTMF。这称为IVR(交互式语音响应)。网上有很多例子。
[specialstuff]
exten => s,1,Wait(1) ; wait a second before playback
exten => s,2,Playback(yourfile.wav) ; play your file
exten => s,3,WaitExten(10) ; wait 10 seconds for DTMF input
exten => 1,1,System(/your/script.pl one) ; callee pressed DTMF 1
exten => 1,2,Playback(thanks) ; give feedback
exten => 2,1,System(/your/script.pl two) ; callee pressed DTMF 2
exten => 2,2,Playback(goodbye) ; give feedback
exten => 3,1,System(/your/script.pl three) ; callee pressed DTMF 3
exten => 3,2,Playback(something) ; give feedback
答案 1 :(得分:1)
大约一年前,我看过使用可用的CPAN模块实现这样的SIP客户端。
但最后我决定使用SIPp。它不是完全直观的(我花了很多时间在Wireshark中调试调用流程)但最终它完成了我需要做的所有事情以及更多。
答案 2 :(得分:1)
我强烈推荐FreeSWITCH。它实际上带有Perl API,因此您可以从Perl程序与FreeSWITCH服务器通信并发起呼叫,发送/接收DTMF,播放音频文件等。
例如,还有一种方法可以让FreeSWITCH在拨打电话时拨打您的Perl程序。