在运行在Linux上的命令行Perl应用程序中,我需要打个电话(SIP),播放一个音频文件,然后等待并接收来自被调用方的DTMF输入。
我不能运行任何GUI应用程序,所以大多数Linux客户端都退出了竞争。
目前我正在使用pjsua,不幸的是,这有一些我想避免的问题。
实现这一目标的最佳方法是什么?
Linux有任何完全脚本的命令行SIP客户端吗?有什么正常的图书可以用吗?
发布于 2012-06-16 20:20:13
我强烈推荐FreeSWITCH。它实际上附带了Perl,因此您可以从您的Perl程序中与FreeSWITCH服务器对话,并发起调用、发送/接收DTMF、播放音频文件等等。
例如,有一种方法可以让FreeSWITCH在接到电话时调用您的Perl程序。
发布于 2012-05-02 07:25:43
不要在Perl中实现您自己的SIP客户机。这将是一个皮塔和浪费时间,因为有现成的实现。
例如,您可以为此使用星号。它的脚本功能非常灵活。它有一个伟大的社区,并有很好的文档-你可以在网上找到许多例子。
其他类似星号的解决方案是叶特和FreeSwitch。
在星号中,您基本上可以:
示例拨号计划脚本:
[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或者,您可以完全以星号实现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发布于 2012-05-02 08:12:57
大约一年前,我看过如何使用可用的CPAN模块来实现这样的SIP客户端。
然而,最后我决定使用SIPp。这不是完全直观的(我花了很多时间调试Wireshark中的调用流),但最终它完成了我需要做的所有事情,甚至更多。
https://stackoverflow.com/questions/10408501
复制相似问题