126 просмотров
от (390 баллов) в категории Тонкая настройка

Добрый день!

Подскажите, пожалуйста, как получить в php-приложении диалплана номер, который звонящий ввел при донаборе? Хочу все варианты донабора отправить на одно и то же php-приложение, которое будет всё разруливать.

Спасибо.

1 Ответ

от (101 тыс. баллов)
Через кастомизацию это не сделать.

Проще на php-agi реализовать IVR.
от (390 баллов)
Спасибо за ответ! Тогда у меня запасной вариант, сделаю несколько php-приложений по одному на каждый добавочный номер, мне просто нужно предварительно разные действия выполнять перед отправкой вызова на специалиста, благо, что их совсем не много.
от (600 баллов)
Добрый день, а нет ли примера хоть какого-нибудь?
от (390 баллов)
Могу рассказать, как я сделал, хорошо подходит если немного операторов.

Входящие вызовы попадают на php-приложение, в котором производится предварительная регистрация звонка, т.е. в 1С звонок зарегистрирован еще до приветствия, но оператор пока не выбран.

<?php

    use MikoPBX\Core\Asterisk\AGI;

    require('phpagi.php');

    require_once 'Globals.php';

    $agi = new AGI();

    $agi_callerid = $agi->request['agi_callerid'];   

    // вызываю функцию регистрации звонка в опубликованной 1С

    $url = "http://192.168.0.25/MyCRM/hs/mikopbx/CallEvReg?phone=$agi_callerid";    

    $ch = file_get_contents($url);

    if (substr($ch,0,3)=="ok-") {      

        $agi->set_variable('CALLERID(name)', substr($ch,3));

        // регистрация прошла. отправляем на IVR с приветствием и донабором

        $agi->exec_goto("internal", "2200103", "1");

    }

    else {

// на всякий случай, если 1С не будет работать, отправляем вызов просто на очередь вызовов всех операторов, даже без приветствия, т.к. это «на всякий случай», которого быть не должно

        $agi->exec_goto("internal", "2200102", "1");      

    }    

?>

IVR (2200103) – это приветсвтвие с предложением донабора: голос говорит, что вызов зарегистрирован, выможете набрать добавочный номер…

Для каждого оператора  у меня создано php-приложение (пример будет ниже).

Вызовы переходят на php-приложение, соответствующее нужному оператору.

Текст php-приложения оператора с внутенним номером 1250:

<?php

    use MikoPBX\Core\Asterisk\AGI;

    require('phpagi.php');

    require_once 'Globals.php';

    $agi = new AGI();    

    $agi_callerid = $agi->request['agi_callerid'];  

    $url = "http://192.168.0.25/MyCRM/hs/mikopbx/CallEvReg?phone=$agi_callerid&dopnumber=1250";    

    $ch = file_get_contents($url);

        $agi->exec_goto("internal", "1250", "1");    

?>

Текст php-приложения оператора с внутенним номером 1240:

<?php

    use MikoPBX\Core\Asterisk\AGI;

    require('phpagi.php');

    require_once 'Globals.php';

    $agi = new AGI();  

    $agi_callerid = $agi->request['agi_callerid'];

    $url = "http://192.168.0.25/MyCRM/hs/mikopbx/CallEvReg?phone=$agi_callerid&dopnumber=1240";    

    $ch = file_get_contents($url);

        $agi->exec_goto("internal", "1240", "1");    

?>

Аналогичные приложения для каждого оператора.

Снова вызывается функция регистрации звонка в 1С, чтобы отметить какого оператора возжелал звонящий и вызов передается на этого оператора.

Думаю понятно обрисовал.
от (600 баллов)
редактировать от

Спасибо за ответ, Ваш подход понятен. 

У меня задача немного другая - мне нужно "поймать" номер донабора и в зависимости от него выполнить действие: перевести звонок на очередь из сотрудников и в случае недозвона до них сформировать письмо с определенным текстом. Пока я остановился на том, что не могу отловить DTMF-набор абонента во время прослушивания приветствия - переход на следующее действие происходит после нажатия одной кнопки и поэтому отрабатывает оператор по метке default - вызов дежурного оператора. По логу вроде понятно, что не хватает времени на ввод 4 символов - 100мс. Т.е. задача такая, что во время проигрыша приветствия на заднем плане нужно  отловить 4 символа донабора.

ПС заранее прошу прощения за возможную криворукость кода - рыскал по разным форумам - нашел только getData('silence/1',6000,1);.

    $agi = new AGI();
    $agi->exec("Background","/storage/usbdisk1/mikopbx/media/custom/greeting_support");
    $press1 = $agi->getData('silence/1',6000,1);
    $keys = $press1['result'];
    switch ($keys) {
            case '4801':
            {
                $agi->exec_goto("internal", "2200111", "1");
                break;
            }
            case '4802':
            {
                $agi->exec_goto("internal", "2200114", "1");
                break;
            }
            case '4803':
            {
                $agi->exec_goto("internal", "2200118", "1");
                break;
            }
            default:
                $agi->exec_goto("internal", "2200115", "1");
        }
от (390 баллов)
С этим я помочь не смогу... Если на форуме не удается найти информацию по этому поводу, думаю, лучше создать новую тему именно по вашей проблеме.
от (101 тыс. баллов)

Вот пример по работе с IVR через php-agi

https://habr.com/ru/post/580676/

Мб поможет. 

Вот тут еще пример:

https://github.com/mikopbx/ModuleSmartIVR/blob/b39faf33ee4701630db4912e0aa6a70ae4264de3/Lib/AGICallLogic.php#L147

от (101 тыс. баллов)

вместо "file_get_contents" лучше использовать "GuzzleHttp", в нем хоть таймаут на запрос выставить можно.

Вот тут есть примеры

от (600 баллов)

Спасибо за ответ. Все получилось. Если кому нужно выкладываю:

<?php
    use MikoPBX\Core\Asterisk\AGI;
    require_once 'Globals.php';
    $agi = new AGI();
    $ivr_msg = '/storage/usbdisk1/mikopbx/media/custom/greeting_support';
    $agi->set_variable('AGIEXITONHANGUP', 'yes');
    $agi->set_variable('AGISIGHUP', 'yes');
    $agi->set_variable('__ENDCALLONANSWER', 'yes');
    $agi->Answer();
    $press1 = $agi->getData($ivr_msg,15000,4);
    $keys = $press1['result'];
    $agi->set_variable("id_supp", $keys);
//код сохраняю в БД, чтобы в дальнейшем использовать его в другом скрипте по отправке почты
    $agi->databasePut('support','id',$keys);
    switch ($keys) {
            case '4801':
            {
                $agi->exec_goto("internal", "2200111", "1");
                break;
            }
            case '4802':
            {
                $agi->exec_goto("internal", "2200114", "1");
                break;
            }
            default:
                $agi->exec_goto("internal", "2200115", "1");
        }
?>
На этом сайте можно бесплатно задать вопрос разработчикам MikoPBX и другим членам сообщества. Время ответа не регламентированно, но мы стараемся несколько раз в день заглядывать сюда. Для срочного решения проблем обращайтесь на платную линию поддержки

Популярные теги

askozia входящие-вызовы настройка провайдер запись-разговоров исходящие ivr маршрутизация очередь обновление входящие исходящие-звонки провайдеры транк маршрут очередь-вызовов запись askozia7 askozia6 ошибка переадресация битрикс24 установка перевод callerid голосовая-почта факс логи панель-телефонии-1с перевод-вызова ростелеком история-звонков mikopbx модуль настройка-провайдер релиз история почта перехват-вызова запись-разговора веб-интерфейс битрикс gsm звонок nat goip интеграция диалплан внешние-номера pjsip нерабочее-время bitrix24 ascozia аон мобильный редактор asterisk sip лицензия телефонная-книга маршруты провайдеров время голосовая voicemail cdr вызовы разговоров панель #mikopbx журнал-звонков web-интерфейс донабор переадресация-мобильный zabbix beeline monitoring регистрация тишина fax smtp номер мультифон мегафон не-работает docker askozia-5 распределение билайн настройка-исходящие-исходящих-вызов-вызовов железо префиксы статистика альтернативный оповещения звонков dtmf cisco парковка

2.3 тыс. вопросов

2 тыс. ответов

5.6 тыс. комментариев

26.9 тыс. пользователей

...