Seen Receipt
Overview
This guide covers seen receipts within a conversation.
Before you begin, make sure you added the SDK to your app and you are able to create a conversation.
NOTE: A step-by-step tutorial to build a chat application is available here.
This guide will make use of the following concepts:
-
Conversation Events -
text:seen
events that fire on a Conversation, after you are a Member
Set Text status to seen
There is the seen()
method on a TextEvent
that will set its status to seen. The following code snippet will set a text's status to seen once a text event happens in the conversation.
conversation.on('text', (sender, event) => {
// Can't set your own text status to seen
if (conversation.me.id !== event.from) {
event.seen().then(() => {
console.log("text event status set to seen");
}).catch((error)=>{
console.error("error setting text event status to seen ", error);
});
};
});
if conversation.myMember?.memberUuid != event.fromMemberId {
conversation.sendMarkSeenMessage(event.uuid, completionHandler: nil)
}
if (conversation.myMember.memberUuid != event.fromMemberId) {
[conversation sendMarkSeenMessage:event.uuid completionHandler:nil];
}
Text Seen Receipt
Given a conversation you are already a member of, text:seen
events will be received when members have seen previously received text
events in the context of the current conversation:
conversation.on('text:seen', (data, event) => {
console.log(event);
});
private val messageListener = object : NexmoMessageEventListener {
override fun onTypingEvent(typingEvent: NexmoTypingEvent) {}
override fun onAttachmentEvent(attachmentEvent: NexmoAttachmentEvent) {}
override fun onTextEvent(textEvent: NexmoTextEvent) {}
override fun onSeenReceipt(seenEvent: NexmoSeenEvent) {
val userName = seenEvent.getEmbeddedInfo.user.name
Log.d("TAG", "Event ${seenEvent.initialEventId()} seen by User $userName")
}
override fun onEventDeleted(deletedEvent: NexmoDeletedEvent) {}
override fun onDeliveredReceipt(deliveredEvent: NexmoDeliveredEvent) {}
}
conversation.addMessageEventListener(messageListener)
private NexmoMessageEventListener messageListener = new NexmoMessageEventListener() {
@Override
public void onTextEvent(@NonNull NexmoTextEvent textEvent) {}
@Override
public void onAttachmentEvent(@NonNull NexmoAttachmentEvent attachmentEvent) {}
@Override
public void onEventDeleted(@NonNull NexmoDeletedEvent deletedEvent) {}
@Override
public void onSeenReceipt(@NonNull NexmoSeenEvent seenEvent) {
String userName = seenEvent.getEmbeddedInfo().getUser().getName();
Log.d("TAG", "Event " + seenEvent.initialEventId() + "seen by User " + userName);
}
@Override
public void onDeliveredReceipt(@NonNull NexmoDeliveredEvent deliveredEvent) {}
@Override
public void onTypingEvent(@NonNull NexmoTypingEvent typingEvent) {}
};
conversation.addMessageEventListener(messageListener);
Add NXMConversationDelegate
as an extension to a ViewController
or similar, and implement conversation(_ conversation: NXMConversation, didReceive event: NXMMessageStatusEvent)
:
Note: The first method below is required when implementing NXMConversationDelegate
:
extension ViewController: NXMConversationDelegate {
func conversation(_ conversation: NXMConversation, didReceive error: Error) {
NSLog("Conversation error: \(error.localizedDescription)")
}
func conversation(_ conversation: NXMConversation, didReceive event: NXMMessageStatusEvent) {
if event.status == .seen {
NSLog("Received seen event: \(event.referenceEventUuid)")
}
}
}
Have a ViewController
, or similar, conform to NXMConversationDelegate
and implement conversation:didReceiveMessageStatusEvent:
:
Note: The first method below is required when implementing NXMConversationDelegate
:
- (void)conversation:(NXMConversation *)conversation didReceive:(NSError *)error {
NSLog(@"Conversation error: %@", error.localizedDescription);
}
- (void)conversation:(NXMConversation *)conversation didReceiveMessageStatusEvent:(NXMMessageStatusEvent *)event {
if (event.status == NXMMessageStatusTypeSeen) {
NSLog(@"Received seen event: %li", (long)event.referenceEventUuid);
}
}