Message Retraction

Estimated reading time: 5 minutes

Message retraction APIs allow users to modify or delete the sent messages. For example, to correct typos or to remove messages they didn’t mean to send.

You can enable or disable different retraction features by specifying retraction policies. You can also configure the max time limit for message retraction. Any messages that are older than the retraction time limit will not be retracted. The default retraction time limit is 1800 seconds which can be set from 1 second to any arbitrarily large value. We will cover retraction policies later in this document.

Type of Retractions

There are primarily three ways to retract messages:

  • Modifying Messages
  • Wiping Messages
  • Deleting Messages
  • Deleting Profile from the Contact List

Modifying Messages

The sender can modify an already sent message by updating content and sending it using sendUpdate API insetad of send API. If the message with the ID exists on the remote end from the same sender, it will be updated. If not, no action will be taken.

Note that, you MUST use sendUpdate API to modify the message. If not, the message will be considered duplicate and will be discarded.

For example,

msg.message = "This is an updated message";
Mesibo.sendUpdate();

Deleting (recall) Messages

The sender can delete sent messages by calling the MesiboMessage.recall or Mesibo.deleteMessages API, later should be used for recalling multiple messages. The message will be deleted on the local and remote ends.

On the remote end, Mesibo_onMessageStatus will be invoked when a message is deleted by sender which can be used for updating UI, if requires.

boolean recall();

OR,

boolean Mesibo.deleteMessage(msgid, remote);
boolean Mesibo.deleteMessages(msgids, count, remote);

recall and deleteMessages take the following parameters:

Parameter Description
msgid message ID to be deleted
msgids message IDs to be deleted
remote true for deleting locally and also on remote end. false to delete only locally.

For example, in Java

Mesibo.deleteMessage(1234, true);

In iOS

[MesiboInstance deleteMessage:1234 remote:YES];

Wiping Messages

Instead of deleting, the sender can wipe an already sent message by calling wipeMessage (locally only) or wipeAndRecalllMessage (both local and remote) APIs. However, if that message was not read, it will be deleted instead.

On the remote end, Mesibo_onMessageStatus will be invoked when a message is deleted by sender which can be used for updating UI, if requires.

boolean wipeMessage(long msgid);
boolean wipeMessages(long[] msgids, int count);
boolean wipeAndRecalllMessage(long msgid);
boolean wipeAndRecalllMessages(long[] msgids, int count);

Above functions take the following parameters:

Parameter Description
msgid message ID to be wiped or deleted
msgids message IDs to be wiped or deleted

For example, in Java

Mesibo.wipeAndRecalllMessage(1234);

In iOS

[MesiboInstance wipeAndRecalllMessage:1234];

Deleting from the Contact List and Delete Messages

A sender can request a user to delete the sender profile from the contact list of the user, and also delete all the messages by calling MesiboProfile.requestProfileRemoval API.

On the remote end, Mesibo_onProfileUpdated will be invoked when the sender profile is deleted which can be used for updating UI, if requires.

void MesiboProfile.requestProfileRemoval();

requestProfileRemoval does not take any parameters.

Retraction Policies

The app can set the retraction policies to enable or disable certain or all retraction features. The app can also set the max interval after which the retraction of messages will not be allowed.

Retraction Interval

The app can get and set the max retraction interval by using following APIs.

int setMessageRetractionInterval(int seconds);
int getMessageRetractionInterval();

setMessageRetractionInterval takes the following parameters:

Parameter Description
seconds seconds after which retraction will not be allowed.

The default max retraction period is 1800 seconds (30 minutes).

Mesibo.setMessageRetractionInterval(1800);

Retraction Policies

The app can enable or disable different retraction features by using setRemoteRetractionPolicy. For example, an app can disable modifying the message but can allow deleting messages remotely.

int setRemoteRetractionPolicy(long policy);

setRemoteRetractionPolicy takes the following parameters:

Parameter Description
policy can be a logical OR combination of one or more policy flags value below

By default, all the features are enabled.

Flag Description
0 Disable Message Retraction
MESIBO_RETRACT_MODIFY Allow modifying messages
MESIBO_RETRACT_WIPE Allow wiping messages
MESIBO_RETRACT_DELETE Allow deleting messages
MESIBO_RETRACT_DELUNREAD [Future] allow deleting all unread messages
MESIBO_RETRACT_DELREAD [Future] allow deleting all unread messages
MESIBO_RETRACT_DELMEDIA [Future] allow deleting all messages with media
MESIBO_RETRACT_DELTHREAD [Future] allow deleting all messages in conversation threads
MESIBO_RETRACT_DELALL Allow deleting all messages
MESIBO_RETRACT_DELCONTACT Allow deleting senders profile and messages
Mesibo.setRemoteRetractionPolicy(MESIBO_RETRACT_MODIFY|MESIBO_RETRACT_WIPE|MESIBO_RETRACT_DELETE);

Retraction Limitation

It is worth understanding some limitations on retraction features.

  • the retraction will not work after the configured retraction period. So if the receiver is offline for a longer duration exceeding the max retraction interval, the retraction request will be rejected.
  • If the message was forwarded, the forwarded message will not be deleted when the original message was retracted.
  • Retraction will only work on supported API versions (1.8.97 and later, the latest Javascript).
  • Retraction interval has no bearing on retracting contact
message retraction, recalling, retraction, disapppearing messages