使用stanza.io将自定义属性添加到消息中,而不是在服务器上存储消息



我正在从事离子 - 框架工作,我正在使用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    
    });

在简单的代码中,我们只能将消息作为字符串内部的字符串发送。谁能帮我解决这个问题?

我的服务器只是包含带有文本的主体元素的归档消息,这是一种非常常见的归档配置。一个技巧是尝试包含一个虚拟的身体文本来触发消息归档,但是您必须检查服务器是否正在存储和返回完整的stanza或只是提取并保存正文文本。

通过扩展stanza以包含其他字段,正确完成了所有操作,但需要调整服务器以获取我想要的东西。从这里确认。

您需要在消息stanza中添加额外的param store ,该默认情况下将消息存储在存档表中。

const store = stanzas.define({
  name: 'store',
  element: 'store',
  namespace: 'urn:xmpp:hints'
}); 
stanzas.withMessage(Message => {
  stanzas.extend(Message, store);
});

在消息stanza

中发送的存储属性为true
this.client.sendMessage({
  to: this.recep,
  body: this.sMsg,
  store: true
});

您应该看到 store 内部消息stanza喜欢

<store xmlns='urn:xmpp:hints'/>

相关内容

  • 没有找到相关文章

最新更新