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

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

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

tor.zntu Gravatar tor.zntu

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

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

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

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

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