diff --git a/src/plugins/converse-rai.js b/src/plugins/converse-rai.js
index 3b5fb22e17e9741874ded24f9440e2a1f4edf6c2..408feb2f85a49459b4d29b2b47b00a0d53dd916c 100644
--- a/src/plugins/converse-rai.js
+++ b/src/plugins/converse-rai.js
@@ -87,6 +87,21 @@ converse.plugins.add('converse-rai', {
         const msg = msgs.find(m => m.get('sender') === 'them' && (force || m.get('is_markable')));
         msg && this.sendMarkerForMessage(msg, type, force);
       },
+
+      /**
+       * Given the passed in message object, send a XEP-0333 chat marker.
+       * @param { _converse.Message } msg
+       * @param { ('received'|'displayed'|'acknowledged') } [type='displayed']
+       * @param { Boolean } force - Whether a marker should be sent for the
+       *  message, even if it didn't include a `markable` element.
+       */
+      sendMarkerForMessage(msg, type = 'displayed', force = false) {
+        const { Strophe } = converse.env;
+        if (msg && (msg?.get('is_markable') || force)) {
+          const from_jid = Strophe.getBareJidFromJid(msg.get('from'));
+          this.sendMarker(from_jid, msg.get('msgid'), type, msg.get('type'));
+        }
+      },
     },
   },
   initialize() {