First time here? Check out the FAQ!

Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Проблемы с SIP presence. Залипает Idle статус для отключенных extensions.

0

Здравствуйте. Пользуемся Asterisk 1.8.6.0(поднят на Centos 5.5). Extensions хранятся в БД mysql, также mysql используется для настройки hints(настраивал используя этот топик: текст ссылки), для звонков используем SIP клиент X-Lite(клиенты сидят за NAT в нескольких разных подсетях). С presense появилось несколько проблем:

  1. Иногда при выключении клиента в адресных книгах других клиентов у него остается онлайн статус, при этом core show hints также показывает для него Idle статус
  2. При добавлении в адресную книгу клиента несуществующего аккаунта этому аккаунту тоже присваивается онлайн статус, при этом в консоли сервера вижу:

-- Added extension '123*1234' priority -1 to status

В sip.conf включено кэширование и автоматически выполняется sip reload. Параметр qualify=yes прописан непосредственно в базе для каждого extensions. Настройки sip.conf:

[general] 
context
=phones
allowexternalinvites
=no
trustrpid
=no
allowsubscribe
=yes
subscribecontext
=status
useclientcode
=yes
notifyringing
=yes
notifyhold
=yes
limitonpeers
=yes
callcounter
=yes
disallow
=all
allow
=ulaw
allow
=alaw
allow
=gsm
rtcachefriends
= yes
rtcache
=yes
callevents
=yes
srvlookup
=yes

nat
=yes
externhost
=mydomain
externip
=mydomainip
fromdomain
=mydomain
localnet
=0.0.0.0/255.255.255.0
localnet
=mydomainip/255.255.255.0
localnet
=192.168.1.0/255.255.255.0

recordhistory
=yes
allowguest
=no
alwaysauthreject
=yes
realm
=mydomain

limitonpeers
=yes
incominglimit
=2
progressinband
=yes
call
-limit=6

bindport
=XXXX
bindaddr
=0.0.0.0

maxexpirey
=240
defaultexpirey
=240

allowoverlap
=no
udpbindaddr
=0.0.0.0
tcpenable
=no
tcpbindaddr
=0.0.0.0
srvlookup
=yes

extensions.conf:

[internal]    
exten
=> _XXX*XXXX,1,ChanIsAvail(SIP/${EXTEN},s)
exten
=> _XXX*XXXX,n,NoOp(${AVAILSTATUS})
exten
=> _XXX*XXXX,n,NoOp(SIP/${EXTEN} has state ${DEVICE_STATE(SIP/${EXTEN})})
exten
=> _XXX*XXXX,n,GotoIf($["${DEVICE_STATE(SIP/${EXTEN})}" = "UNKNOWN"]?100)
exten
=> _XXX*XXXX,n,GotoIf($["${DEVICE_STATE(SIP/${EXTEN})}" = "UNAVAILABLE"]?100)    
exten
=> _XXX*XXXX,n,Dial(SIP/${EXTEN},30,tTw)
exten
=> _XXX*XXXX,n,Noop(${DIALSTATUS})
exten
=> _XXX*XXXX,n,Hangup()    
exten
=> _XXX*XXXX,100,Set(DEVICE_STATE(Custom:SIP/${EXTEN})=UNAVAILABLE)
exten
=> _XXX*XXXX,hint,Custom:SIP/${EXTEN}      
exten
=> _XXX*XXXX,101,NoOp(${Custom:SIP/${EXTEN}})
exten
=> _XXX*XXXX,102,NoOp(SIP/${EXTEN} has state ${DEVICE_STATE(SIP/${EXTEN})})
;exten => _XXX*XXXX,100,Set(EXT_STATE="UNAVAILABLE")
exten
=> _XXX*XXXX,103,Playback(prepaid-dest-unreachable)    ;(unavailable)
exten
=> _XXX*XXXX,104,Hangup()

[status]
exten
=> _XXX*XXXX,hint,${CUT(REALTIME(hints,exten,${EXTEN},:,:),:,4)}

[phones]    
include
=> internal
include
=> status
include
=> parkedcalls

В контексте [internal] пытаюсь при звонке на залипшие или удаленные из базы extensions с помощью DEVICE_STATE проверять состояние и устанавливать принудительно оффлайн статус, перепробовал уже много вариантов но пока безрезультатно. Если установить

subscribecontext=internal

функция Set отрабатывает и сервер отправляет subscribe notify с новым статусом клиентам, но статусы перестают работать автоматически и всем существующим extensions присваивается Idle статус. Подскажите как наладить работу presense, а то я уже в тупике, больше не знаю что можно сделать...

спросил Apr 23 '12

tor.zntu Gravatar tor.zntu
1 1 1 2

обновил Apr 23 '12

1 Ответ

1

заметьте,у вас включено кеширование. тоесть ПОСЛЕ удалений из базы вы обязаны убрать екстеншен из астериска командой вида

asterisk -rx "sip prune realtime peer XXXX"
ссылка удалить спам редактировать

ответил Apr 23 '12

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил Apr 23 '12

Comments

спасибо за ответ. попробовал эту команду, и получил ответ Peer '123*1234' not found. И команда sip show peers действительно не показывает ничего для таких пиров. Их видно только при core show hints

tor.zntu (Apr 23 '12)edit

У вас нет такого пира , а сообщение " Added extension '123*1231213' priority -1 to status" говорит о диаплане, а не сип устройстве.

zzuz (Apr 23 '12)edit

да, я это понимаю, но не могу придумать как это исправить

tor.zntu (Apr 23 '12)edit

То есть Вы не знаете какие у вас в вашей системе номера? Не находите это странным?

zzuz (Apr 23 '12)edit

как вариант вы можете включить кеширование в mysql и проверять на наличие номера в базе через realtime. mysql в режиме кеширования влегкую справляется с 10к запросов в секунду. 50Мб кеширования вполен хватит.

meral (Apr 23 '12)edit

zzuz простите, ошибся при написании поста, уже исправил, имелось в виду: " Added extension '123*1234' priority -1 to status"

tor.zntu (Apr 23 '12)edit

meral спасибо за подсказку, почитаю как это делать, извините я недавно занимаюcь Linux и Asterisk

tor.zntu (Apr 23 '12)edit

http://asterisk-support.ru/question/1864/kak-sdelat-vybroku-cdr-cherez-realtime ну имена таблиц поменять. а в mysql погуглите или вот http://habrahabr.ru/post/41166/

meral (Apr 23 '12)edit

спасибо, завтра займусь)) как чет получится отпишусь

tor.zntu (Apr 23 '12)edit

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: Apr 23 '12

Просмотрен: 2,066 раз

Обновлен: Apr 23 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.