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

Получение статуса всех extensions

Добавлено: 09 фев 2017, 14:56
wsotest.512
Есть Asterisk 13.8-cert4 c Realtime Database Configuration (PostgreSQL) и пачкой extensions (PJSIP).
Встал вопрос - как быстро и эффективно извне (стороннему приложению\сервису) получить статус всех extensions (endpoints)?
Как минимум должна быть быть информация о номере extension (endpoint), его статус (Not in use, In Use, Unavailable итд). Что-то вроде выхлопа команды *CLI> pjsip show endpoints.

PS. "Костыли" вроде {for i=1..100 ; do asterisk -rx "pjsip show endpoint $i " | grep "In Use"; } чур не предлагать :roll: Работает очень не быстро.

Re: Получение статуса всех extensions

Добавлено: 09 фев 2017, 15:55
ded
Мы разработали вэб интерфейс для Realtime моделей на базе Drupal.
Бесплатно поделиться не сможем, много сил и трудочасов вложено, и пока без отдачи.

Скриншот прилагается.

Изображение

Re: Получение статуса всех extensions

Добавлено: 09 фев 2017, 16:11
wsotest.512
ded, спасибо, конечно за предложение - но, у нас в нём надобности нет
единственное что могло бы нам пригодиться - кусок кода про получение статуса всех extensions, если он увас есть ( на скриншоте статусов не видно)

Re: Получение статуса всех extensions

Добавлено: 09 фев 2017, 16:35
ded
В отображение клиентов можно вывести любые данные (а их очень много) из таблиц. Кусок кода вас не спасёт :(
Владеете зыком запросов SQL?

Re: Получение статуса всех extensions

Добавлено: 09 фев 2017, 17:15
Zavr2008
ТС, курите тему hints, Asterisk distibuted presense итп.
Тут на форуме это всплывает временами, кроме того на AsterConf Литни показывал как это можно делать довольно просто..

Re: Получение статуса всех extensions

Добавлено: 10 фев 2017, 14:14
Repz
Присосаться к астеру через ami, парсить выхлоп и в случае нужного event обрабатывать результат.

Re: Получение статуса всех extensions

Добавлено: 10 фев 2017, 14:49
ded
Представьте - например 10 000 пиров, скорость считывания эвентов в AMI?

Re: Получение статуса всех extensions

Добавлено: 10 фев 2017, 16:42
Repz
10000 не представлю, это уже не астериск а беременная лошадь))) а 300 - 700 вполне себе нормально.

Re: Получение статуса всех extensions

Добавлено: 15 фев 2017, 12:37
wsotest.512
Мы решили пойти другим путём ;) - через публикацию присутствия. Пулять все изменения статуса экстеншенов в сторону opensips (kamailio), а тот должен их ловить и складыватьв свою бд. Из которой мы и будем брать актуальное состояние.

На астере сконфгурирован внешний получатель :
pjsip.conf

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

[opensips-devicestate] 
type=outbound-publish 
server_uri=sip:10.10.10.10 
event=asterisk-devicestate
вот что улетает в сообщении SIP PUBLISH:

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

Event: asterisk-devicestate
Expires: 3600
Max-Forwards: 70
User-Agent: Asterisk PBX certified/13.8-cert4
Content-Type: application/json
Content-Length:   105

{"state":"INVALID","type":"devicestate","device":"PJSIP/opensips","cachable":1,"eid":"00:11:22:33:44:55"}
Но весь затык как раз в opensips - он не понимает такого сообщения и в ответ отдаёт

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

SIP/2.0 489 Bad Event
Via: SIP/2.0/UDP 10.10.10.10:5060;received=10.10.10.10;rport=5060;branch=z9hG4bKPj0d0b5714-228a-4c1e-a052-fdf645c6b5

From: <sip:10.10.10.10>;tag=814fbe2d-64f6-4101-9c54-fbd152616cea
To: <sip:10.10.10.10>;tag=dcf6bbc9d72d34557cc678c8da66fe84.39b4
Call-ID: 7014e9fa-13d0-4303-827a-db0fd13b79d4
CSeq: 13093 PUBLISH
Allow-Events:
Server: OpenSIPS (2.2.1 (x86_64/linux))
Content-Length: 0
В лог самого opensips падает такое сообщение:

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

ERROR:presence:handle_publish: Missing or unsupported event header field value
ERROR:presence:handle_publish: #011event=[asterisk-devicestate]
Никто не сталкивался с таким извращением Asterisk + opensips + presence publish ?

Re: Получение статуса всех extensions

Добавлено: 15 фев 2017, 13:22
ded
Смотрите: вот кусок пакета INVITE от Астериск

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

CSeq: 102 INVITE
User-Agent: FPBX-2.10.1(11.23.1)
Date: Wed, 15 Feb 2017 10:13:32 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
в строке Allow перечислено, что он понимает. Если найдёте такую строку от OpenSIPS (2.2.1 (x86_64/linux), то там не будет PUBLISH, о чём он собственно и сообщает. Никакого извращения тут нет. Старые Астериски не понимали PUBLISH, MESSAGE, и ничего, работали без извращений. Это всё от Skype зараза, хотят вишь ли - статус присутствия, переписываться, всё как там.