VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

BLF по PJSIP в Asterisk13

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

BLF по PJSIP в Asterisk13

Сообщение tol_iwan »

Суть в том, что хочется мониторить состояние абонента другого Asterisk. Оба Asterisk 13.
В документации написано, что 13 через PJSIP вроде умеет, но что-то я не разобрался как это настроить.
Кто-нибудь делал?
Информации, кроме как на wiki.asterisk.org не нашел, но там ее не много и без примеров...
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: BLF по PJSIP в Asterisk13

Сообщение SolarW »

http://forum.asterisk.ru/viewtopic.php? ... 918#p61597 - тут, конечно, не про PJSIP но вдруг тоже пригодится?
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: BLF по PJSIP в Asterisk13

Сообщение tol_iwan »

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

Пока разбираюсь с ним.
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: BLF по PJSIP в Asterisk13

Сообщение 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 будем пробовать на нагруженной системе. Но этот переход не сейчас :-)
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: BLF по PJSIP в Asterisk13

Сообщение 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.
Кто-нибудь может подсказать о каких таймингах идет речь?
ded
Сообщения: 15630
Зарегистрирован: 26 авг 2010, 19:00

Re: BLF по PJSIP в Asterisk13

Сообщение ded »

Видимо, о SIP таймерах?

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

 Session Expires:        1800 secs
  Session Min-SE:         90 secs
  Timer T1:               500
  Timer T1 minimum:       100
  Timer B:                32000
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: BLF по PJSIP в Asterisk13

Сообщение tol_iwan »

Пока решал - вышел патч вроде как. В указанной выше ветке asterisk.org по крайней мере отписались. Буду проверять.
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: BLF по PJSIP в Asterisk13

Сообщение tol_iwan »

Толи патч не работает, то ли руки кривые. Ситуация не изменилась - при рестарте одного asterisk остальные перестают ему слать статусы.
Таким образом, если надо рестартануть один asterisk, то нужно остановить все, потом запустить в любом порядке.
А в целом статусы бегают нормально, индикация работает.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH