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

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

<?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 меню в котором после проигрывания сообщения выполняется вызов этого диалплана.  Это меню указано в общем расписании нерабочего времени.

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

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

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

Может попробовать так, отказавшись от 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

от (270 баллов)

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

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

<?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 Ответ

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

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

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

[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"

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

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

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

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

1.8 тыс. ответов

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

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

...