使用Asterisk设置IVR

10

我需要为朋友的公司设置一个简单的IVR系统,让来电者通过按电话键在菜单中导航。 它有点像巴士时间表。

要查询今天的时间表,请按“1”,要查询明天的时间表,请按“2”等。

这仅是一个信息系统,即没有导航路线会连接到真实的人,而只播放音频消息。

现在,我以前从未设置过这样的系统,并在谷歌上进行了一些搜索。看起来我可以使用Asterisk实现这一目标。

  • 硬件方面还需要什么?
  • 仅具备德国供应商的简单Linux服务器和VOIP账户是否足够?
  • 一个VPS能否完成任务?
  • 如何处理多个并发的呼入电话?
  • Asterisk是否可以处理这些?

有编程方面的角度吗? - Kev
1
我还不清楚......目前只涉及技术相关的内容。但人们似乎很愿意帮助并给出答案... - Sebastian
11个回答

17

完全有可能。

你需要知道以下内容:

  1. Asterisk在使用H323时存在一些问题。如果你的供应商提供SIP,请使用SIP。

  2. 你可以在你的extensions.conf中建立一个完整的IVR拨号计划,但对于复杂的任务,最好使用AGI。这些是实现你的IVR逻辑的Perl或Python或其他语言脚本。每个AGI会话都涵盖一个子进程,如果你期望频繁连接,请使用FastAGI和网络守护程序。

  3. 多个并发呼叫不是问题,我在普通PC上安装的Asterisk处理数百个同时呼叫。

  4. 唯一可能真正影响性能的是声音转换和音调检测。

    为了提高性能,你应该:

    1. 坚持使用一个编解码器(我使用µLaw),强制所有SIP连接使用该编解码器,并使用sox -t ul将所有声音文件预先转换为该编解码器。一旦完成,所有Asterisk操作都相当于从磁盘读取文件字节并带有基本包装的发送到网络。没有任何数学运算,只有简单的读取-包装-发送操作。

    2. 要求你的供应商在他们的一侧检测音调并使用RFC 2833将它们通过out of band发送给你。音调检测是一个相当消耗CPU的操作,让他们自己做吧。

    我个人在Fedora 10 X86_64下使用2.66 MHz赛扬IV和2048 MB RAM运行Asterisk。同时150个连接工作得很好,没有延迟。

    总流量约为每个连接9.6 KByte / sec。对于现代VPS来说,完全没有问题。


你认为可以使用安装了Asterisk的常规VPS来实现IVR吗?还是我应该购买专用服务器? - Sebastian
你能为这样的系统推荐一些硬件(开发板)吗? - sepehr
@sepehr:老兄,已经七年了!我认为几乎任何能运行Linux并具有网络端口的设备都可以胜任Asterisk处理的任务,因为Asterisk所处理的任务对CPU或IO的要求并不高。 - Quassnoi
@Quassnoi,现在我确定你至少有七年的经验 :) - sepehr

2

构建IVR应用程序的最佳方法是使用由W3C.org设计的VoiceXML(http://www.w3.org/TR/voicexml21/)。Asterisk没有VoiceXML浏览器,但有一些公司为Asterisk提供了该浏览器,例如SoftSyl Technologies(http://www.softsyl.com)。

像思科和Avaya这样的公司也提供VoiceXML浏览器,但它们不适用于Asterisk。


2
星号是很好的。对于几行代码,使用简单的P3或更高版本就足够了。不要虚拟PBX;星号依赖于相当精确的计时。
{{link1:FreePBX}}使设置IVR变得非常容易-具有不错的基于Web的前端,并支持一些很酷的星号工具。
编辑:FreePBX不是星号-它是一个漂亮的界面,可以为您生成配置。如果您想要一个简单的点和拍摄解决方案,则Trixbox默认包含它。
如果您的VoIP帐户支持多个传入线路,则星号将正常使用它们。您还需要足够的互联网带宽和良好的QoS。对于商业系统上的多条线路,我会坚持使用专用连接,以便用户访问网络时不会出现中断。

你认为可以使用安装了Asterisk的常规VPS来实现IVR吗?还是应该选择专用服务器? - Sebastian
如果您在某个地方已经安装了Asterisk,请务必使用它。少量线路的IVR几乎不需要太多资源。如果您要处理很多线路(20+),则考虑使用专用硬件。 - Adam Hawes
超链接指向Free-B-P-X,海报可能需要修复。 - Kinjal Dixit

2
如果您是完全新手,我建议您学习FreeSWITCH而不是Asterisk。它的结构更好,还带有一些预先构建的示例,包括IVR菜单,而且IVR语法非常简单: http://wiki.freeswitch.org/wiki/IVR_Menu 我在Xen虚拟服务器上运行了一个FreeSWITCH实例,并且可以同时处理多个呼叫,表现非常出色。

顺便提一下,在这里底部有我所实现的详细描述:http://txlab.wordpress.com/tag/dvop-net/ - Stanislav Sinyagin

1

Asterisk中的IVR设计并不难,但是在第一次启动Asterisk服务器时需要克服一些“学习曲线”。

正如其他人所说,通话质量至关重要。为您的IVR提示和公告制作专业级别的录音。确保您使用64k编码,例如uLaw和aLaw;GSM(手机)可能在带宽上便宜,但它会破坏客户对质量的期望。

我强烈建议您将IVR放入其自己的拨号计划上下文中,然后将呼叫转接到该上下文中。这使得管理菜单选项等事项更加容易。对于每个子选项集,请使用不同的拨号计划上下文。

尽量保持您的菜单“浅显易懂”。如果需要超过三个菜单选项才能获取客户所需的信息,他们很可能会挂断电话或只需按“0”键与人类交谈。这就失去了IVR的意义。

如果您要在数据库查找、账户认证或类似的方面做一些很酷的事情,我建议使用“AGI”——Asterisk网关接口应用程序。我个人最喜欢的是 "Adhearsion",它与Ruby/Rails在数据库/网络方面非常搭配。
如果您需要帮助或更多信息,请告诉我。

1

如果您需要更复杂的IVR系统,可以尝试Astive Toolkit,特别是当您需要使用数据库或Web服务迭代时。


0

您可以在拨号计划中完成此操作...

[menu-main]
exten => s,1,Noop()
exten => s,n(msg),Background(ForTodayPress1TomorrPress2)
exten => s,1,Goto(menu-today)
exten => s,2,Goto(menu-tomorrow)
exten => i,1,Playback(invalid)
exten => i,n,Goto(msg)
exten => t,1,Goto(msg)

[menu-today]
etc...

[menu-tomorrow]
etc...

或者,正如其他人建议的那样,您可以使用任何能够写入stdin并从stdout读取的语言来完成。phpagi实现是我特别喜欢的一种。它可能适用于此示例,例如PHP在单独的框中运行,因此不会对PBX产生任何负载影响。

[menu-main]
exten => s,1,Noop()
exten => s,n(msg),Background(ForTodayPress1TomorrPress2)
exten => s,1,Goto(menu-today,s,1)
exten => s,2,Goto(menu-tomorrow,s,1)
exten => i,1,Playback(invalid)
exten => i,n,Goto(msg)
exten => t,1,Goto(msg)

[menu-today]
exten => s,1,Noop()
exten => s,n,agi(http://myapache/agi/readschedule.php)
exten => s,n,Hangup()

0

我以前曾经使用过IVR,但主要是与大型系统一起使用,从未使用过Asterisk。不过,我快速浏览了他们的网站(http://www.asterisk.org/),看起来非常信息丰富,你有去看过吗?


是的,我已经做过了。但我想听听已经完成我想要做的事情并能告诉我可能出现的问题或推荐设置的人的建议。 - Sebastian

0

这与编程无关,但是……

看看 trixbox.org,它支持从 Cisco 到 snom 电话的配置。它是 Asterisk/Freepbx 模块,所有内容都在漂亮的用户界面下!

我在澳大利亚有一个供应商,将他们添加为 GSM 中继,花了 3 小时设置 4 台电话。支持 IVR。

唯一可能存在的问题是录音的语音质量。


0

很简单。我正在使用sipgate.de作为我的asterisk提供商。 您需要设置拨号计划。

这也很简单。看一下这里。 您还应该查看extensions.conf。 里面有一些示例。 还有一个适合您问题的示例。 要连接到sipgate,请查看他们的知识库。 有一些关于asterisk配置的示例。

sipgate是免费的,除非您进行外拨电话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接