2

Linuxで実行されているコマンドラインPerlアプリケーションで、電話(SIP)を発信し、オーディオファイルを再生してから、呼び出し先からDTMF入力を待って受信する必要があります。

GUIアプリケーションを実行できないため、ほとんどのLinuxSIPクライアントは競合他社から外れています。

現在、pjsuaを使用していますが、残念ながら、これには避けたい問題がいくつかあります。

これを達成するための最良の方法は何ですか?

Linux用の完全にスクリプト可能なコマンドラインSIPクライアントはありますか?使用できる健全なライブラリはありますか?

4

3 に答える 3

1

Perl で独自の SIP クライアントを実装しないようにしてください。すぐに使用できる実装があるため、これは PITA であり時間の無駄です。

たとえば、これにはアスタリスクを使用できます。スクリプト機能により、非常に柔軟です。優れたコミュニティがあり、十分に文書化されています。Web で多くの例を見つけることができます。

Asterisk に匹敵する他のソリューションはYateFreeSwitchです。

アスタリスクでは、基本的に次のことを行います。

  1. スプール ディレクトリに呼び出しファイルを配置して、呼び出しを開始します。
  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 をアスタリスクで完全に実装することもできます。これは、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-02T07:25:43.597 に答える
1

約 1 年前、利用可能な CPAN モジュールを使用して、このようなものに SIP クライアントを実装することを検討しました。

しかし、最終的にはSIPpを使用することにしました。完全に直感的というわけではありません (Wireshark でコールフローのデバッグに多くの時間を費やしました) が、最終的には、必要なすべてのことを実行できました。

于 2012-05-02T08:12:57.467 に答える