Страница 1 из 1

BLF по PJSIP в Asterisk13

Добавлено: 28 янв 2016, 12:21
tol_iwan
Суть в том, что хочется мониторить состояние абонента другого Asterisk. Оба Asterisk 13.
В документации написано, что 13 через PJSIP вроде умеет, но что-то я не разобрался как это настроить.
Кто-нибудь делал?
Информации, кроме как на wiki.asterisk.org не нашел, но там ее не много и без примеров...

Re: BLF по PJSIP в Asterisk13

Добавлено: 28 янв 2016, 18:06
SolarW
http://forum.asterisk.ru/viewtopic.php? ... 918#p61597 - тут, конечно, не про PJSIP но вдруг тоже пригодится?

Re: BLF по PJSIP в Asterisk13

Добавлено: 29 янв 2016, 09:13
tol_iwan
Да, читал. Решение интересное, но хотелось бы тем, что вроде бы для этого создано, а именно второй вариант из предложенного там:
- PJSIP: в новом канале есть распределенные состояния (res_pjsip_pubsub.so), однако от примеров конфигов дымится моск.

Пока разбираюсь с ним.

Re: BLF по PJSIP в Asterisk13

Добавлено: 01 фев 2016, 16:53
tol_iwan
Вообщем удалось реализовать задуманное на голом без XMPP и WebSocet.
Вдруг кому понадобится.
Статус отслеживается, BLF работает.
Тестировалось на:
- Asterisk 13.3.2 на CentOS 6.5 - 2 тестовых виртуалки
- софтфон MicroSIP на Windows10
- телефон Grandstream GXP2200 с панелью GXP2200EXT
- софтфон Grandstream Vawe на Android
Делалось на основе статьи
Собственно там почти все есть, а собственно настройка pjsip.conf:
Из оригинала убрал мониторинга почтовых ящиков и в entpoint добавил transport.
Asterisk 1
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[instance2]
type=endpoint
transport=transport-udp

[instance2-devicestate]
type=outbound-publish
server_uri=sip:instance1@172.16.20.4
event=asterisk-devicestate

[instance2]
type=inbound-publication
event_asterisk-devicestate=instance2

[instance2]
type=asterisk-publication
devicestate_publish=instance2-devicestate
device_state=yes
Asterisk 2
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[instance1]
type=endpoint
transport=transport-udp

[instance1-devicestate]
type=outbound-publish
server_uri=sip:instance2@172.16.2.13
event=asterisk-devicestate

[instance1]
type=inbound-publication
event_asterisk-devicestate=instance1

[instance1]
type=asterisk-publication
devicestate_publish=instance1-devicestate
device_state=yes
Телефоны тоже через pjsip. На всякий случай моя конфигурация:
Asterisk 1
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[transport-udp]
type=transport
protocol=udp
bind=172.16.2.13

[endpoint-local](!)
type=endpoint
transport=transport-udp
context=internal
disallow=all
allow=alaw

[auth-local](!)
type=auth
auth_type=userpass
password=DerPassword

[aors-local](!)
type=aor
max_contacts=2
default_expiration=600
maximum_expiration=600
minimum_expiration=600
;================================ телефоны ============================
[777](endpoint-local)
auth=auth777
aors=777

[auth777](auth-local)
username=777

[777](aors-local)

[778](endpoint-local)
auth=auth778
aors=778

[auth778](auth-local)
username=778

[778](aors-local)

[779](endpoint-local)
auth=auth779
aors=779

[auth779](auth-local)
username=779

[779](aors-local)
Asterisk 2 аналогично, только адрес соответственно 172.16.20.4 и номера внутренние 780, 781, 782.

Собственно проблемой стало(для меня по крайней мере) выяснить как прописывать для мониторинга сами номера другого Asterisk.
Оказалось все просто - точно также как и для локальных номеров:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[default]
extension.conf - для обоих Asterisk одинаково
exten => 777,hint,PJSIP/777
exten => 778,hint,PJSIP/778
exten => 779,hint,PJSIP/779
exten => 780,hint,PJSIP/780
exten => 781,hint,PJSIP/781
exten => 782,hint,PJSIP/782

; Ну собственно? чтобы вызовы бегали локальные
[internal]
exten => _7XX,1,Dial(PJSIP/${EXTEN})
same => n,Hangup()
Также оказалось неожиданностью, что вносимые изменения действуют не сразу, для уверенности приходилось перегружать Asterisk. В конце изысканий столкнулся с ситуацией как в комментариях к указанной статье, когда один Asterisk мониторил состояние абонентов второго, а наоборот нет. После отключения учеток на всех телефонах и перезагрузки виртуалок все заработало.

В итоге Grandstream имел на себе две учетки с обоих Asterisk:
779 с подпиской состояния 780-782
780 с подпиской состояния 777-779
MicroSIP(778 и 781) и GS Vawe(777 и 782) аналогично, за исключением, что одновременно на них активной была только одна учетка.

Показанные состояния:
GXP2200 свободен - горит зеленый, звонит - мигает красный, занят - горит красный, при недоступности - горит зеленый.
MicroSIP свободен - горит зеленый, звонит - горит красный(должен желтый вроде быть), занят - горит красный, при недоступности - горит красный.
GS Vawe свободен - горит зеленый, звонит - горит красный, занят - горит красный, при недоступности - горит зеленый.

Вообщем чего хотел - я добился.
Рабочий Asterisk пока 11, после перехода на 13 будем пробовать на нагруженной системе. Но этот переход не сейчас :-)

Re: BLF по PJSIP в Asterisk13

Добавлено: 02 фев 2016, 11:16
tol_iwan
Хотя погорячился. Проблема, когда после перезапуска одного из Asterisk он перестает получать статусы со второго, остается.
На asterisk.org значится вроде как нерешенной проблема - https://issues.asterisk.org/jira/browse/ASTERISK-25229
Последнее сообщение:
I was able to reproduce the issue by stopping and starting one Asterisk instance from the CLI. After it came back up, the other instance would no longer publish state, yet the instance that was just started back would continue to publish state. There was at least one time where this issue didn't occur. There must be some aspect of timing involved.
Кто-нибудь может подсказать о каких таймингах идет речь?

Re: BLF по PJSIP в Asterisk13

Добавлено: 02 фев 2016, 11:32
ded
Видимо, о SIP таймерах?

Код: Выделить всё

 Session Expires:        1800 secs
  Session Min-SE:         90 secs
  Timer T1:               500
  Timer T1 minimum:       100
  Timer B:                32000

Re: BLF по PJSIP в Asterisk13

Добавлено: 09 фев 2016, 08:12
tol_iwan
Пока решал - вышел патч вроде как. В указанной выше ветке asterisk.org по крайней мере отписались. Буду проверять.

Re: BLF по PJSIP в Asterisk13

Добавлено: 10 фев 2016, 11:08
tol_iwan
Толи патч не работает, то ли руки кривые. Ситуация не изменилась - при рестарте одного asterisk остальные перестают ему слать статусы.
Таким образом, если надо рестартануть один asterisk, то нужно остановить все, потом запустить в любом порядке.
А в целом статусы бегают нормально, индикация работает.