尽量不要在 Perl 中实现您自己的 SIP 客户端。这将是一个 PITA 和浪费时间,因为那里有现成的实现。
例如,您可以为此使用Asterisk。凭借其脚本功能,它非常灵活。它有一个很棒的社区并且有很好的文档记录——你可以在网上找到很多例子。
与 Asterisk 相当的其他解决方案是 Yate 和 FreeSwitch。
在 Asterisk 中,你基本上会:
- 通过在假脱机目录中放置call file 来启动呼叫。
- 将新的拨出呼叫连接到一个特殊的“扩展”(基本上是一个脚本块):
拨号方案脚本示例:
[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