ejabberd muc_sub подписывает пользователя на комнату с сервера ejabberd

Пожалуйста, потерпите меня, если моя формулировка немного неверна. Что я в основном пытаюсь сделать, так это написать сценарий, который запускается на сервере, на котором работает служба ejabberd. Этот скрипт должен создавать чат и автоматически подписывать на него пользователей.

Я знаю, что это возможно через REST API, но я не хочу запускать это через соединение извне, а с того же физического сервера.

Или тогда метод goto будет запускать вызовы API через localhost?

ОБНОВЛЕНИЕ: как и предполагалось, я могу просто вызвать REST API через localhost. Но я все еще застрял. Вероятно, это какая-то опечатка в моей конфигурации или вызовах, поэтому я поделюсь здесь тем, что пробовал:

эй спасибо за ваш ответ. Я дошел до этого сам, но я не получаю ожидаемого результата.

Итак, я настроил необходимую часть в моем файле yml следующим образом:

listen:
    -
        port: 5285
        module: ejabberd_http
        request_handlers:
          "/rest": mod_rest

и добавил localhost в hosts. Затем я попытался получить доступ к функции REST следующим образом:

curl -X POST -i -H "Content-type: application/json"  http://localhost:5285/rest/create_room -d 
'
  {
    "name":"testroom",
    "service":"mychatservice.host.com",
    "host":"host.com"
  }
'

И я получил такой ответ:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 21

Try POSTing a stanza.

Я думал, что код 200 означает, что я поступил правильно, но когда я проверил с помощью «ejabberdctl muc_online_rooms global», в нем не было ни одного из них. Также любая неправильная команда после базового URL вернула мне тот же ответ. Так что я делаю неправильно?

редактировать: я, конечно, также включил сам модуль rest:

mod_rest:
  allowed_ips:
    - "127.0.0.1"

person Jeffrey    schedule 30.01.2019    source источник


Ответы (1)


ejabberd прослушивает соединения, и конфигурация по умолчанию не ограничивает, откуда они приходят. Так что да, вы можете отправлять запросы REST API с локального хоста.

На самом деле, как только вы заработаете, вы можете настроить этот прослушиватель так, чтобы он принимал соединения только с локального хоста.

person Badlop    schedule 01.02.2019
comment
Вы читали документацию модуля, прежде чем писать свой клиент? И вы читали эту документацию, увидев что-то странное в ее поведении? И... ты можешь прочитать это сейчас? Точнее смотрите пример клиентов. - person Badlop; 04.02.2019
comment
Я действительно просто пытаюсь опубликовать через консоль с самого сервера. Это все, что мне нужно для работы. Ни одному клиенту никогда не понадобится выполнять эти команды. - person Jeffrey; 08.02.2019
comment
Я просмотрел документацию по модулю, а также остальную документацию по API и некоторые другие вопросы здесь, задавая что-то подобное. Я следовал всему, что было предложено. Что мне не хватает? - person Jeffrey; 08.02.2019
comment
Я только что добавил новый пример того, как вызывать команды с помощью curl и mod_rest, см. github.com/processone/ejabberd-contrib/tree/master/mod_rest - person Badlop; 11.02.2019
comment
Большое спасибо за все это время и усилия. На самом деле я смог решить проблему, но теперь у меня другая проблема. Я получаю сообщение об ошибке, что подписки не разрешены, хотя я установил для параметра allow_subscriptions значение true в default_room_options, кстати, я запускаю 16.09. - person Jeffrey; 12.02.2019
comment
И вы планируете добавлять сюда проблемы одну за другой, делая невозможным понимание того, что происходит? Отметьте эту проблему как решенную и создайте новую, указав новый сценарий (версия сервера, соответствующая конфигурация и т.д.) - person Badlop; 12.02.2019
comment
Мне жаль. Вы правы, я подумал, что в контексте моего предыдущего вопроса имеет смысл задать его здесь, но я разместил новый вопрос со всей актуальной информацией. - person Jeffrey; 13.02.2019