Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Последняя версия Следующая версия справа и слева | ||
faq:dial_conf_extension_number [2020/10/13 14:06] Портнов Алексей |
faq:dial_conf_extension_number [2023/01/24 09:14] Портнов Алексей |
||
---|---|---|---|
Строка 16: | Строка 16: | ||
- Укажите тип кода "**PHP-AGI скрипт**" | - Укажите тип кода "**PHP-AGI скрипт**" | ||
- Код <code><?php | - Код <code><?php | ||
+ | |||
require_once 'Globals.php'; | require_once 'Globals.php'; | ||
Строка 66: | Строка 67: | ||
$action = $argv[1]??''; | $action = $argv[1]??''; | ||
if($action === 'start'){ | if($action === 'start'){ | ||
- | $pid = Util::getPidOfProcess(basename($argv[0]),getmypid()); | + | $pid = Util::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}'"); | + | Util::mwExec("{$killCmd} {$pid}"); |
} | } | ||
while (true){ | while (true){ | ||
Строка 80: | Строка 82: | ||
checkStartConf(); | checkStartConf(); | ||
$agi->hangup(); | $agi->hangup(); | ||
- | }</code> | + | } |
- | - В коде приложения следует поправить следующие переменные: <code> // Добавочный номер, | + | </code> |
- | // Номер телефона конференции (создана ранее) | + | - Правим файл "**/var/spool/cron/crontabs/root**" через меню [[:custom-files|Кастомизация системных файлов]] |
- | // Этот номер будет набран при соединении с удаленной стороной | + | - Добавляем задачу в конец файла: <code>*/1 * * * * /usr/bin/php -f /var/lib/asterisk/agi-bin/DIALPLAN-APP-EC12CFAE6783FE82FD34F16E40C7386B.php start > /dev/null 2> /dev/null</code> |
- | // В данном примере номер конференции равен добавочному, | + | - В данном примере "**DIALPLAN-APP-EC12CFAE6783FE82FD34F16E40C7386B**" - Это идентификатор созданного ранее приложения. ID можно подсмотреть в адресной строке браузера при редактировании приложения. |
- | // Который будет набран при соединении с внешним абонентом. | + | - Опишем дополнительные контексты через меню [[:custom-files|Кастомизация системных файлов]]. Править будем файл **extensions.conf**. Добавьте в конец файла следущий текст: <code> |
- | $Z_DTMF = '354233'; | + | |
- | // Идентификатор провайдера, через него пойдет вызов. | + | |
- | // ID можно подсмотреть в адресной строке браузера | + | |
- | // при редактировании провайдера | + | |
- | $Z_PROVIDER_ID = 'SIP-1601534775'; | + | |
- | // Номер телефона внешнего абонента. | + | |
- | $Z_DST = '84957776675';</code> | + | |
- | - Опишем дополнительные контексты через меню [[:custom-files|Кастомизация системных файлов]]. | + | |
- | - Править будем файл **extensions.conf**. Добавьте в конец файла следущий текст: <code>; Контекст для исходящих звонков: | + | |
[z-outgoing] | [z-outgoing] | ||
exten => _X!,1,Ringing() | exten => _X!,1,Ringing() | ||
- | same => n,Gosub(${ISTRANSFER}dial,${EXTEN},1) | + | 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,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,ExecIf($["${ISTRANSFER}x" != "x"]?Gosub(${ISTRANSFER}dial_hangup,${EXTEN},1)) |
- | same => n,Set(pt1c_UNIQUEID=${EMPTY_VALUE}) | + | same => n,Set(pt1c_UNIQUEID=${EMPTY_VALUE}) |
- | same => n,ExecIf($["${BLINDTRANSFER}x" != "x"]?AGI(check_redirect.php,${BLINDTRANSFER})) | + | same => n,ExecIf($["${BLINDTRANSFER}x" != "x"]?AGI(check_redirect.php,${BLINDTRANSFER})) |
- | same => n,Hangup() | + | same => n,Hangup() |
- | ; Контекст для донабора внутреннего номера. | + | |
[z-dial-answer] | [z-dial-answer] | ||
exten => s,1,NoOp(Answered send DTMF...) | exten => s,1,NoOp(Answered send DTMF...) | ||
- | same => n,Gosub(dial_answer,${EXTEN},1) | + | same => n,Gosub(dial_answer,${EXTEN},1) |
- | same => n,SendDTMF(${ZDTMF}) | + | same => n,SendDTMF(${ZDTMF}) |
- | same => n,return | + | same => n,return |
- | ; Контекст для входа в конференцию. | + | |
[z-meetme] | [z-meetme] | ||
exten => _X!,1,Answer() | exten => _X!,1,Answer() | ||
- | same => n,Meetme(${EXTEN},qdMTr) | + | same => n,Meetme(${EXTEN},qdMTr) |
- | same => n,Hangup() | + | same => n,Hangup() |
</code> | </code> | ||
- | - Правим файл "**/var/spool/cron/crontabs/root**" через меню [[:custom-files|Кастомизация системных файлов]] | ||
- | - Добавляем задачу в конец файла: <code>*/1 * * * * /usr/bin/php -f /var/lib/asterisk/agi-bin/DIALPLAN-APP-EC12CFAE6783FE82FD34F16E40C7386B.php start > /dev/null 2> /dev/null</code> | ||
- | - В данном примере "**DIALPLAN-APP-EC12CFAE6783FE82FD34F16E40C7386B**" - Это идентификатор созданного ранее приложения. ID можно подсмотреть в адресной строке браузера при редактировании приложения. | ||
<note important>При звонке в конференцию по номеру **354233** автоматически будет подключаться внешний абонент с номером **84957776675**. Как только абонент ответи, будет произведен набор добавочного номера **354233**. Как только все "внутренние" участники покинули конференцию, внешний абонент будет отключен. </note> | <note important>При звонке в конференцию по номеру **354233** автоматически будет подключаться внешний абонент с номером **84957776675**. Как только абонент ответи, будет произведен набор добавочного номера **354233**. Как только все "внутренние" участники покинули конференцию, внешний абонент будет отключен. </note> | ||
+ | |||
+ | <note important>Задача в крон нужна лишь для дополнительной "защиты", по сути это рестарт php скрипта каждую минуту</note> | ||
[[faq:|Обратно к инструкциям]] | [[faq:|Обратно к инструкциям]] |