Как интегрировать PAMI с моим веб-приложением? - PullRequest
0 голосов
/ 03 мая 2019

Я хочу интегрировать PAMI с моим веб-приложением, которое должно открывать определенный URL, который является не чем иным, как веб-страницей в нашем приложении (сведения о вызывающем абоненте) входящего вызывающего абонента.У меня есть данные API PAMI, например, имя хоста, имя пользователя, пароль, номер порта.

Мой вопрос: как мне выполнить каждое условие, чтобы оно выполнялось только один раз, когда в вызове происходит другое событиекак Звонок, Не отвечает, Отклонено получателем, Ответ получателем, Вызов завершен.(Ниже код для описания).

Я использовал пример кода из (http://marcelog.github.io/PAMI), чтобы достичь того, чего хотел, но я застрял в точке.

Ниже приведен код, который я реализовал до сих пор

<?php

// declare(ticks=1);
require 'vendor/autoload.php';
$options = array(
   'host' => 'sip3.intupbx.wave-tell.com',
   'scheme' => 'tcp://',
   'port' => 5039,
   'username' => 'someusername',
    'secret' => '******',
   'connect_timeout' => 1000,
   'read_timeout' => 1000
);
$client = new \PAMI\Client\Impl\ClientImpl($options);
// Open the connection
$client->open();
use PAMI\Message\Event\EventMessage;
use PAMI\Listener\IEventListener;
use PAMI\Message\Event\HangupEvent;
// use PAMI\Listener\IEventListener;

$running = true;
while($running) {
  $client->registerEventListener(function ( $event) {
    $eventType = $event->getKeys()['event'];
    $stateType = $event->getKeys()['channelstatedesc'];
    if($eventType=='Newstate' && $stateType=='Ring'){
      echo('Ringing..');
      // Perform some Database Query and custom event perform by web app.
      // Show StateType on Popup Screen in web app.
    }
    else if($eventType=='HangupRequest' && $stateType=='Ringing'){
      echo('Not Responding..');
      // Show StateType on Popup Screen in web app.
    }
    else if($eventType=='Hangup' && $stateType=='Ringing'){
      echo('Rejected by receiver..');
      // Show StateType on Popup Screen in web app.
    }
    else if($eventType=='Newstate' && $stateType=='Up'){
      echo('Answered by receiver..');
      // Show StateType on Popup Screen in web app.
    }
    else if($eventType=='HangupRequest' && $stateType=='Up'){
      echo('Call Ended..');
      // Show StateType on Popup Screen in web app.
    }
    echo '<pre>';print_r($event);
    die;
  });
    $client->process();
    usleep(1000);
}
// Close the connection
$client->close();
?>

Ответ от сервера звездочки выглядит следующим образом:

Ringing..

PAMI\Message\Event\NewstateEvent Object
(
    [rawContent:protected] => Event: Newstate
Privilege: call,all
SystemName: pbx03
Channel: SIP/200-WTC-000b5da0
ChannelState: 4
ChannelStateDesc: Ring
CallerIDNum: 200
CallerIDName: 200-WTC
ConnectedLineNum: 
ConnectedLineName: 
Language: en
AccountCode: WTC
Context: authenticated
Exten: 201
Priority: 1
Uniqueid: pbx03-1556624215.8440298
Linkedid: pbx03-1556624215.8440298
    [channelVariables:protected] => Array
        (
            [sip/200-wtc-000b5da0] => Array
                (
                )

        )

    [lines:protected] => Array
        (
        )

    [variables:protected] => Array
        (
        )

    [keys:protected] => Array
        (
            [event] => Newstate
            [privilege] => call,all
            [systemname] => pbx03
            [channel] => SIP/200-WTC-000b5da0
            [channelstate] => 4
            [channelstatedesc] => Ring
            [calleridnum] => 200
            [calleridname] => 200-WTC
            [connectedlinenum] => 
            [connectedlinename] => 
            [language] => en
            [accountcode] => WTC
            [context] => authenticated
            [exten] => 201
            [priority] => 1
            [uniqueid] => pbx03-1556624215.8440298
            [linkedid] => pbx03-1556624215.8440298
        )

    [createdDate:protected] => 1556624215
)
...