【问题标题】:How to Convert existing Asterisk AGI scripts to FASTAGI script如何将现有的 Asterisk AGI 脚本转换为 FASTAGI 脚本
【发布时间】:2015-04-07 09:01:56
【问题描述】:

我的 Asterisk 服务器在支付环境中运行良好。现在,我需要将业务逻辑与 Asterisk Server 分离以提高效率,并出于显而易见的原因保护 AGI 脚本。

问题是,如何将现有的工作 AGI 脚本转换为 FASTAGI 脚本,或者如何从 FASTAGI 服务器调用现有的 AGI 脚本?

我在这个平台上发布了一些带有答案的帖子,但没有人明确说明如何从头开始执行此操作。很高兴对如何使用 PHP 实现这一点有清晰的了解。

【问题讨论】:

    标签: php asterisk fastagi


    【解决方案1】:

    您可以为此使用xinetd。从每个星号框上的拨号计划中,使用 fast agi 参数调用 agi,替换为 fastagi 服务器的 IP 地址:

    AGI(agi://192.168.1.100/)
    

    确保您在/etc/services 中有类似:

    agi             4573/tcp                        # FAST AGI entry
    

    在 FastAGI 服务器上:在一个名为 /etc/xinetd.d/agi 的文件中(确保 /etc/xinetd.conf 正在从 /etc/xinetd.d/ 加载模块)有一个调用你的 agi 脚本的定义。

    # description: agi service for PHP fastagi interaction
    service agi
    {
            socket_type  = stream
            user         = root
            group        = nobody
            server       = /path/to/agiLaunch.sh
            wait         = no
            protocol     = tcp
            bind         = 127.0.0.1
            disable      = no
            per_source   = UNLIMITED
            instances    = UNLIMITED
            cps          = 1000 0
    }
    

    在您的 AGI 脚本中,您现在可以像往常一样通过读取 STDIN 或 STDOUT 进行操作。

    【讨论】:

    • 好的,感谢您的回复。在这个平台上的某个地方对此有所了解,并尝试过。那么,如果我说 10 个 AGI 脚本已经在工作,我该如何使用这种方法来调用所有 AGI 脚本呢?
    • 您可以使用 xinetd 为每个端口设置一个不同的端口。但!我可能会使用“网络脚本”功能,例如如果您调用AGI(agi://hostname[:port][/script],args),您放入/script 部分的内容将在作为通道变量agi_network_script 传递给脚本的变量中。因此,使用网络脚本制作一个脚本来处理 10 中的哪一个 AGI 脚本。此外,“星号:电话的未来”一书使用 xinetd 和他们的 fastagi 示例,值得。
    • 非常感谢 dougBTV,您的帮助很大。您对如何进行身份验证以仅允许经过身份验证的个人或用户从他们的拨号方案中调用 FASTAGI 脚本有任何想法吗?我计划将服务扩展到愿意在拨号方案中使用 AGI 脚本的任何人。
    • 你好 dougBTV,已经完成了一切,它似乎很好,除了我不断收到这个错误 "xinetd[5587]: EXIT: fastagi status=255 pid=5644 duration=0(sec)" .是否有线索说明为什么会发生故障?同样在此错误之前,该消息是“[asmanager] => Apr 13 15:54:55 cpgserver php: [in] => Resource id #1 Apr 13 15:54:55 cpgserver php: [out] => Resource id # 13 年 4 月 2 日 15:54:55 cpgserver php:[音频] => 4 月 13 日 15:54:55 cpgserver php:[option_delim] =>,4 月 13 日 15:54:55 cpgserver php:)“
    • @CEDOC -- 您是否尝试过在 Asterisk CLI 上发布:agi set debug on --> 这可能会给您更多的见解。至于身份验证(对不起,我错过了那条消息)——您可能想在/networkscript 中添加一个身份验证字符串?我个人之前没有这个要求。所以我在猜测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多