Чат  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

AEL: Отправка СМС после followme с номером звонившего

Проблемы и их решения Asterisk как такового

Модератор: april22

AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 14 ноя 2017, 13:12

Добрый день.
Суть диалплана:
Происходит входящий звонок - после IVR производится обзвон группы внутренних номеров.
Если никто не отвечает, то звонок переправляется на Followme - там одновременно обзванивается группа мобильных.
Провайдер не позволяет передавать CDR звонящего, было решено отправлять номер звонившего тому, кто ответит через FollowMe и только ему (чтобы избежать одновременных обратных вызовов). Для отправки смс используется chan_dongle.
Вопрос - как это реализовать в диалплане?
К примеру для отправки отбивки на почту я использую задание переменной через SET, пример:
Код: выделить все
//Если трубку никто не брал...
      if("${CDR(dstchannel)}" = "" & "${ivr-over}" = "1") {
         Set(call_from=${CALLERID(number)});
         System(echo 'Вы пропустили звонок ${STRFTIME(${EPOCH},,%d.%m.%Y в %H:%M:%S)} от абонента ${call_from}' | mail -s 'Пропущенный вызов от ${call_from}' info@*********.com);
      }
   };

Понятное дело, что для смс команда будет заменена на dongle, но я не понимаю пока, как мне задать срабатывание этой команды только по отношению к номеру, который будет взят через followme?
Подскажите мне какими командами можно это сделать. Для примера кусок диалплана с входящим звонком:

Код: выделить все
        // Workingtime calls
        workingtime => {
                Set(TIMEOUT(digit)=2);
                Set(ivr-over=0);
                Set(fname=${CHANNEL:4:3}/${STRFTIME(${EPOCH},,%Y/%m/%d/%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN}.wav);
                MixMonitor(${MIXMONITOR}/${fname});
                Set(CDR(filename)=${fname});
                Set(TIMEOUT(response)=4);
//              Background(tt-allbusy);
                WaitExten(2);
//              Playback(IVR/2.L);
                Set(QUEUE_MIN_PENALTY=1);
                Set(QUEUE_MAX_PENALTY=2);
                Set(ivr-over=1);
                Dial(SIP/105&SIP/106&SIP/107&SIP/108&SIP/109&SIP/110&SIP/111&SIP/112&SIP/113&SIP/114&SIP/115&SIP/116&SIP/117&SIP/118&SIP/119&SIP/120&SIP/121/};
                Followme(ringall);
                StopMonitor();
                Hangup();
        };
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение zzuz » 14 ноя 2017, 15:35

Используйте опцию U для команды Dial
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1457
Зарегистрирован: 21 сен 2010, 13:33

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 14 ноя 2017, 16:12

Спасибо, попробуем
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 14 ноя 2017, 16:39

zzuz писал(а):Используйте опцию U для команды Dial

Но в followme же не поддерживается U? Как это реализовать с Dial мне ясно, а вот как при переадресации через followme - нет.
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 14 ноя 2017, 17:25

Может просто стоит отказаться от FollowMe и производить переадресацию из отдельного контекста и уже там использовать Dial с U?
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 15 ноя 2017, 16:02

Проблема обнаружилась серьёзная - при использовании опции U - через GoSub уходит в другой контекст (или в тот же), но только на s => {, из-за чего происходит потеря данных CDR и для отправки СМС неоткуда взять номера.
Set не помогает, так как в стандартном экстеншене s происходит сброс CDR. Единственное решение - заставить U переходить во вручную заданный экстеншн вместо s, но как это сделать я так и не смог понять.
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение ded » 15 ноя 2017, 16:09

pipneogen писал(а):из-за чего происходит потеря данных CDR
думаю, что данные никуда не теряются. Они могут быть просто в других переменных (а не в ${EXTEN}).
Посмотрите dumpchan.
ded
 
Сообщений: 12650
Зарегистрирован: 26 авг 2010, 19:00

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 16 ноя 2017, 01:25

Спасибо, нашел в переменной ${CONNECTEDLINE(num)})
Теперь есть второй вопрос:
При дозвоне будет группа вызова на несколько мобильных. Смс надо отправить только на тот номер, что возьмёт трубку.
Я так полагаю, что это нужно отследить также через Dumpchan?
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение pipneogen » 16 ноя 2017, 03:32

Спасибо всем. Прикладываю способ реализации в этом сообщении:
Диалплан на AEL написан. Крайне рекомендую использовать именно его, а не обычный conf (читается удобнее и пишется)

Код: выделить все
Кусок входящего экстеншена:
   workingtime => {
      ResetCDR(wv);  // Записываем CDR
      NoCDR();
                ...............
      Dial(SIP/200&SIP/201&SIP/202,10,Tt); // Группа вызова на внутренние номера
      WaitExten(2);
      Set(innum=${CDR(dst)});
      if("${DIALSTATUS}" = "ANSWER"); // Если подняли трубку внутренние номера - то продолжается выполнение текущего экста.
      else jump follow@main-menu;    // Если статус отличается от ANSWER - прыгаем в следующий экст
      StopMonitor();
      Hangup();
   };

.....

   follow => {
      Set(S=SIP/myphone/);
      NoOp(<--------- Dial Status: ${DIALSTATUS} ------->);
      NoOp(**** ЗВОНОК ПЕРЕВЕДЁН ********);
                Set(fname=${CHANNEL:4:3}/${STRFTIME(${EPOCH},,%Y/%m/%d/%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN}.wav);
                MixMonitor(${MIXMONITOR}/${fname});
                Set(CDR(filename)=${fname});
                Answer();
      Dial(${S}995*******&${S}995******,60,TtU(sendsms)); // группа вызова на мобильные - опция U отправляет после ответа в экст sendsms
      StopMonitor();
      Hangup();
   };

.......

context sendsms {
        s => {
                NoOp(********** ОТПРАВКА СМС **********);
      Set(outnum=${DIALEDPEERNUMBER});   // Задаём переменную для номера, который взял трубку
      NoOp(outnum=${outnum});  // Вывод результата в консоль
      Set(replace=${REPLACE(outnum,myphone/,)}); // Предыдущая переменная выглядела как технология/номер, тут удаляем лишнее
      NoOp(!!! --- outnum=${outnum}, replace=${replace} --- !!!); // выводим в консоль результат. В итоге остаётся только номер того, кто взял номер
                System(asterisk -rx 'dongle sms dongle0 ${replace} Vam zvonil ${CONNECTEDLINE(num)} v ${STRFTIME(${EPOCH},,%Y/%m/%d/-%H:%M)}'); // Отправка смс используя переменную в которой мы использовали номер взявшего трубку, в тело сообщения вставляем переменную, которая показывает кто звонил + указываем время звонка.
                Return();  // Возврат в основной экст после выполнения GoSub
        };


};



Может кому-то пригодится.
pipneogen
 
Сообщений: 15
Зарегистрирован: 14 янв 2016, 15:00
Откуда: Батуми

Re: AEL: Отправка СМС после followme с номером звонившего

Сообщение zzuz » 16 ноя 2017, 18:32

ael прикольный.
Парсится в тот же pbx_config dialplan в памяти , что и обычный conf, требует компиляции и крашится при любой синтаксической ошибке, не загружая весь остальной корректный диалплан.
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1457
Зарегистрирован: 21 сен 2010, 13:33

След.

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: Google Adsense [Bot], Zaharbaw и гости: 9

© 2008 — 2017 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH