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

Есть диалплан для отправки письма о пропущенном вызове

<?php

    use MikoPBX\Core\Asterisk\AGI;
    use MikoPBX\Core\System\Notifications;
    require_once 'Globals.php';

    $agi = new AGI();
    
    $FROM_DID = $agi->get_variable("FROM_DID",  true);
    $DATETIME = $agi->get_variable("DATETIME",  true);
    $DATETIME = new DateTime();
    $linkedid   = $agi->get_variable('CDR(linkedid)', true);
    $agi_callerid = $agi->request['agi_callerid'];
    
    $to = 'mail@mail.ru';
    
    $subject = "Пропущенный звонок";
    $body = "<b>Пропущенный звонок</b><br>".
        "Дата и время звонка: {$DATETIME->format('Y.m.d H:i:s')} <br>".
        "Клиент позвонил на номер: {$FROM_DID} <br>".
        "Номер телефона клиента: {$agi_callerid} <br>".
        "Идентификатор звонка: {$linkedid} <hr>";
    
    // Отправляем письмо.  
$notifications=new Notifications();
$notifications->sendMail($to, $subject, $body);

Создано IVR меню в котором после проигрывания сообщения выполняется вызов этого диалплана.  Это меню указано в общем расписании нерабочего времени.

Если клиент бросает трубку, попав в нерабочее время, до того момента как сообщение будет проиграно до конца, то письмо не приходит, т.к. не доходит до диалплана.

Подскажите пожалуйста, как настроить отправку письма, когда клиент звонит в нерабочее время сразу после начала воспроизведения звукового сообщения ?

от (340 баллов)
Или как можно в данном приложении, указать проигрывание звукового сообщения до отправки письма ?
от (2.8 тыс. баллов)
редактировать от

Может попробовать так, отказавшись от IVR и отправив на диалплан:

$agi->exec("Playback","имя файла для воспроизведения")

И есть еще такой ответ(не известно, актуально или нет)

https://qa.mikopbx.com/5253/%D0%BA%D0%B0%D0%BA-%D0%B2-php-agi-%D0%BF%D1%80%D0%BE%D0%B8%D0%B3%D1%80%D0%B0%D1%82%D1%8C-%D1%84%D0%B0%D0%B9%D0%BB

от (340 баллов)

Спасибо, работает.

Если вдруг кому-то еще пригодится то вот полный текст рабочего скрипта на отправку письма о пропущенном вызове

<?php

    use MikoPBX\Core\Asterisk\AGI;
    use MikoPBX\Core\System\Notifications;
    require_once 'Globals.php';

    $agi = new AGI();
    
    $FROM_DID = $agi->get_variable("FROM_DID",  true);
    $DATETIME = $agi->get_variable("DATETIME",  true);
    $DATETIME = new DateTime();
    $linkedid   = $agi->get_variable('CDR(linkedid)', true);
    $agi_callerid = $agi->request['agi_callerid'];
    
    $to = 'mail@mail.ru';
    
    $subject = "Пропущенный звонок";
    $body = "Был звонок в нерабочее время <br>".
        "Номер телефона клиента: <b> {$agi_callerid} </b> <br>".
        "Дата и время звонка: <b> {$DATETIME->format('Y.m.d H:i:s')} </b> <br>".
        "Клиент позвонил на номер: <b> {$FROM_DID} </b> <br>".
        "Идентификатор звонка: {$linkedid} <hr>";

    // Отправляем письмо.  
$notifications=new Notifications();
$notifications->sendMail($to, $subject, $body);

    //Воспроизводим аудио
$agi->exec("Playback","/storage/usbdisk1/mikopbx/media/custom/ИМЯ_ФАЙЛА_БЕЗ_РАСШИРЕНИЯ");

1 Ответ

от (123 тыс. баллов)
выбран от
 
Лучший ответ

Я бы предложил зайти немного с другой стороны. Алгоритм следующий

Описать  контекст 

[add-trim-prefix-clid-custom]

В нем обязательно необходимо выполнить в конце

same => n,return

В контексте стоит определить свой hangup перехватчик, что то вроде:

same => n,Set(CHANNEL(hangup_handler_wipe)=custom-hangup-handler,s,1)

в нем обязательно необходимо выполнить 

Gosub(hangup_handler,s,1)

и 

same => n,return

В "custom-hangup-handler" вы можете вызвать свой AGI скрипт и отправить сообщение о пропущенном вызове. 

Вызов следует считать пропущенным, если выполняется условие:

ExecIf($["${M_DIALSTATUS}" != "ANSWER"]?AGI(...))

Можно косвенно определить, что сработал переключатель по времени, будет определена переменная канала "filename"

от (2.8 тыс. баллов)
А вообще, возможно нужно добавить во вкладку Почта и уведомление что-то типа Сброшенные вызовы, которая будет отправлять письма на сброшенные вызовы, а не пропущенные (это те которые не отвеченные).
На этом сайте можно бесплатно задать вопрос разработчикам MikoPBX и другим членам сообщества. Время ответа не регламентированно, но мы стараемся несколько раз в день заглядывать сюда. Для срочного решения проблем обращайтесь на платную линию поддержки

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

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

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

2.4 тыс. ответов

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

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

...