Asterisk 星号中的自定义IVR操作

Asterisk 星号中的自定义IVR操作,asterisk,telephony,ivr,pbx,Asterisk,Telephony,Ivr,Pbx,你能告诉我一个方向、示例代码或在线资源来完成以下任务吗 要求: 我想编写一个简单的IVR菜单选项,它将运行一个脚本(Bash或Python)。例如,打电话给Asterisk机器,请求在另一个Linux机器上重新启动服务。“其他Linux框”的详细信息将硬编码到IVR菜单选项中,不需要作为IVR交互的一部分提供-只需在框Y上重新启动服务X。我不太担心,也不确定如何使用密码保护它(即使它是硬编码版本) 背景: 我是一个星号新手,安装它从星号知道发行版,我仍然在学习该产品。基本的PBX功能正在运行,并

你能告诉我一个方向、示例代码或在线资源来完成以下任务吗

要求: 我想编写一个简单的IVR菜单选项,它将运行一个脚本(Bash或Python)。例如,打电话给Asterisk机器,请求在另一个Linux机器上重新启动服务。“其他Linux框”的详细信息将硬编码到IVR菜单选项中,不需要作为IVR交互的一部分提供-只需在框Y上重新启动服务X。我不太担心,也不确定如何使用密码保护它(即使它是硬编码版本)

背景: 我是一个星号新手,安装它从星号知道发行版,我仍然在学习该产品。基本的PBX功能正在运行,并通过FreePBX进行管理。星号不是我们开发工作的主要焦点,而是工具箱中的一个工具。我们主要从事.NET工作,但拥有Unix技能

如果可能的话,我不想花几天时间学习Asterisk的集成细节来完成这项工作。

该页面包含许多编程语言的应用程序链接。
如果你主要使用.NET,可能会有帮助

你会为此设置星号,还是它/它会做其他事情,如PBX、IVR等

如果你正在用星号做其他事情,那么设置一个隐藏的分机(一个没有在IVR菜单上公布的分机),你可以在连接后拨打该分机;在这个扩展中,您可以检查呼叫者id并将其与您的号码进行比较,这样只有您可以执行脚本(您可以通过请求PIN号码来增加一些安全性,这样,如果找不到您的手机,您可以更轻松地休息)

大概是这样的:

extn=>9999,1,GotoIf($[“${CALLERID(num)}”=“yournumber”]?4)
扩展=>9999,2,播放(抱歉)
扩展=>9999,3,挂断
扩展=>9999,4,读取(Pin,请输入Pin,4)
扩展=>9999,5,AGI(您的脚本)

在脚本中,检查Pin变量,如果它有效,则执行,否则不执行任何操作就退出。这样你就不必硬编码拨号计划中的pin码,其他人可能会看到。。。如果它是受信任的机器,则可以在拨号计划中验证Pin:

exten=>9999,5,GotoIf($[“Pin”!=“1234”]?2)

扩展=>9999,6,AGI(您的脚本)

星号并不总是等待用户输入。仅在后台,WaitExten,Read命令。如果您使用的是Playback(),Asterisk将在播放音频文件时忽略任何DTMF

您可以使用Read()替换播放,但必须将读取超时设置为非常低的值,否则在使用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...

谢谢你的回答。我今天才看到,但仍然适用。这是一个很好且简单的解决方案。
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...