Я использую ejabberd18.09 для приложения чата. Приложение имеет несколько функций, необходимых для добавления расширений в сообщения ejabberd (xmpp).
Я создал пользовательский модуль в offline_message_hook для захвата автономных сообщений и отправки их на мой собственный URL для дальнейшей обработки.
сообщения, отправляемые в ejabberd, имеют разные случаи в зависимости от типа сообщения, следующего за
если я отправляю фото, сообщение будет выглядеть следующим образом
<message xmlns="jabber:client" xml:lang="en" to="someuserjid2" from="{someuserjid}" type="chat" id="mP8tO-8">
<mtype xmlns="urn:xmpp:mtype" value="media" />
<url xmlns="urn:xmpp:url" id="myId" mediaType="photo" link="myphotourl.com" />
<body>thumbnail string</body>
</message>
при отправке текста
<message xmlns="jabber:client" xml:lang="en" to="someuserjid2" from="{someuserjid}" type="chat" id="mP8tO-8">
<mtype xmlns="urn:xmpp:mtype" value="text" />
<body>Hi John</body>
</message>
при отправке местоположения
<message xmlns="jabber:client" xml:lang="en" to="someuserjid2" from="{someuserjid}" type="chat" id="mP8tO-8">
<mtype xmlns="urn:xmpp:mtype" value="location" />
<location xmlns="urn:xmpp:geo" lat="1.2" lng="2.2 " />
<body>location thumbnailstring</body>
</message>
Я использовал код .erl, чтобы прочитать тело и идентификатор сообщения следующим образом
create_message(_From, _To, Packet) when (Packet#message.type == chat) and (Packet#message.body /= []) ->
Body = fxml:get_path_s(Packet, [{elem, list_to_binary("body")}, cdata]),
MessageId = fxml:get_tag_attr_s(list_to_binary("id"), Packet),
post_offline_message(_From, _To, Body, MessageId),
ok.
я хочу, чтобы (на эрланге) я мог прочитать атрибут value тега mtype , для которого был создан оператор switch (media, location, test) значения, чтобы я мог обрабатывать каждое сообщение отдельно?