Php 在PAMI中发起调用-无限while循环

Php 在PAMI中发起调用-无限while循环,php,asterisk,Php,Asterisk,我目前正在编写一个使用PAMI与Asterisk服务器通信的脚本 我发起呼叫的代码如下: public function store(Requests\CallRequest $request, ClientImpl $a) { $originateMsg = new OriginateAction('Local/' . $request->agent . '@auto-answer'); $originateMsg->setContext('G-Outgoing')

我目前正在编写一个使用PAMI与Asterisk服务器通信的脚本

我发起呼叫的代码如下:

public function store(Requests\CallRequest $request, ClientImpl $a)
{
    $originateMsg = new OriginateAction('Local/' . $request->agent . '@auto-answer');
    $originateMsg->setContext('G-Outgoing');
    $originateMsg->setPriority('1');
    $originateMsg->setExtension($request->dial);
    $a->send($originateMsg);

    while(true) {
        if( $a->process() ) return redirect(route('call-hangup'));
        usleep(1000);
    }

    $a->close();
}
问题是,在发出挂断请求之前,我必须设置一个无限while循环
$a->process()
调用以下方法:

class VoipEventStart implements IEventListener
{
    public function handle(EventMessage $event)
    {
        $a = $event->getKeys();

        if( ($a['event'] == "Hangup" || $a['event'] == "HangupRequest") && strpos($a['channel'], 'SIP/') !== FALSE)
        {
            return true;
        }

        return false;
    }
}
我所追求的。。 我是否可以设置此进程运行,而不让页面看起来由于while循环而试图加载


javascript有什么帮助吗?我确实想过使用
AJAX
来发出请求,但它仍然会进入while循环并停止,直到调用成功

您不应该将web应用程序与电话后端耦合。异步是一种方式

在最好的情况下,您应该编写web应用程序,以便它可以使用WebSocket、长轮询、SSE或第三方服务,这些服务可用于向web应用程序传递事件,并以异步方式从“后端”传入

从web应用程序到“后端”的请求可以通过传统方式(使用HTTP请求)或使用WebSocket完成

“后端”可以是在后台运行的进程(或通过消息总线通信的进程生态系统),侦听来自PBX和web客户端的有趣事件,然后通过任何必要的方式将它们交付给web应用程序或PBX

例如:

  • 用户按下“呼叫”按钮
  • web应用程序向web控制器发出HTTP请求
  • web控制器接收请求,并将json负载和拨号信息注入消息总线
  • 侦听正确类型的有效负载的工作人员“拾取此数据”,并选择一个随机星号节点来发出拨号
  • 发起操作将发送到所选节点
  • 侦听来自不同星号节点的事件的一个或多个进程将拾取拨号事件,并通过websocket将其发送到web应用程序。您应该能够将一个或多个通道或操作ID“绑定”到正确的web客户端
  • 您还可以从web应用程序中使用SSE来侦听事件

    我知道,我高度简化了所有血腥的细节和复杂性,只是想让您了解如何在您当前的体系结构中解耦应用程序的不同部分:)

    有道理吗


    干杯

    您不应该将web应用程序与电话后端耦合。异步是一种方式

    在最好的情况下,您应该编写web应用程序,以便它可以使用WebSocket、长轮询、SSE或第三方服务,这些服务可用于向web应用程序传递事件,并以异步方式从“后端”传入

    从web应用程序到“后端”的请求可以通过传统方式(使用HTTP请求)或使用WebSocket完成

    “后端”可以是在后台运行的进程(或通过消息总线通信的进程生态系统),侦听来自PBX和web客户端的有趣事件,然后通过任何必要的方式将它们交付给web应用程序或PBX

    例如:

  • 用户按下“呼叫”按钮
  • web应用程序向web控制器发出HTTP请求
  • web控制器接收请求,并将json负载和拨号信息注入消息总线
  • 侦听正确类型的有效负载的工作人员“拾取此数据”,并选择一个随机星号节点来发出拨号
  • 发起操作将发送到所选节点
  • 侦听来自不同星号节点的事件的一个或多个进程将拾取拨号事件,并通过websocket将其发送到web应用程序。您应该能够将一个或多个通道或操作ID“绑定”到正确的web客户端
  • 您还可以从web应用程序中使用SSE来侦听事件

    我知道,我高度简化了所有血腥的细节和复杂性,只是想让您了解如何在您当前的体系结构中解耦应用程序的不同部分:)

    有道理吗


    干杯

    你不应该在没有经验的情况下拨打核心电话。查看vicidial.org或其他操作系统项目,了解拨号核心变量。您可以使用ARI或AMI接口来发现事件/拨号结束,也可以使用FastAGI接口来控制呼叫。我遇到了不同的问题,我使用的是PAMI,当拨号分机接听电话时,它会自动拨打其他本地分机号码,而不会拨打客户号码:(您不应该在没有经验的情况下拨打core。请查看vicidial.org或其他操作系统项目中的拨打core变体。您可以使用ARI或AMI接口来发现事件/拨号结束,或者您可以使用FastAGI接口来控制呼叫。我有不同的问题,我使用的是PAMI,当拨打的分机接听电话时,它会拨打其他本地e。)xtension号码自动拨打,不拨打客户号码:(我有不同的问题,我使用的是PAMI,当拨打的分机接听电话时,它会自动拨打其他本地分机号码,不拨打客户号码:(我有不同的问题,我正在使用PAMI,当拨号分机接听电话时,它会自动拨打其他本地分机号码,而不会拨打客户号码:(