Добавление пользовательского атрибута в сообщение, не сохраняющее сообщение в таблице Archive на сервере с помощью stanza.io
Я работаю над ionic-framework и использую библиотеку stanza.io для реализации чата с сервером xmpp. Я хочу добавить некоторые пользовательские атрибуты при отправке сообщения, для этого я выполнил шаги по созданию плагина. мой код выглядит следующим образом...
sendMsg() {
console.log("Sending message");
function customMessage(client, stanzas) {
const NS = 'http://www.w3.org/2005/Atom';
var types = stanzas.utils;
const messageAttribute = stanzas.define({
name: 'messageAttribute',
element: 'messageAttribute',
namespace: NS,
fields: {
title: types.textSub(NS, 'title'),
summary: types.textSub(NS, 'summary'),
published: types.textSub(NS, 'published'),
updated: types.textSub(NS, 'updated'),
cont: types.textSub(NS, 'cont')
}
});
stanzas.withMessage((Message) => {
stanzas.extend(Message, messageAttribute);
});
}
this.client.use(customMessage);
this.client.sendMessage({
to: this.recep,
body: "",
messageAttribute: {
'title': "some title",
'summary': "message",
'published': "time stamp here",
'updated': "time stamp here",
'cont': "cht"
}
});
console.log("Message sent " + this.sMsg);
}
но при этом сообщение не сохраняется в таблице архива на сервере. это создаст проблему для получения истории с сервера. если мы используем простой код, то сообщения хранятся в архивной таблице на сервере. простой код, как следует..
this.client.sendMessage({
to: this.recep,
body: this.sMsg
});
в простом коде мы можем только отправить сообщение в виде строки внутри тела. Может кто-нибудь помочь мне решить это?
2 ответа
Мой сервер только архивирует сообщения, которые содержат элемент body с текстом, что является довольно распространенной конфигурацией архивирования. Один трюк - попытка включить фиктивный основной текст для запуска архивирования сообщений, но вам нужно проверить, хранит ли сервер и возвращает ли он полный раздел или просто извлекает и сохраняет основной текст.
все сделано правильно с расширением Stanza для включения дополнительных полей, но нужно настроить сервер, чтобы получить то, что я хочу. подтвердил отсюда.
Вам необходимо добавить дополнительное хранилище параметров в разделе сообщений, которое заставляет сообщение сохранять в таблице архива по умолчанию.
const store = stanzas.define({
name: 'store',
element: 'store',
namespace: 'urn:xmpp:hints'
});
stanzas.withMessage(Message => {
stanzas.extend(Message, store);
});
Атрибут магазина отправлен как истинный в строфе сообщения
this.client.sendMessage({
to: this.recep,
body: this.sMsg,
store: true
});
Вы должны увидеть магазин внутри сообщения Stanza, как
<store xmlns='urn:xmpp:hints'/>