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

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


faq:disa

Позвонить в компанию с мобильного и набрав добавочный позвонить сторонней компании

Такой функционал удобен для мобильных сотрудников. Когда важно, чтобы разговор был записан и зафиксирован на АТС в истории звонков. Когда нет возможности использовать софтфон / или «IP-SIM».

Обратно к инструкциям

Реализация

  1. Добавьте новое приложение dialplan (см. Приложения диалпланов)
  2. Назначьте внутренний номер, к примеру 2200109
  3. Скопируйте код приолжения
    <?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');
    }
  4. В адресной строке браузера скопируйте ID приложения. Он будет иметь вид «DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20»
  5. - В разделе «Кастомизация системных файлов» добавьте к файлу extensions.conf
    [add-trim-prefix-clid-custom]
    exten => _.!,1,ExecIf($[ "${EXTEN}" == "h" ]?Hangup()
        same => n,AGI(DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20.php)
        same => n,Return()

    , тут «DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20» - это ID приложения.

Важные моменты

  1. Приложение будет выполнено для всех входящих вызовов
  2. Ввести добавочный будет возможно лишь в том случае, если номер телефона звонящего заполнен в карточке сотрудника, то есть номер должен принадлежать сотруднику. Это сделано для безопасности
  3. Скрипт не является завершенным продуктом, но открыт для кастомизации

Обратно к инструкциям

faq/disa.txt · Последние изменения: 2021/05/17 10:52 — Портнов Алексей