Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия | |||
faq:dial_conf_extension_number [2023/01/24 09:14] Портнов Алексей |
faq:dial_conf_extension_number [2023/12/22 13:14] (текущий) Портнов Алексей |
||
---|---|---|---|
Строка 18: | Строка 18: | ||
require_once 'Globals.php'; | require_once 'Globals.php'; | ||
- | |||
use MikoPBX\Core\System\Util; | use MikoPBX\Core\System\Util; | ||
- | use \MikoPBX\Core\Asterisk\AGI; | + | use MikoPBX\Core\Asterisk\AGI; |
- | use \MikoPBX\Core\Asterisk\AsteriskManager; | + | use MikoPBX\Core\Asterisk\AsteriskManager; |
+ | use MikoPBX\Core\System\Processes; | ||
function checkStartConf(){ | function checkStartConf(){ | ||
$Z_DTMF = '354233'; | $Z_DTMF = '354233'; | ||
- | $Z_PROVIDER_ID = 'SIP-1601534775'; | + | $Z_PROVIDER_ID = 'SIP-1692280724'; |
$Z_DST = '84957776675'; | $Z_DST = '84957776675'; | ||
+ | $asteriskCmd = Util::which('asterisk'); | ||
+ | $busyboxCmd = Util::which('busybox'); | ||
$am = new AsteriskManager(); | $am = new AsteriskManager(); | ||
Строка 33: | Строка 35: | ||
$confEmpty = true; | $confEmpty = true; | ||
$confChannelFound = false; | $confChannelFound = false; | ||
- | $data = $am->meetMeCollectInfo($Z_DTMF); | + | |
- | foreach ($data as $channelData){ | + | $result = shell_exec("$asteriskCmd -rx 'confbridge list $Z_DTMF' | $busyboxCmd grep default_menu | $busyboxCmd cut -f 1 -d ' '"); |
- | $value = $am->GetVar($channelData['Channel'], 'ZDTMF', null, false); | + | foreach (explode(PHP_EOL, $result) as $channelData){ |
+ | if(empty($channelData)){ | ||
+ | continue; | ||
+ | } | ||
+ | $value = $am->GetVar($channelData, 'ZDTMF', null, false); | ||
if(!empty($value)){ | if(!empty($value)){ | ||
// Это канал конференции. | // Это канал конференции. | ||
Строка 44: | Строка 50: | ||
} | } | ||
} | } | ||
- | |||
if($confChannelFound === false && $confEmpty === false){ | if($confChannelFound === false && $confEmpty === false){ | ||
// Необходимо соединить с внешней конференцией. | // Необходимо соединить с внешней конференцией. | ||
Строка 55: | Строка 60: | ||
null, | null, | ||
null, | null, | ||
- | null, | + | "Conf <$Z_DTMF>", |
"__ZDTMF={$Z_DTMF},__ZPROVIDERID={$Z_PROVIDER_ID},__ZDST={$Z_DST}}", | "__ZDTMF={$Z_DTMF},__ZPROVIDERID={$Z_PROVIDER_ID},__ZDST={$Z_DST}}", | ||
'0'); | '0'); | ||
}elseif ($confChannelFound === true && $confEmpty === true){ | }elseif ($confChannelFound === true && $confEmpty === true){ | ||
- | $asteriskCmd = Util::which('asterisk'); | + | Processes::mwExec("{$asteriskCmd} -rx 'confbridge kick {$Z_DTMF} all'"); |
- | Util::mwExec("{$asteriskCmd} -rx 'meetme kick {$Z_DTMF} all'"); | + | |
} | } | ||
} | } | ||
Строка 67: | Строка 71: | ||
$action = $argv[1]??''; | $action = $argv[1]??''; | ||
if($action === 'start'){ | if($action === 'start'){ | ||
- | $pid = Util::getPidOfProcess(basename($argv[0])." start$", getmypid()); | + | $pid = Processes::getPidOfProcess(basename($argv[0])." start$", getmypid()); |
- | var_dump($pid); | + | |
if(!empty($pid)){ | if(!empty($pid)){ | ||
$killCmd = Util::which('kill'); | $killCmd = Util::which('kill'); | ||
- | Util::mwExec("{$killCmd} {$pid}"); | + | Processes::mwExec("{$killCmd} {$pid}"); |
} | } | ||
while (true){ | while (true){ | ||
checkStartConf(); | checkStartConf(); | ||
- | sleep(3); | + | sleep(10); |
} | } | ||
}else{ | }else{ | ||
Строка 105: | Строка 108: | ||
[z-meetme] | [z-meetme] | ||
exten => _X!,1,Answer() | exten => _X!,1,Answer() | ||
- | same => n,Meetme(${EXTEN},qdMTr) | + | same => n,Gosub(set-answer-state,${ZDTMF},1) |
- | same => n,Hangup() | + | same => n,Set(CHANNEL(hangup_handler_wipe)=hangup_handler_meetme,s,1) |
+ | same => n,Set(CONFBRIDGE(bridge,record_file_timestamp)=false) | ||
+ | same => n,Set(CONFBRIDGE(bridge,record_conference)=yes) | ||
+ | same => n,Set(CONFBRIDGE(bridge,video_mode)=follow_talker) | ||
+ | same => n,Set(CONFBRIDGE(user,talk_detection_events)=yes) | ||
+ | same => n,Set(CONFBRIDGE(user,quiet)=yes) | ||
+ | same => n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes) | ||
+ | same => n,ConfBridge(${ZDTMF}) | ||
+ | same => n,Hangup() | ||
</code> | </code> | ||