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

Проблемы с 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, а то я уже в тупике, больше не знаю что можно сделать...

удалить закрыть спам изменить тег редактировать

спросил 2012-04-23 18:41:23 +0400

tor.zntu Gravatar tor.zntu
1 1 1 2

обновил 2012-04-23 22:52:15 +0400

1 Ответ

1

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

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

ответил 2012-04-23 19:14:24 +0400

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

обновил 2012-04-23 19:15:15 +0400

Comments

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

tor.zntu ( 2012-04-23 19:38:37 +0400 )редактировать

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

zzuz ( 2012-04-23 20:18:23 +0400 )редактировать

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

tor.zntu ( 2012-04-23 20:31:53 +0400 )редактировать

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

zzuz ( 2012-04-23 20:46:44 +0400 )редактировать

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

meral ( 2012-04-23 22:48:49 +0400 )редактировать

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

tor.zntu ( 2012-04-23 22:55:52 +0400 )редактировать

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

tor.zntu ( 2012-04-23 23:14:43 +0400 )редактировать

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

meral ( 2012-04-23 23:20:36 +0400 )редактировать

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

tor.zntu ( 2012-04-23 23:27:07 +0400 )редактировать

Ваш ответ

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 ленту новостей

Статистика

Задан: 2012-04-23 18:41:23 +0400

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

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

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