MikoPBX
Модули
Перевод этой страницы:
MikoPBX
Модули
Это может потребоваться для организации связи с внешней (относительно MIKOPBX) конференцией. Позволит сэкономить на исходящих звонках (будет занята только одна линия).
<?php require_once 'Globals.php'; use MikoPBX\Core\System\Util; use \MikoPBX\Core\Asterisk\AGI; use \MikoPBX\Core\Asterisk\AsteriskManager; function checkStartConf(){ $Z_DTMF = '354233'; $Z_PROVIDER_ID = 'SIP-1601534775'; $Z_DST = '84957776675'; $am = new AsteriskManager(); $am->connect(); $confEmpty = true; $confChannelFound = false; $data = $am->meetMeCollectInfo($Z_DTMF); foreach ($data as $channelData){ $value = $am->GetVar($channelData['Channel'], 'ZDTMF', null, false); if(!empty($value)){ // Это канал конференции. $confChannelFound = true; }else{ // Есть канал конечного пользователя. $confEmpty = false; } } if($confChannelFound === false && $confEmpty === false){ // Необходимо соединить с внешней конференцией. $am->Originate( 'Local/'.$Z_DTMF.'@z-meetme', $Z_DST, 'z-outgoing', '1', null, null, null, null, "__ZDTMF={$Z_DTMF},__ZPROVIDERID={$Z_PROVIDER_ID},__ZDST={$Z_DST}}", '0'); }elseif ($confChannelFound === true && $confEmpty === true){ $asteriskCmd = Util::which('asterisk'); Util::mwExec("{$asteriskCmd} -rx 'meetme kick {$Z_DTMF} all'"); } } $action = $argv[1]??''; if($action === 'start'){ $pid = Util::getPidOfProcess(basename($argv[0])." start$", getmypid()); var_dump($pid); if(!empty($pid)){ $killCmd = Util::which('kill'); Util::mwExec("{$killCmd} {$pid}"); } while (true){ checkStartConf(); sleep(3); } }else{ $agi = new AGI(); $agi->answer(); checkStartConf(); $agi->hangup(); }
*/1 * * * * /usr/bin/php -f /var/lib/asterisk/agi-bin/DIALPLAN-APP-EC12CFAE6783FE82FD34F16E40C7386B.php start > /dev/null 2> /dev/null
[z-outgoing] exten => _X!,1,Ringing() same => n,Gosub(${ISTRANSFER}dial,${EXTEN},1) same => n,Dial(PJSIP/${EXTEN}@${ZPROVIDERID},600,${DOPTIONS}TKU(z-dial-answer)b(dial_create_chan,s,1)) same => n,ExecIf($["${ISTRANSFER}x" != "x"]?Gosub(${ISTRANSFER}dial_hangup,${EXTEN},1)) same => n,Set(pt1c_UNIQUEID=${EMPTY_VALUE}) same => n,ExecIf($["${BLINDTRANSFER}x" != "x"]?AGI(check_redirect.php,${BLINDTRANSFER})) same => n,Hangup() [z-dial-answer] exten => s,1,NoOp(Answered send DTMF...) same => n,Gosub(dial_answer,${EXTEN},1) same => n,SendDTMF(${ZDTMF}) same => n,return [z-meetme] exten => _X!,1,Answer() same => n,Meetme(${EXTEN},qdMTr) same => n,Hangup()