代码之家  ›  专栏  ›  技术社区  ›  Philip Fourie

星号中的自定义IVR操作

  •  2
  • Philip Fourie  · 技术社区  · 16 年前

    你能不能请人向我指出一个方向、示例代码或在线资源来完成以下任务:

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

    背景: 我是一个星号新手,在Asterisnow发行版上安装了它,现在我还在学习这个产品。基本的PBX功能正在工作,并通过freepbx进行管理。星号不是我们开发工作的主要焦点,而是工具箱中的一个工具。我们主要做.NET工作,但有UNIX技能。

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

    3 回复  |  直到 8 年前
        1
  •  2
  •   gimel    16 年前

    这个 Asterisk AGI 该页包含许多编程语言中应用程序的链接。 如果你主要做.NET,也许 nasterisk 或老年人 MONO-TONE 会有帮助的。

        2
  •  4
  •   singhakash    8 年前

    星号并不总是等待用户输入。只有在后台,waitextn,read命令期间。如果使用playback(),星号在播放音频文件时会忽略任何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...
    
        3
  •  2
  •   Chochos    16 年前

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

    如果你正在做其他带有星号的事情,那么设置一个隐藏的扩展名(一个在IVR菜单上没有广告的扩展名),连接后你就可以拨号;在这个扩展名中,你可以检查呼叫者ID并将其与你的号码进行比较,这样只有你可以执行脚本(你可以通过请求一个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)
    推荐文章