Страница 1 из 3

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

Добавлено: 08 окт 2015, 18:02
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

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

Добавлено: 08 окт 2015, 18:38
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 "Пропущенный" мой@ящик);
попробуйте так , мог ошибиться в синтаксисе , посмотрите сами

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

Добавлено: 08 окт 2015, 18:44
ded
Начиная с версии Астериск 0.6 есть стандартный модуль Voicemail и простейший пример с макросом stdexten для голосовой почты в каждом (!) дефолтном sip.conf
Почему же Вы не читаете?

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

Добавлено: 08 окт 2015, 18:56
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 и записи разговоров и т.п.

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

Добавлено: 08 окт 2015, 19:11
serg
Вся эта кухня делается для запуска сценария в не рабочее время нашей организации, т.е. с 19:00 до 9:00
В сценарии указаны моб. телефоны дежурных на удаленке.
Как говорят сотрудники компании, они не могут дозвонится.
Как я уже говорил, сотрудникам компании работающим с 19:00 до 9:00 просто лень ждать. По сценарию 30 секунд дозвона до дежурного, потом голосовое уведомление. Но по логам видно, что сотрудники тупо 2-5 секунд ждут и завершают вызов. На след. день жалуются что не дозвониться.
Прошу не обобщать почему такие сотрудники и почему нет локального дежурного :) Такие обстоятельства у нас.

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

Добавлено: 08 окт 2015, 21:03
Zavr2008
Можно сделать через побочный продукт MixMonitor например, наверняка делаете записи же)
Там в параметрах можно по окончании записи вызвать скрипт, там можно и отсылку сделать нужную..

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

Добавлено: 08 окт 2015, 21:17
serg
омг :| либо никто в тему вопроса не втыкает, либо лыжи не поехали..

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

Добавлено: 08 окт 2015, 22:06
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)
который бы отрабатывал так, как нужно.
Где сделать проверку - кто кладёт трубку.

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

Добавлено: 09 окт 2015, 08:22
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

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

Добавлено: 09 окт 2015, 10:36
serg
virus_net, не канает.
h отрабатывает в обоих случаях DIALSTATUS при ANSWER и NOANSWER
wtf?