AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Уведомление о пропущенных вызовах - не работает

Newbies/FAQ Forum 8 сообщений -
#1

Добрый день уважаемые форумчане!
Ни как не могу понять в чем собака зарыта:
настраиваю уведомление о пропущенных в очереди и из cli не отправляется уведомление на email.
Что сделал:
1) В файле /etc/asterisk/extensions_override_freepbx.conf прописал:
Код:
[ext-queues]
exten => h,1,ExecIf($["${CDR(dstchannel)}"=""]?System(/usr/local/bin/sendEmail.pl -f sender@email -t my@email -u "Пропущенный звонок" -m "Пропущен звонок из очереди ${NODEST} с номера ${CALLERID(num)}" -o message-charset=UTF-8))
exten => h,2,Macro(hangupcall,)

2) Установил и настроил скрипт sendEmail.pl

Из консоли сервера письма прекрасно отправляются, но по какой-то причине из cli Asterisk не уходят.
В логе работы Asterisk, я вижу, что Asterisk
Код:
System(/usr/local/bin/sendEmail.pl -f sender@email -t my@email -u "Пропущенный звонок" -m "Пропущен звонок из очереди ${NODEST} с номера ${CALLERID(num)}" -o message-charset=UTF-8)
отдает системе, но письма не приходят.

Подскажите в какую сторону копать или хотя бы где дебаг отправки можно посмотреть? Покопался не нашел.

Added after 1 hours 40 minutes:

Пытаясь разобраться попробовал включить уведомление если вызов завершается на ИВР - как ни странно, письмо успешно отправилось.
Если вызов завершается на Очереди, то в трейс отправляется команда, но письмо не приходит.

Added after 19 minutes:

Пропустил двоеточие.

[ext-queues]
exten => h,1,ExecIf($["${CDR(dstchannel)}"=""]?:System(/usr/local/bin/sendEmail.pl -f sender@email -t my@email -u "Пропущенный звонок" -m "Пропущен звонок из очереди ${NODEST} с номера ${CALLERID(num)}" -o message-charset=UTF-Very Happy
exten => h,2,Macro(hangupcall,)

Теперь все работает. Всем спасибо.
#2

В общем вчера тупанул.

Код:
exten => h,1,ExecIf($["${CDR(dstchannel)}"=""]?System(/usr/local/bin/sendEmail.pl -f ...


По какой-то причине не отрабатывается "${CDR(dstchannel)}"=""
Правильно понимаю логику ExecIf - если выполняется условие, что dstchannel равен любому значению, то далее выполняется System (в моем случае скрипт отправки почты)?
И скриншота выше видно, что "${CDR(dstchannel)}"="" принимает значение "SIP/trunk_7..." , но почему-то не выполняется System.

Пробовал с GotoIf:
Код:
exten=>h,n,GotoIf($["${CDR(dstchannel)}"=""]?:hangup)

Обработка сразу бегает на параметр с меткой "hangup".

Помогите, пожалуйста, безуспешно бьюсь...
#3

Цитата:
GotoIf(condition?label1:label2)


If "condition" is true, go to "label1". If condition is false, go to "label2".


В случае:

Код:
exten=>h,n,GotoIf($["${CDR(dstchannel)}"=""]?:hangup)


если dstchannel равен пустому значению перейти к следующей строке, иначе перейти к метке hangup

Для ExecIf тоже самое.

Код:
exten => h,1,ExecIf($["${CDR(dstchannel)}"=""]?System(/usr/local/bin/sendEmail.pl -f ...


System будет вызван только в случае если dstchannel равен пустому значению
#4

То есть получается необходимо задавать имя канала, в который поступил звонок?
А можно ли задать имя канала с помощью шаблона (транков много), например SIP/trunk_(далее любое кол-во символов и знаков)?
#6

Код:
exten => h,1,ExecIf($["${REGEX("SIP/trunk" ${CDR(dstchannel)})}"="1"]?System(/usr/local/bin/sendEmail.pl -f


В трейсе для System возвращается 0 (0?System) и письмо не отправляется, я где-то в теле диалплана намудрил?

Added after 2 hours 9 minutes:

Немного поковырял понял проблему.
В тот момент когда вызов попал в очередь имя канала, в который поступил вызов (если очередь настроена на дозвон одновременно только одному), имеет следующий вид: Local/301@from-queue-000078e7;1, соответственно, если 301 возьмет трубку, имя канала не изменится.
Если рассматривать канал из которого пришел вызов, то он будет иметь следующий вид: SIP/trunk_7...-000003c4

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

Каким образом это можно реализовать?
#7

Такая же проблема как решить напишите сюда буду очень признателен
#8

Существует еще проблема с правами. Астериск не запустит файл, на который у него нет прав. Положите необходимые файлы в /home/asterisk
У меня пропущенные звонки (те, кто не дождался ответа в очереди) фиксируются в отдельный файлик (Используется system, вызывается echo с переменными, в которых содержится номер звонящего и текущее состояние телефона) по тому же принципу, что и у вас. Если файл не в папке /home/asterisk или на него нет прав, то соответственно ничего в него не пишется.