Message Persistence API for AngularJS SDK

Message Persistence gives you real-time access to the history of messages published to PubNub. Each message is timestamped to the nearest 10 nanoseconds and stored across multiple availability zones in several geographic locations. You can encrypt stored messages with AES-256 so they are not readable on PubNub’s network. For details, see Message Persistence.

You control how long messages are stored through your account’s retention policy. Options include: 1 day, 7 days, 30 days, 3 months, 6 months, 1 year, or Unlimited.

You can retrieve the following:

  • Messages
  • Message reactions
  • Files (using the File Sharing API)

History

Requires Message Persistence

Enable Message Persistence for your key in the Admin Portal. See how to enable add-on features.

This function fetches historical messages of a channel.

You can control how messages are returned and in what order. For example, you can:

  • Search from the newest end of the timeline (default: reverse = false).
  • Search from the oldest end of the timeline by setting reverse to true.
  • Page through results by providing a start or end timetoken.
  • Retrieve a slice of the timeline by providing both a start and end timetoken.
  • Limit the number of messages using the count parameter.
Start & End parameter usage clarity

If you specify only start (without end), you receive messages older than and up to that start timetoken. If you specify only end (without start), you receive messages that match that end timetoken and newer. If you specify both start and end, you receive messages between those timetokens (inclusive of end). You still receive up to 100 messages even if more match. Make iterative calls to history, adjusting start, to page through the full result set.

Method(s)

To run History you can use the following method(s) in the AngularJS SDK:

history( {String channel, Boolean reverse, Number count, Boolean stringifiedTimeToken, Boolean includeMeta, String start, String end}, Function callback )
* required
ParameterDescription
channel *
Type: String
Default:
n/a
Specifies channel to return history messages from.
reverse
Type: Boolean
Default:
false
Whether to traverse the timeline in reverse (oldest to newest). If both start and end are provided, reverse is ignored and messages are returned starting with the newest message.
count
Type: Number
Default:
100
Specifies the number of historical messages to return. Default/Maximum is 100.
stringifiedTimeToken
Type: Boolean
Default:
false
If stringifiedTimeToken is true, the SDK returns timetoken values as strings instead of integers. This is encouraged in JavaScript environments which round large integers.
includeMeta
Type: Boolean
Default:
n/a
Whether to include message meta information.
start
Type: String
Default:
n/a
Timetoken delimiting the start of the time slice (exclusive) to pull messages from.
end
Type: String
Default:
n/a
Timetoken delimiting the end of the time slice (inclusive) to pull messages from.
callback
Type: Function
Default:
n/a
Executes on a successful/unsuccessful history.
Using the reverse parameter

Messages are always returned sorted in ascending time direction from history regardless of reverse. The reverse direction matters when you have more than 100 (or count, if it's set) messages in the time interval, in which case reverse determines the end of the time interval from which it should start retrieving the messages.

Sample code

Retrieve the last 100 messages on a channel:

Pubnub.history(
{
channel: 'history_channel',
count: 100, // 100 is the default
stringifiedTimeToken: true // false is the default
},
function (status, response) {
// handle status, response
}
);

Response

// Example of Status
{
error: false,
operation: "PNHistoryOperation",
statusCode: 200
}

// Example of Response
{
endTimeToken: "14867650866860159",
messages: [
{
timetoken: "14867650866860159",
entry: "[User 636] hello World"
},
show all 21 lines

Other examples

Use history() to retrieve the three oldest messages by retrieving from the time line in reverse

// get last 3 messages published to my_channel

Pubnub.history(
{
channel: ['my_channel'],
reverse: true, // Setting to true will traverse the time line in reverse starting with the oldest message first.
count: 3,
stringifiedTimeToken: true // false is the default
},
function (status, response) {
// handle status, response
}
);

Use history() to retrieve messages newer than a given timetoken by paging from oldest message to newest message starting at a single point in time (exclusive)

// get messages starting at timetoken order oldest first

Pubnub.history(
{
channel: 'my_channel',
reverse: true, // Setting to true will traverse the time line in reverse starting with the oldest message first.
stringifiedTimeToken: true, // false is the default
start: '13406746780720711'
},
function (status, response) {
// handle status, response
}
);

Use history() to retrieve messages until a given timetoken by paging from newest message to oldest message until a specific end point in time (inclusive)

// return 100 messages ending on timetoken

Pubnub.history(
{
channel: 'my_channel',
stringifiedTimeToken: true,
end: '13406746780720711'
},
function (status, response) {
// handle status, response
}
);

History paging example

Usage

You can call the method by passing 0 or a valid timetoken as the argument.

getAllMessages = function(timetoken) {
Pubnub.history(
{
channel: 'history_test',
stringifiedTimeToken: true, // false is the default
start: timetoken
},
function (status, response) {
var msgs = response.messages;
var start = response.startTimeToken;
var end = response.endTimeToken;
// if msgs were retrieved, do something useful with them
if (msgs != "undefined" && msgs.length > 0) {
console.log(msgs.length);
console.log("start : " + start);
show all 28 lines

Fetch messages with metadata

pubnub.history(
{
channel: 'my_channel',
stringifiedTimeToken: true,
includeMeta: true,
},
function (status, response) {
// handle status, response
}
);

Batch history

Requires Message Persistence

Enable Message Persistence for your key in the Admin Portal. See how to enable add-on features.

Fetch historical messages from multiple channels. The includeMessageActions or includeActions flag also allows you to fetch message reactions along with the messages.

You can control how messages are returned and in what order:

  • Search from the newest end of the timeline.
  • Search from the oldest end of the timeline.
  • Page through results by providing a start or end timetoken.
  • Retrieve a slice of the timeline by providing both a start and end timetoken.
  • Retrieve a specific (maximum) number of messages using the count parameter.

Batch history returns up to 100 messages on a single channel, or 25 per channel on a maximum of 500 channels. Use the start and end timestamps to page through the next batch of messages.

Start & End parameter usage clarity

If you specify only the start parameter (without end), you receive messages older than the start timetoken.

If you specify only the end parameter (without start), you receive messages from that end timetoken and newer.

If you specify both start and end, you retrieve messages between those timetokens (inclusive of the end value).

You still receive a maximum of 100 messages (or 25, for multiple channels) even if more messages match. Make iterative calls to history, adjusting the start timetoken, to page through the full set of results.

Method(s)

Use the following method(s) in the AngularJS SDK:

fetchMessages(
{Array channels, Number count, Boolean stringifiedTimeToken, Boolean includeMeta, Boolean includeMessageType, Boolean includeUUID, Boolean includeMessageActions, String start, String end},
Function callback )
* required
ParameterDescription
channels *
Type: Array
Default:
n/a
Specifies channels to return history messages from.
count
Type: Number
Default:
25
Specifies the number of historical messages to return per channel. Default/Maximum is 25 per channel.
stringifiedTimeToken
Type: Boolean
Default:
false
If stringifiedTimeToken is true, the SDK returns timetoken values as strings instead of integers. This is encouraged in JavaScript environments which round large integers.
includeMessageType
Type: Boolean
Default:
true
Whether to include the message type with each history message.
includeUUID
Type: Boolean
Default:
true
Whether to include the publisher uuid with each history message.
includeMeta
Type: Boolean
Default:
n/a
Whether message meta information should be fetched.
includeMessageActions
Type: Boolean
Default:
n/a
Whether to fetch message reactions. Throws an exception if called with more than one channel. Truncation occurs if the number of actions across returned messages exceeds 25,000. Each message can have up to 25,000 actions. For example: querying 10 messages where the first five have 5,000 actions each returns those five messages and all 25,000 actions, plus a more link to fetch the remainder.
start
Type: String
Default:
n/a
Timetoken delimiting the start of the time slice (exclusive) to pull messages from.
end
Type: String
Default:
n/a
Timetoken delimiting the end of the time slice (inclusive) to pull messages from.
callback
Type: Function
Default:
n/a
Executes on a successful/unsuccessful fetchMessages.

Sample code

Retrieve the last message on a channel:

// assuming pubnub is an initialized instance
// start, end, count are optional
pubnub.fetchMessages(
{
channels: ['ch1', 'ch2', 'ch3'],
start: "15343325214676133",
end: "15343325004275466",
count: 25
},
(status, response) => {
// handle response
}
);

Response

//Example of status
{
error: false,
operation: 'PNFetchMessagesOperation',
statusCode: 200
}

//Example of response
{
"channels":{
"my-channel":[
{
"message":"message_1",
"timetoken":"15483367794816642",
"uuid":"my-uuid",
show all 34 lines

Other examples

Fetch messages with metadata and actions

pubnub.fetchMessages(
{
channels: ['my_channel'],
stringifiedTimeToken: true,
includeMeta: true,
includeMessageActions: true,
},
function (status, response) {
// handle status, response
}
);

Fetch messages with metadata and actions Response

// Example of status
{
"error": false,
"operation": "PNFetchMessagesOperation",
"statusCode": 200
}

// Example of response
{
"channels":{
"my_channel":[
{
"timetoken":"15741125155552287",
"message":{
"text":"Hello world!",
show all 38 lines

Delete messages from history

Requires Message Persistence

Enable Message Persistence for your key in the Admin Portal. See how to enable add-on features.

Remove messages from the history of a specific channel.

Required setting

To accept delete-from-history requests, enable the Delete-From-History setting for your key in the Admin Portal and initialize the SDK with a secret key.

Method(s)

To Delete Messages from History you can use the following method(s) in the AngularJS SDK.

Note

The Delete Messages method behaves slightly differently than other history methods. Note that the start parameter is exclusive and the end parameter is inclusive.

deleteMessages({String channel, String start, String end},Function callback)
* required
ParameterDescription
channel *
Type: String
Channel to delete messages from.
start
Type: String
Timetoken delimiting the start of the time slice (exclusive) to delete messages from.
end
Type: String
Timetoken delimiting the end of the time slice (inclusive) to delete messages from.
callback
Type: Function
Executes on successful or unsuccessful execution of deleteMessages.

Sample code

Pubnub.deleteMessages(
{
channel: 'ch1',
start: '15088506076921021',
end: '15088532035597390'
},
(result) => {
console.log(result);
}
);

Response

{
error: false,
operation: 'PNDeleteMessagesOperation',
statusCode: 200
}

Other examples

Delete specific message from history

To delete a specific message, pass the publish timetoken (received from a successful publish) in the End parameter and timetoken +/- 1 in the Start parameter. e.g. if 15526611838554310 is the publish timetoken, pass 15526611838554309 in Start and 15526611838554310 in End parameters respectively as shown in the following code snippet.

Pubnub.deleteMessages(
{
channel: 'ch1',
start: '15526611838554309',
end: '15526611838554310'
},
(result) => {
console.log(result);
}
);
Last updated on