2012-05-02 61 views
2

在Linux上運行的命令行Perl應用程序中我需要撥打電話(SIP),播放音頻文件,然後等待並從被叫方接收DTMF輸入。如何從Perl進行SIP調用並接收DTMF輸入?

我無法運行任何GUI應用程序,因此大多數Linux SIP客戶端都無法競爭。

目前我使用pjsua,不幸的是這有一些問題我想避免。

達到此目的的最佳方法是什麼?

是否有任何完全可編寫腳本的Linux命令行SIP客戶端? 有沒有可以使用的任何理智的圖書館?

+0

您是否試過sipP?可能這會適合你。 http://sipp.sourceforge.net/doc/reference.html – rpg

回答

1

我強烈推薦FreeSWITCH。它實際上帶有一個Perl API,所以你可以從你的Perl程序和FreeSWITCH服務器通話,發起呼叫,發送/接收DTMF,播放音頻文件等。

還有一種方法可以讓FreeSWITCH調用你的Perl例如,當電話到達時的程序。

1

儘量不要在Perl中實現自己的SIP客戶端。這將是一個PITA並浪費時間,因爲那裏有即時可用的實現。

例如,您可以使用Asterisk。憑藉其腳本功能,它非常靈活。它有一個很棒的社區,並且有很好的文檔記錄 - 你可以在網上找到很多例子。

與Asterisk相媲美的其他解決方案是YateFreeSwitch

在星號,你會基本上是:

  1. 通過在後臺打印目錄放置call file開始呼叫。
  2. 連接到一個特殊的「延伸」新的呼出(這是一個腳本塊,基本):

例的撥號方案腳本:

[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 
+0

我既不喜歡Asterisk,也不喜歡使用PBX作爲SIP客戶端。不過,我必須承認,這可能是我的問題的最佳解決方案。謝謝。 – tex

+0

@tex不想說服你,星號是好的..只是想提一下,星號實際上不是PBX。它是一個框架。它經常用作PBX。就像Apache不是一個網上商店,但通常用於服務一個。 – Kaii

1

大約一年前,我看過使用可用的CPAN模塊實現一個類似於此的SIP客戶端。

但最終我決定使用SIPp。它並不完全直觀(我花了很多時間在Wireshark中調試呼叫流程),但最終它做了我需要做的所有事情以及更多。

相關問題