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

JABBER_STATUS по JID без Resource

Добавлено: 13 апр 2016, 17:05
tonny_bennet
Здравствуйте.

Вопрос наверное поднимавшийся не раз, но для меня не решён до конца:
Есть функция, возвращающая числовое значение статуса аккаунта Jabber - JABBER_STATUS. В описании сказано что аргументами должен быть jid или full jid (/resource)

https://wiki.asterisk.org/wiki/display/ ... BER_STATUS
Syntax

JABBER_STATUS(account,jid)

Arguments
account - The local named account to listen on (specified in jabber.conf)
jid - Jabber ID of the buddy to receive message from. It can be a bare JID (username@domain) or a full JID (username@domain/resource).
У меня определяется статус с указанием resource, а без него отдаёт статус 7 - not in roster. В сети много подобных вопросов и все ответы заканчиваются тем что используйте full jid.
Проблема заключается в том, что я наперёд не знаю какой ресурс мне подставить т.к. в общем он может быть любым PSI, PSI+, QIP и т.д. JID из базы я дёрну, а вот как узнать с какого клиента его запустили - не факт.

Есть ли этому понятное объяснение и может быть какое-то решение?

В качестве сервера использую ejabberd с автоматическим формированием ростера из LDAP (AD).

Re: JABBER_STATUS по JID без Resource

Добавлено: 15 апр 2016, 12:05
tonny_bennet
Ещё раз перерыл весь интернет и ничего так и не нашёл. Немного накостылял, приняв то, что у меня может быть только два клиента PSI+ и QIP. Ниже кусок диалплана на ael который у меня получился
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: jabber_status

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

    if ("${jid}"!="") {
          Set(jabb_psi=${JABBER_STATUS(jabber,${jid}/PSI+)});
         Set(jabb_qip=${JABBER_STATUS(jabber,${jid}/QIP)});

        Set(jabb_status=$[${jabb_psi} + ${jabb_qip} - 7]);

switch (${jabb_status}) {
    case 1:
               NoOp (JID: ${jid} Online);
              break;
    case 2:
               NoOp (JID: ${jid} Chatty);
               break;
    case 3:
               NoOp (JID: ${jid} Away);
               break;
    case 4:
               NoOp (JID: ${jid} XAway);
               break;
    case 5:
               NoOp (JID: ${jid} DND);
               break;
    case 6:
               NoOp (JID: ${jid} Offline);
               break;
    case 7:
               NoOp (JID: ${jid} Not in roster);
               break;
    default:
               NoOp (Что-то пошло не так!!!);
               };
    }
    else
    {
return;
    };

Re: JABBER_STATUS по JID без Resource

Добавлено: 18 апр 2016, 14:13
Obi Van
tonny_bennet
Стоит Zentyal, который даёт Jabber. Таким не занимался. И непонятно, а на кой ему сдался клиент, стоящий у сотрудника? :geek: И кстати, а зачем плюшка? Я просто высылаю на нужное имя сообщение и не заморачиваюсь с выяснением кто и чего.

Re: JABBER_STATUS по JID без Resource

Добавлено: 18 апр 2016, 16:34
tonny_bennet
Obi Van писал(а):Я просто высылаю на нужное имя сообщение и не заморачиваюсь с выяснением кто и чего.
Да, Jabbersend работает без проблем если просто указать jid - т.к. наверное потому, что если он запущен с нескольких клиентов - сообщение получат все сразу.

А вот JABBER_STATUS предполагает. что если учётка запущена одновременно с нескольких клиентов ему нужно знать статус какого именно клиента нужно запросить :)
Obi Van писал(а):И кстати, а зачем плюшка?
Jabber как корпоративный стандарт неформального общения в компании, клиенты стоят у всех. Подумываю о том, чтобы прикрутить переадресацию на мобильный телефон если статус в Жабе Away или XAway т.е. если сотрудник заблокировал комп или просто отошёл, а тот уснул, звонок сразу полетит на мобильный.

Re: JABBER_STATUS по JID без Resource

Добавлено: 18 апр 2016, 17:41
Obi Van
tonny_bennet
Очень прикольная однако плюшка )) Я смотрю в Ростове астериск популярнее с каждым годом ))
Я боюсь что "мои" не осилят. Тут с трудом переадресацию устанавливают, другие вообще жабер не читают (как так? :| ), другие вообще не знают что есть переадресация (инструкции разумеется прочесть не судьба).