Ejabberd 18.04 - Пользовательский модуль - Чтение пользовательского поля сообщения из пакета

Я пытаюсь реализовать собственный модуль для регистрации всех сообщений в веб-перехватчике. Я нашел хорошую ссылку для этого, https://github.com/PH-F/mod_offline_http_post/blob/master/src/mod_offline_http_post.erl.

У меня есть некоторый пользовательский тег в строфе сообщения, и я хочу также передать его веб-перехватчику.

Но я не мог понять, как прочитать настраиваемое поле. Пожалуйста, помогите и скажите мне, какой API я должен использовать, чтобы прочитать текст в «дополнительном» теге, показанном ниже.

Заранее спасибо.

Сервер Ejabber последней версии v18.04.

Xml-формат сообщения:

<message type="chat" to="[email protected]" id="7521387E-D6D1-41B4-A909-E9AD3251FB84">
 <body>Image</body>
 <thread>[email protected]</thread>
 <x xmlns="jabber:x:event"><offline/></x>
 <extra xmlns="ocp:extra">&lt;extra type="image" thumbnail="thumbnailUrl" url="url"&gt;&lt;/extra&gt;</extra>
</message>

Формат пакета, который я получил из журнала Ejabberd:

{message,
<<"7521387E-D6D1-41B4-A909-E9AD3251FB84">>,
chat,
<<"en">>,
{jid,<<"dichen">>,<<"123.123.123.123">>,<<>>,<<"dichen">>,<<"123.123.123.123">>,<<>>},
{jid,<<"johndoe">>,<<"123.123.123.123">>,<<>>,<<"johndoe">>,<<"123.123.123.123">>,<<>>},
[],
[{text,<<>>,<<"Image">>}],
{message_thread,<<>>,<<"[email protected]">>},
[
  {xmlel,<<"x">>,[{<<"xmlns">>,<<"jabber:x:event">>}],[{xmlel,<<"offline">>,[],[]}]},
  {xmlel,<<"extra">>, [{<<"xmlns">>,<<"ocp:extra">>}], [{xmlcdata,<<"<extra type=\"image\" thumbnail=\"thumbnailUrl\"  url=\"url\"></extra>">>}]}
]
...
}

person dichen    schedule 25.05.2018    source источник


Ответы (1)


Самый простой способ, которым я могу думать:

fxml:get_tag_cdata(fxml:get_subtag_with_xmlns(xmpp:encode(Packet), ‹‹"extra">>, ‹‹"ocp:extra">>))

Это вернет:

 <<"<extra type=\"image\" thumbnail=\"thumbnailUrl\" url=\"url\"></extra>">>
person Badlop    schedule 28.05.2018