329 просмотров
от (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 Ответ

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

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

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

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

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

2.3 тыс. ответов

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

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

...