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

Уведомление на почту

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

serg
Сообщения: 109
Зарегистрирован: 10 окт 2013, 18:44

Уведомление на почту

Сообщение serg »

Мужики, помогите, чердак поехал :)

Сделал сценарий под задачи: Уведомление о пропущенных вызовах.

[local]
exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);
exten => _X.,3,Hangup();

Сценарий отрабатывает на ура, приходит на почту все что мне нужно, НО как быть если вызывающий абонент решил завершить вызов, не дождавшись ответа? Сам завершил вызов в общем

Если сделать так:

[local]
exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,Hangup();
exten => h,1,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);

То работает конечно и опять проблема, когда один из абонентов завершает вызов при разговоре отрабатывает h,1,System....

А если сделать так:

[local]
exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,Goto(sendemail,s,1);
exten => _X.,2,Hangup();

[sendemail]
exten => s,1,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);

То на почту приходит уведомление с полем Кому как s т.е. перешли в другой контекст и ${CDR(dst)} отрабатывает уже как s, не показывает кому звонили.

Пытался копнуть в сторону HANGUPCAUSE со статусами, не получилось, может я не так делаю, плз хелп.

NoOp(${HANGUPCAUSE}) выводи код ошибки 0 если завершаю вызов не дождавшись ответа и код 16 если завершить уже при разговоре.

Пробовал сделать так:

exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,GotoIf($["${HANGUPCAUSE}" = "0"]?:4);
exten => _X.,3,Hangup();
exten => _X.,4,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);

HANGUPCAUSE вообще не реагирует, в консоле тишина

Что не так делаю?

Установлен Asterisk 11
april22
Сообщения: 2187
Зарегистрирован: 09 июл 2012, 09:47

Re: Уведомление на почту

Сообщение april22 »

Код: Выделить всё

[local]
exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,Macro(sendemail,${CALLERID(number)});
exten => _X.,2,Hangup();

Код: Выделить всё

[macro-sendemail]
exten => s,1,System(echo Кто: ${ARG1} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);
попробуйте так , мог ошибиться в синтаксисе , посмотрите сами
Своими вопросами , вы загоняете меня в ГУГЛЬ.
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Уведомление на почту

Сообщение ded »

Начиная с версии Астериск 0.6 есть стандартный модуль Voicemail и простейший пример с макросом stdexten для голосовой почты в каждом (!) дефолтном sip.conf
Почему же Вы не читаете?
serg
Сообщения: 109
Зарегистрирован: 10 окт 2013, 18:44

Re: Уведомление на почту

Сообщение serg »

О! Спасибо за ответ, но фишка не в этом.

Как вы предложили, работает и у меня:

[local]
exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);
exten => _X.,3,Hangup();

Сценарий отрабатывает на ура, приходит на почту все что мне нужно, НО как быть если вызывающий абонент решил завершить вызов, не дождавшись ответа? Сам завершил вызов в общем

Мне нужно отловить этот момент и прислать на почту. Т.е. со слов сотрудника как говорит он пытался дозвониться но не дозвонился. Пусть даже в сценарии будет набор номера Dial 100 сек. Сотрудник говорит что очень долго ждал, но по логам видно что были вызовы длительностью не 100 секунд, а по 5-10. Ему просто лень ждать. Надо наказать засранца! А таких как он не один, а около 1000 товарищей.
exten => _X.,2,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} Когда ${STRFTIME(${EPOCH},,%Y-%m-%d-%H:%M)} Длительность вызова ${CDR(duration)} сек | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);

У меня все работает норм, но только если использовать h в local тогда при завершении разговора срабатывает скрипт отправки на почту. Это не нужно.
А если выводить отправку на почту в другой контекст, тогда в поле кому прилетает s или то что я поставлю в exten =>

Я не привожу весь конфиг, а отрабатываю на тестовом астере. Смысла не вижу сюда весь конфиг пихать, т.к. там и авая с ooh323 и записи разговоров и т.п.
serg
Сообщения: 109
Зарегистрирован: 10 окт 2013, 18:44

Re: Уведомление на почту

Сообщение serg »

Вся эта кухня делается для запуска сценария в не рабочее время нашей организации, т.е. с 19:00 до 9:00
В сценарии указаны моб. телефоны дежурных на удаленке.
Как говорят сотрудники компании, они не могут дозвонится.
Как я уже говорил, сотрудникам компании работающим с 19:00 до 9:00 просто лень ждать. По сценарию 30 секунд дозвона до дежурного, потом голосовое уведомление. Но по логам видно, что сотрудники тупо 2-5 секунд ждут и завершают вызов. На след. день жалуются что не дозвониться.
Прошу не обобщать почему такие сотрудники и почему нет локального дежурного :) Такие обстоятельства у нас.
Аватара пользователя
Zavr2008
Сообщения: 2215
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Уведомление на почту

Сообщение Zavr2008 »

Можно сделать через побочный продукт MixMonitor например, наверняка делаете записи же)
Там в параметрах можно по окончании записи вызвать скрипт, там можно и отсылку сделать нужную..
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
serg
Сообщения: 109
Зарегистрирован: 10 окт 2013, 18:44

Re: Уведомление на почту

Сообщение serg »

омг :| либо никто в тему вопроса не втыкает, либо лыжи не поехали..
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Уведомление на почту

Сообщение ded »

Неинтереснаятема. Служит для того, чтобы приструнит ваших нерадивых васюков.
если вызывающий абонент решил завершить вызов, не дождавшись ответа, то в диалплане

Код: Выделить всё

exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);
exten => _X.,3,Hangup();
второй шаг не исполняется.
И поэтому нужно всё-же Вам подумать над сценарием macro-hangup,
exten => _X.,3,Macro(hangup)
который бы отрабатывал так, как нужно.
Где сделать проверку - кто кладёт трубку.
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Уведомление на почту

Сообщение virus_net »

serg писал(а):Если сделать так:

[local]
exten => _X.,1,Dial(SIP/${EXTEN},10);
exten => _X.,2,Hangup();
exten => h,1,System(echo Кто: ${CALLERID(number)} Кому: ${CDR(dst)} | /usr/sbin/sendmail -F "Пропущенный" мой@ящик);

То работает конечно и опять проблема, когда один из абонентов завершает вызов при разговоре отрабатывает h,1,System....
Ну а кто мешает в шаге h проверить DIALSTATUS вызова и выполнять System ТОЛЬКО если DIALSTATUS НЕ ANSWERED ? Asterisk cmd ExecIf
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
serg
Сообщения: 109
Зарегистрирован: 10 окт 2013, 18:44

Re: Уведомление на почту

Сообщение serg »

virus_net, не канает.
h отрабатывает в обоих случаях DIALSTATUS при ANSWER и NOANSWER
wtf?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH