Инструменты пользователя

Инструменты сайта


faq:disa

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
faq:disa [2021/05/17 10:03]
Портнов Алексей создано
faq:disa [2021/05/17 10:52] (текущий)
Портнов Алексей
Строка 5: Строка 5:
 [[faq:​|Обратно к инструкциям]] [[faq:​|Обратно к инструкциям]]
  
 +===== Реализация =====
  
 +  - Добавьте новое приложение dialplan (см. **[[:​dialplan-applications|Приложения диалпланов]]**)
 +  - Назначьте внутренний номер, к примеру **2200109**
 +  - Скопируйте код приолжения <​code><?​php
  
 +namespace MikoPBX\Core\System;​
 +
 +require_once('​Globals.php'​);​
 +
 +use MikoPBX\Common\Models\ExternalPhones;​
 +use MikoPBX\Core\Asterisk\AGI;​
 +use Phalcon\Mvc\Model\Resultset;​
 +
 +$agi    = new AGI();
 +
 +$number = substr($agi->​request['​agi_callerid'​],​-10);​
 +if(strlen($number) < 7){
 +    $agi->​noop('​Count < 7');
 +    // Проверка на длину номера.
 +    exit(0);
 +}
 +$outPhone = ExternalPhones::​findFirst([
 +  '​conditions'​ => '​dialstring LIKE :​number:',​
 +  '​bind' ​      => [
 +      '​number'​ => "​%$number",​
 +  ],
 +  '​hydration'​ => Resultset::​HYDRATE_ARRAYS,​
 +]);
 +
 +if(count($outPhone) !== 1){
 +    $agi->​noop('​ExternalPhones not found '​.$number);​
 +    // Проверка на принадлежность номера телефона сотруднику компании.
 +    exit(0);
 +}
 +
 +$agi->​set_variable('​AGIEXITONHANGUP',​ '​yes'​);​
 +$agi->​set_variable('​AGISIGHUP',​ '​yes'​);​
 +$agi->​set_variable('​__ENDCALLONANSWER',​ '​yes'​);​
 +$agi->​exec('​Ringing',​ ''​);​
 +$agi->​Answer();​
 +
 +$result ​     = $agi->​getData('​vm-enter-num-to-call',​ 3000, 11);
 +$selectednum = $result['​result'​]??'';​
 +if(!empty($selectednum)){
 +    // Все ок. Завершаем вызов.
 +    $agi->​set_variable('​__pt1c_UNIQUEID',​ ''​);​
 +    $agi->​exec(
 +        '​Dial',​
 +        "​Local/​{$selectednum}@all_peers/​n,​300,"​ . '​TtekKHhU(dial_answer)b(dial_create_chan,​s,​1)'​
 +    );
 +}else{
 +    $agi->​noop('​selectednum is empty'​);​
 +}</​code>​
 +  - В адресной строке браузера скопируйте ID приложения. Он будет иметь вид "​**DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20**"​
 +  -   - В разделе "​[[:​custom-files|Кастомизация системных файлов]]"​ добавьте к файлу **extensions.conf** <​code>​[add-trim-prefix-clid-custom]
 +exten => _.!,​1,​ExecIf($[ "​${EXTEN}"​ == "​h"​ ]?Hangup()
 +    same => n,​AGI(DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20.php)
 +    same => n,​Return()</​code>,​ тут "​DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20"​ - это ID приложения.
 +
 +===== Важные моменты =====
 +  - Приложение будет выполнено для **всех** входящих вызовов
 +  - Ввести добавочный будет возможно лишь в том случае,​ если номер телефона звонящего заполнен в карточке сотрудника,​ то есть номер должен принадлежать сотруднику. Это сделано для безопасности
 +  - **Скрипт не является завершенным продуктом**,​ но открыт для кастомизации
 +
 +    ​
 [[faq:​|Обратно к инструкциям]] [[faq:​|Обратно к инструкциям]]
faq/disa.1621245838.txt.gz · Последние изменения: 2021/05/17 10:03 — Портнов Алексей