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

Звонок не поместился - как посмотреть?

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

Здравствуйте Уважаемые! Вопрос может быть уже обсуждался, а может он и совсем простой, но все же просидев сутки - пока что так и не понял решение.
FreeBSD 8.3, Asterisk 1.8.18
Дано: несколько шлюзов goip1, выход через них настроен с помощью chanisavail, статус у каналов бывает двух видов - 4 (есть в системе, но не зарегистрирован) и 3 (зарегистрирован, но в данный момент используется, т.е. занят).
Трафик на данные каналы идет пока что с одной учетки со стороннего (клиентского сервера), авторизуется он по IP. Возможно в дальнейшем еще учетки появятся.
Свободные для звонков каналы отлично выбираются, но периодически возникает ситуация когда все каналы недоступны (некоторые заняты, а некоторые не зарегистрированы). Так вот, в такой ситуации не создается канал в "core show channels", и соответственно в базу mysql вообще никаких данных о непрошедшем звонке не падает, даже со статусом FAILED. Ну и в такие моменты естественно клиентские звонки видя статус о недоступности уходят на альтернативные маршруты.
Задача: увидеть, на сколько часто происходит "отбивание" звонка нашей стороной. Сколько собственно говоря не прошло по причине, когда мои гейты заняты или недоступны. Соответственно исходя из этих данных можно будет увидеть - сколько каналов реально не хватает, какое количество трафика не может пройти через текущую емкость каналов.
Идеально если эти данные будут попадать в MYSQL, но если это не возможно - то хотя бы в файл какой....ума никак не приложу как такое реализовать можно.
Спасибо!

Added after 3 minutes:

Можно ограничить учетную запись клиента записью call-limit=n, но я думаю это мне ничего не даст...
#2

Пишите в текстовый файл

Вид примерно такой, под себя редактируйте

exten => s,1,System(echo ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} ${CUT(INVALID_EXTEN,-,2)} ${CALLERID(num)} \\>\\> ${CUT(INVALID_EXTEN,-,1)} >> /var/
#3

Спасибо, сейчас попробуем!
А мне это действие добавлять перед выбором свободного канала (chanisavail), или после него?
#4

Что то у меня явно не так...
Диалплан для теста:
Код:
[test_goip]
exten => _X.,1,Macro(test-goip,${EXTEN})


Макрос для теста:
Код:
[macro-test-goip]
exten=s,1,ChanIsAvail(SIP/goip009,as)
exten=s,2,System(echo ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} ${CUT(INVALID_EXTEN,-,2)} ${CALLERID(num)} \\>\\> ${CUT(INVALID_EXTEN,-,1)} >> /var/log/asterisk/goip_err.log
exten=s,n,NoOp(Availchan is ${AVAILCHAN}) ;
exten=s,n,NoOp(Availstatus is ${AVAILSTATUS}) ;
exten=s,n,Dial(${CUT(AVAILCHAN,,1)}/+${ARG1})
exten=s,n,Hangup()


goip009 в системе не существует, после выполнения chanisavail получаю:

Код:
[Nov 27 22:30:25] WARNING[18860]: pbx.c:4027 pbx_substitute_variables_helper_full: Error in extension logic (missing '}')
[Nov 27 22:30:25] WARNING[18860]: pbx.c:3654 func_args: Can't find trailing parenthesis for function 'CUT(INVALID_EXTEN,-,'?


Added after 18 minutes:

Подобные строчки в лог случайно не падают? NOTICE там какой или еще что...

Added after 21 minutes:

Кстати, а это случайно не те записи mysql, где disposition=failed?

Added after 7 minutes:

может вот эти строчки в логах:
cause 20 - Subscriber absent и cause 66 - Channel not implemented как то к моему вопросу относятся?
#5

гм, я наверное скажу опять глупость (с) но попробуйте поставить закрывающую скобку в System
Точку с запятой можно наверное то же убрать у нопов

_________________
Мы всегда можем уметь...
#6

Точно! спасибо! скобку забыл)))
а насчет знака ";" - он не мешает) там коммент был

Added after 4 minutes:

Правда мне это не очень помогло Sad Текстовый файл пишет, но:
При звонке через несуществующий гейт падает строчка "2012-11-27 23:40:23 >>", но так же и при удачном звонке через существующий канал - такая же вещь падает в файл.
#7

Какой статус у AVAILSTATUS в случае ошибки? Какой AVAILCHAN в случае если канала нет?
Может с ними поиграть?

_________________
Мы всегда можем уметь...
#8

AVAILSTATUS есть у каждого канала, если свободен = 1, если занят=3, если не зареган=4. Я диалпланом выбираю тот, у которого цифра 1. Тогда звонок нормально проходит.
Сейчас вот что нашел, ${HANGUPCAUSE}, т.е. причина сброса. Вызывается эта переменная если не прошел звонок (не было каналов/были заняты). Переменная нормально код возвращает - define AST_CAUSE_CHAN_NOT_IMPLEMENTED 66.
И в общем исходя из всего этого, в диалплане появилась строчка следующего вида:
exten=s,n,System(echo ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} Hangupcause is ${HANGUPCAUSE} >> /var/log/asterisk/goip_err.log)
И я счастлив))
Единственный вопрос - chan not implemented (66) - это точно оно?)))