如何通过asterisk的AMI API执行拨号方案?

时间:2011-09-19 02:48:23

标签: asterisk telephony asteriskami agi

找不到具体的答案。我是星号和AMI的新手。我需要使用星号自动生成调用并将参数传递给AGI程序。使用调用文件似乎首先生成不需要的调用。那么,如何通过将所有参数传递给它来使用星号AMI API(PHP)来执行带有AGI的拨号方案?因此,AGI将接管并拨打电话。

2 个答案:

答案 0 :(得分:1)

我认为在你的情况下,使用调用文件实际上会更简单。原因如下:

  1. AMI要求您编写网络代码,如果您是初学者,构建简单文本文件(调用文件)将会更加棘手。
  2. 调用文件允许您将变量传递给您可以在拨号方案代码中使用的Asterisk。
  3. 调用文件非常简单。
  4. 以下是使用调用文件执行此操作的简单方法的完整示例。我已尽力在相关评论中解释它。

    首先,让我们假设您有一些使用变量的拨号方案代码,并调用AGI脚本(这是我假设您根据您的问题进行的操作)。这意味着您的extensions.conf文件中的代码类似于:

    [test_stuff]
    exten => s,1,NoOp(starting test!)
    exten => s,n,NoOp(my variable's value is: ${somevar})
    exten => s,n,NoOp(my other variable's value is: ${some_other_var})
    exten => s,n,AGI(/path/to/my/script.sh,${somevar})
    exten => s,n,NoOp(i just ran an AGI script and passed it a command line argument!)
    exten => s,n,Hangup()
    

    以下是一个调用文件:

    1. 需要在某个临时目录中创建(可能是/tmp/)。
    2. 保存后,您可以将其移至/var/spool/asterisk/outgoing/(例如:mv /tmp/blah.call /var/spool/asterisk/outgoing/)来运行。
    3. 呼叫文件将立即拨打电话号码818-222-3333。
    4. 一旦818-222-3333的人接听电话,Asterisk将立即开始执行您的[test_stuff]拨号方案代码,并将在您的通话文件中设置变量:

      频道:SIP / trunkname / 18182223333

      上下文:test_stuff

      扩展名:s

      优先级:1

      设置:somevar = hithere

      设置:some_other_var = woot

    5. 希望有所帮助!

答案 1 :(得分:0)

您的问题可以通过本地频道帮助解决,例如

在使用以下拨号方案时,在呼叫文件中使用Local/1812222222@test_stuff作为频道

[test_stuff]
exten => _X.,1,NoOp(starting test!)
exten => _X.,n,Set(phone=${EXTEN})
exten => _X.,n,AGI(/path/to/my/billing,${phone},${other_variables_account_etc..})
exten => _X.,n,Dial(SIP/trunkName/${phone})

您可以将此方法用于接口AMI或.call文件