【问题标题】:How to make SIP calls from Perl and receive DTMF input?如何从 Perl 进行 SIP 呼叫并接收 DTMF 输入?
【发布时间】:2012-05-02 06:04:11
【问题描述】:

在 Linux 上运行的命令行 Perl 应用程序中,我需要拨打电话 (SIP),播放音频文件,然后等待并接收来自被叫方的 DTMF 输入。

我无法运行任何 GUI 应用程序,因此大多数 Linux SIP 客户端都被淘汰出局。

目前我正在使用 pjsua,不幸的是,这有一些我想避免的问题。

实现这一目标的最佳方法是什么?

是否有任何适用于 Linux 的完全可编写脚本的命令行 SIP 客户端? 有没有可以使用的健全的库?

【问题讨论】:

标签: linux perl monitoring sip


【解决方案1】:

我强烈推荐 FreeSWITCH。它实际上带有一个 Perl API,因此您可以从您的 Perl 程序与 FreeSWITCH 服务器通信并发起呼叫、发送/接收 DTMF、播放音频文件等。

例如,还有一种方法可以让 FreeSWITCH 在来电时调用您的 Perl 程序。

【讨论】:

    【解决方案2】:

    大约一年前,我曾研究过使用可用的 CPAN 模块为类似的事情实现一个 SIP 客户端。

    但最后我决定使用SIPp。它并不完全直观(我花了很多时间在 Wireshark 中调试调用流),但最终它完成了我需要做的所有事情以及更多。

    【讨论】:

      【解决方案3】:

      尽量不要在 Perl 中实现您自己的 SIP 客户端。这将是一个 PITA 和浪费时间,因为那里有现成的实现。

      例如,您可以为此使用Asterisk。凭借其脚本功能,它非常灵活。它有一个很棒的社区并且有很好的文档记录——你可以在网上找到很多例子。

      与 Asterisk 相当的其他解决方案是 YateFreeSwitch

      在 Asterisk 中,你基本上会:

      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
      

      另外,您可以在 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
      

      【讨论】:

      • 我既不喜欢 Asterisk 也不喜欢使用 PBX 作为 SIP 客户端的想法。但是我必须承认,这可能是解决我的问题的最佳方法。谢谢。
      • @tex 不想让你相信星号很好......只是想提一下星号实际上不是 PBX。它是一个框架。它通常用作 PBX。就像 Apache 不是一个网上商店,但经常被用来服务一个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      相关资源
      最近更新 更多