在Linux上運行的命令行Perl應用程序中我需要撥打電話(SIP),播放音頻文件,然後等待並從被叫方接收DTMF輸入。如何從Perl進行SIP調用並接收DTMF輸入?
我無法運行任何GUI應用程序,因此大多數Linux SIP客戶端都無法競爭。
目前我使用pjsua,不幸的是這有一些問題我想避免。
達到此目的的最佳方法是什麼?
是否有任何完全可編寫腳本的Linux命令行SIP客戶端? 有沒有可以使用的任何理智的圖書館?
在Linux上運行的命令行Perl應用程序中我需要撥打電話(SIP),播放音頻文件,然後等待並從被叫方接收DTMF輸入。如何從Perl進行SIP調用並接收DTMF輸入?
我無法運行任何GUI應用程序,因此大多數Linux SIP客戶端都無法競爭。
目前我使用pjsua,不幸的是這有一些問題我想避免。
達到此目的的最佳方法是什麼?
是否有任何完全可編寫腳本的Linux命令行SIP客戶端? 有沒有可以使用的任何理智的圖書館?
我強烈推薦FreeSWITCH。它實際上帶有一個Perl API,所以你可以從你的Perl程序和FreeSWITCH服務器通話,發起呼叫,發送/接收DTMF,播放音頻文件等。
還有一種方法可以讓FreeSWITCH調用你的Perl例如,當電話到達時的程序。
儘量不要在Perl中實現自己的SIP客戶端。這將是一個PITA並浪費時間,因爲那裏有即時可用的實現。
例如,您可以使用Asterisk。憑藉其腳本功能,它非常靈活。它有一個很棒的社區,並且有很好的文檔記錄 - 你可以在網上找到很多例子。
與Asterisk相媲美的其他解決方案是Yate和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東西在Asterisk。這稱爲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
大約一年前,我看過使用可用的CPAN模塊實現一個類似於此的SIP客戶端。
但最終我決定使用SIPp。它並不完全直觀(我花了很多時間在Wireshark中調試呼叫流程),但最終它做了我需要做的所有事情以及更多。
您是否試過sipP?可能這會適合你。 http://sipp.sourceforge.net/doc/reference.html – rpg