Добавление пользовательского атрибута в сообщение, не сохраняющее сообщение в таблице 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'/>
Другие вопросы по тегам