Seen Receipt


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:

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) => {
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 =

        Log.d("TAG", "Event ${seenEvent.initialEventId()} seen by User $userName")

    override fun onEventDeleted(deletedEvent: NexmoDeletedEvent) {}

    override fun onDeliveredReceipt(deliveredEvent: NexmoDeliveredEvent) {}

private NexmoMessageEventListener messageListener = new NexmoMessageEventListener() {
    public void onTextEvent(@NonNull NexmoTextEvent textEvent) {}

    public void onAttachmentEvent(@NonNull NexmoAttachmentEvent attachmentEvent) {}

    public void onEventDeleted(@NonNull NexmoDeletedEvent deletedEvent) {}

    public void onSeenReceipt(@NonNull NexmoSeenEvent seenEvent) {
        String userName = seenEvent.getFromMember().getUser().getName();

        Log.d("TAG", "Event " + seenEvent.initialEventId() + "seen by User " + userName);

    public void onDeliveredReceipt(@NonNull NexmoDeliveredEvent deliveredEvent) {}

    public void onTypingEvent(@NonNull NexmoTypingEvent typingEvent) {}


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);