有人可以指点我,方向,示例代码或在线资源来完成以下任务:
要求: 我想写一个简单的IVR菜单选项,它将运行一个脚本(Bash或Python)。例如,给Asterisk机器打电话并请求在另一个Linux机器上重启服务。 “其他Linux盒子”的详细信息将硬编码到IVR菜单选项,不需要作为IVR交互的一部分提供 - 只需在Y盒上重新启动服务X.我很担心并且不确定如何通过密码(即使它在版本中是硬编码的)。
背景 我是Asterisk新手并从AsteriskNow发行版中安装它,我仍在学习该产品。基本的PBX功能正在运行,并通过FreePBX进行管理。 Asterisk不是我们开发工作的主要焦点,而是工具箱中的工具。我们主要做.NET工作,但有Unix技能。
如果可能的话,我不想花太多时间学习Asterisk的集成细节来完成工作......
答案 0 :(得分:4)
Asterisk并不总是在等待用户输入。仅在Background,WaitExten,Read命令期间。如果您正在使用Playback(),Asterisk会在播放音频文件时忽略任何DTMF。
您可以使用Read()替换Playback,但必须将读取超时设置为非常低的值,或者在使用Read()播放的每个音频文件后都会出现静音。如果您使用Read(),那么您必须检查用户输入的值以检查退出,如下所示......
而不是
exten => x,n,Playback(yourfile)
exten => x,n,somethingelse...
你需要
exten => x,n,Read(Exit,yourfile,1)
exten => x,n,GotoIf($["${Exit}" = "0"]?0,1)
exten => x,n,somethingelse...
答案 1 :(得分:2)
Asterisk AGI页面包含许多编程语言中应用程序的链接。 如果你主要使用.NET,那么nasterisk或更早的MONO-TONE可能会有所帮助。
答案 2 :(得分:2)
您是否会为此设置Asterisk,或者它是否会进行PBX,IVR等其他工作?
如果您正在使用Asterisk进行其他操作,请设置一个隐藏的分机(一个未在IVR菜单上公布的分机),您可以在连接后拨打该分机;在此扩展程序中,您可以检查来电显示并将其与您的号码进行比较,以便只有您可以执行脚本(您可以通过询问PIN码来增加更多安全性,这样如果找不到,您可以更轻松地休息你的手机)。
这样的事情:
exten => 9999,1,GotoIf($["${CALLERID(num)}" = "yournumber"]?4)
exten => 9999,2,Playback(sorry)
exten => 9999,3,Hangup
exten => 9999,4,Read(Pin,please-enter-pin,4)
exten => 9999,5,AGI(your-script)
在你的脚本中检查Pin变量,如果它有效,则执行,否则退出而不做任何事情。通过这种方式,您无需对拨号方案内的引脚进行硬编码,而其他人可能会看到...如果它是受信任的机器,那么您可以在拨号方案中验证Pin:
exten => 9999,5,GotoIf($["Pin" != "1234"]?2)
exten => 9999,6,AGI(your-script)