我正在开发一个应用程序,允许用户使用他们的手机访问他们的邮箱。我开发了一个 IVR 菜单,用户将使用它来检索他们的邮件。更具体地说,我在 perl 中编写了一个 AGI 来检索邮件。问题是 AGI 执行需要很长时间。为此,我需要让我的用户在执行 agi 时听到一些在后台播放的音乐。也就是说,我需要让拨号方案中的“AGI”和“MusicOnHold”应用程序同时执行。任何线索我如何能做到这一点?
3 回答
您可以SET MUSIC ON
从您AGI
的应用程序发出,处理您的计算,然后发出SET MUSIC OFF
.
如果您希望音乐可中断,请发出以下命令:
CONTROL STREAM FILE <filename> "0123456789*#" "0" "" "" ""
第二个参数是能够打断音乐的数字列表。
最好不要混合AGI
和拨号计划命令。
AGI
可以做任何 dialplan 可以做的事情,但AGI
它是用一种成熟的编程语言实现的,因此可以让您更好地控制执行逻辑。
这可能不是您期望的答案,但是如果您打算创建一个适当的应用程序来通过电话做事,请查看除星号之外的其他解决方案。yate 和(据我所知 - 从未尝试过这个用于任何严重的事情)freeswitch 都实现了一个更加异步的接口,您可以在其中将传入呼叫连接到您想要的任何声源,而不会失去对其的控制。对于高级应用程序,它们可能是更好的选择。
Asterisk 对于简单的逻辑来说很酷,但是如果您需要在后台进行一些处理并将调用保持在某种状态下一段未定义的时间,则变得非常难以管理。
完整的执行需要很长时间还是只是启动应用程序?如果整个执行时间太长,那么您可以按照 Quassnoi 的说法,在 AGI 程序启动后立即开始播放音乐。
如果启动时间是问题,那么您可能需要使用 FastAGI 实现一些东西,以便您的应用程序始终运行并通过套接字侦听连接。在具有大量 AGI 调用的环境中,性能要好得多。