Message Actions API for PubNub Dart SDK

Add or remove actions on published messages to build features like receipts, reactions, or to associate custom metadata to messages. Clients can subscribe to a channel to receive message action events on that channel. They can also fetch past message actions from Message Persistence independently or when they fetch original messages.

Add Message Action

Requires Mobile Push Notifications add-on

This method requires that the Mobile Push Notifications add-on is enabled for your key in the Admin Portal. Read the support page on enabling add-on features on your keys.

Description

This method adds a message action to a parent message. Parent message is a normal message identified by a combination of subscribeKey, channel and timetoken. Returns the added action in the response.

Parent message existence

Server doesn't validate if the parent message exists at the time of adding the message action. It does, however, check if you haven't already added this particular action to the parent message.

For a given parent message, there can be only one message action with type and value.

Method(s)

To Add a Message Action you can use the following method(s) in the Dart SDK:

pubnub.addMessageAction(
{String type,
String value,
String channel,
Timetoken timetoken,
Keyset? keyset,
String? using}
)
ParameterTypeRequiredDescription
typeStringYesType of message action.
valueStringYesValue of message action.
channelStringYesSpecifies channel name to publish message actions to.
timetokenTimetokenYesThe publish timetoken of a parent message.
keysetKeysetOptionalOverride for the PubNub default keyset configuration.
usingStringOptionalKeyset name from the keysetStore to be used for this method call.

Basic Usage

  var result = await pubnub.addMessageAction(
type: 'reaction',
value: 'smiley',
channel: 'my_channel',
timetoken: Timetoken(15610547826969050));

Returns

The addMessageAction() operation returns a AddMessageActionResult which contains the following property:

Property NameTypeDescription
actionMessageActionAdded message action.

The MessageAction object contains the following properties:

Property NameTypeDescription
typeStringType of message action.
valueStringValue of message action.
actionTimetokenStringTimetoken assigned to added message action.
messageTimetokenStringTimetoken of message.
uuidStringUUID of sender.

Remove Message Action

Requires Mobile Push Notifications add-on

This method requires that the Mobile Push Notifications add-on is enabled for your key in the Admin Portal. Read the support page on enabling add-on features on your keys.

Description

Remove a previously added action on a published message. Returns an empty response.

Method(s)

To Remove a Message Action you can use the following method(s) in the Dart SDK:

pubnub.deleteMessageAction(String channel,
{Timetoken messageTimetoken,
Timetoken actionTimetoken,
Keyset? keyset,
String? using})
ParameterTypeRequiredDescription
channelStringYesChannel the message was sent to.
messageTimetokenTimetokenYesPublish timetoken of the original message.
actionTimetokenTimetokenYesPublish timetoken of the message action to be removed.
keysetKeysetOptionalOverride for the PubNub default keyset configuration.
usingStringOptionalKeyset name from the keysetStore to be used for this method call.

Basic Usage

  var result = await pubnub.deleteMessageAction(
'my_channel', Timetoken(15610547826969050), Timetoken(15610547826969159));

Returns

The deleteMessageAction() operation returns a DeleteMessageActionResult which does not have actionable data.

Get Message Actions

Requires Mobile Push Notifications add-on

This method requires that the Mobile Push Notifications add-on is enabled for your key in the Admin Portal. Read the support page on enabling add-on features on your keys.

Description

Get a list of message actions in a channel. Returns a list of actions sorted by the action's timetoken in ascending order.

Method(s)

To Get Message Actions you can use the following method(s) in the Dart SDK:

pubnub.fetchMessageActions(
String channel,
{Timetoken? from,
Timetoken? to,
int? limit,
Keyset? keyset,
String? using})
ParameterTypeRequiredDefaultDescription
channelStringYesThe channel name.
fromTimetokenOptionalMessage Action timetoken denoting the start of the range requested (return values will be less than from).
toTimetokenOptionalMessage Action timetoken denoting the end of the range requested (return values will be greater than or equal to to).
limitintOptional100Specifies the number of actions to return in response. Default/Maximum is 100.
keysetKeysetOptionalOverride for the PubNub default keyset configuration.
usingStringOptionalKeyset name from the keysetStore to be used for this method call.

Basic Usage

  var result = await pubnub.fetchMessageActions('my_channel');

Response

{
"status": 200,
"data": [
{
"type": "reaction",
"value": "smiley_face",
"actionTimetoken": "15610547826970050",
"messageTimetoken": "15610547826969050",
"uuid": "terryterry69420"
}
],
"more": {
"url": "/v1/actions/sub-c-6ba5f838-6456-11e8-9307-eaaa55e2558c/channel/my_channel?start=15610547826970050&end=15645905639093361&limit=2",
"start": "15610547826970050",
"end": "15645905639093361",
show all 19 lines

Returns

The fetchMessageActions() operation returns a list of FetchMessageActionsResult object containing following properties:

Property NameTypeDescription
actionsList<MessageAction>List of message actions.
moreActionsMoreActionPagination information.

The MessageAction has following properties:

Property NameTypeDescription
typeStringType of message action.
valueStringValue of message action.
actionTimetokenStringTimetoken assigned to added message action.
messageTimetokenStringTimetoken of message.
uuidStringUUID of sender.

The MoreAction has following properties:

Property NameTypeDescription
urlStringURL to fetch next page of message actions.
startStringStart timetoken value for next page.
limitintLimit count for next page.

Other Examples

Fetch Message actions with paging

// this loop continue fetching message actions when next batch is available
var fetchMessageActionsResult = FetchMessageActionsResult(<MessageAction>[]);
var loopResult, from, to, limit;
do {
loopResult = await pubnub.fetchMessageActions('my_channel',
from: from, to: to, limit: limit);

fetchMessageActionsResult.actions.addAll(loopResult.actions);

if (loopResult.moreActions != null) {
var more = loopResult.moreActions;
from = Timetoken(BigInt.parse(more.start));
to = Timetoken(BigInt.parse(more.end));
limit = more.limit;
}
show all 17 lines