Recibos entregados y vistos
Product deprecation notice
Effective April 30th, 2026, Vonage In-App Messaging will no longer be available. Access for new users will be closed, and the service will be discontinued for all existing users.
If you have any questions regarding this product’s discontinuation, please contact your account manager or our support team.
Visión general
Esta guía cubre los recibos entregados y vistos dentro de una conversación.
Antes de empezar, asegúrese de que ha añadido el SDK a su aplicación y eres capaz de crear una conversación.
NOTA: Hay disponible un tutorial paso a paso para crear una aplicación de chat aquí.
Esta guía hará uso de los siguientes conceptos:
Eventos de conversación:
message:deliveredeventos que se disparan en una Conversación, después de ser Miembromessage:seeneventos que se disparan en una Conversación, después de ser Miembro
Establecer el estado del mensaje en Entregado
Hay un método que establecerá un Message a entregado. El siguiente fragmento de código establecerá el estado de un mensaje en entregado una vez que se produzca un evento de mensaje en la conversación.
conversation.on('message', (sender, event) => {
// Can't set your own message status to delivered
if (conversation.me.id !== event.from) {
event.delivered().then(() => {
console.log("message event status set to delivered");
}).catch((error)=>{
console.error("error setting message event status to delivered ", error);
});
};
});
override fun onMessageEvent(messageEvent: NexmoMessageEvent) {
messageEvent.markAsDelivered(object: NexmoRequestListener<Void> {
override fun onError(error: NexmoApiError) {}
override fun onSuccess(result: Void?) {}
})
}
public void onMessageEvent(@NonNull NexmoMessageEvent messageEvent) {
messageEvent.markAsDelivered(new NexmoRequestListener() {
@Override
public void onError(@NonNull NexmoApiError error) { ... }
@Override
public void onSuccess(@Nullable Object result) { ... }
});
}
if conversation.myMember?.memberUuid != event.fromMemberId {
conversation.sendMarkDeliveredMessage(event.uuid, completionHandler: nil)
}
if (conversation.myMember.memberUuid != event.fromMemberId) {
[conversation sendMarkDeliveredMessage:event.uuid completionHandler:nil];
}
Mensaje entregado Recibo
Dada una conversación de la que ya eres miembro, message:delivered se recibirán eventos cuando Message se entregan en el contexto de la conversación actual:
conversation.on('message:delivered', (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) {}
override fun onEventDeleted(deletedEvent: NexmoDeletedEvent) {}
override fun onDeliveredReceipt(deliveredEvent: NexmoDeliveredEvent) {
val userName = deliveredEvent.getEmbeddedInfo.user.name
Log.d("TAG", "Event ${deliveredEvent.initialEventId()} delivered to User $userName")
}
}
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) {}
@Override
public void onDeliveredReceipt(@NonNull NexmoDeliveredEvent deliveredEvent) {
String userName = deliveredEvent.getEmbeddedInfo().getUser().getName();
Log.d("TAG", "Event " + deliveredEvent.initialEventId() + "delivered to User " + userName);
}
@Override
public void onTypingEvent(@NonNull NexmoTypingEvent typingEvent) {}
};
conversation.addMessageEventListener(messageListener);
Añadir NXMConversationDelegate como extensión de un ViewController o similar, y aplicar conversation(_ conversation: NXMConversation, didReceive event: NXMMessageStatusEvent):
Nota: El primer método siguiente es necesario cuando se aplica 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 == .delivered {
NSLog("Received delivered event: \(event.referenceEventUuid)")
}
}
}
Tener un ViewControllero similar, se ajustan a NXMConversationDelegate y aplicar conversation:didReceiveMessageStatusEvent::
Nota: El primer método siguiente es necesario cuando se aplica NXMConversationDelegate:
- (void)conversation:(NXMConversation *)conversation didReceive:(NSError *)error {
NSLog(@"Conversation error: %@", error.localizedDescription);
}
- (void)conversation:(NXMConversation *)conversation didReceiveMessageStatusEvent:(NXMMessageStatusEvent *)event {
if (event.status == NXMMessageStatusTypeDelivered) {
NSLog(@"Received delivered event: %li", (long)event.referenceEventUuid);
}
}
Establecer el estado del mensaje en Visto
Hay un método que establecerá un Message a visto. El siguiente fragmento de código establecerá el estado de un mensaje en visto una vez que se produzca un evento de mensaje en la conversación.
conversation.on('message', (sender, event) => {
// Can't set your own message status to seen
if (conversation.me.id !== event.from) {
event.seen().then(() => {
console.log("message event status set to seen");
}).catch((error)=>{
console.error("error setting message event status to seen ", error);
});
};
});
override fun onMessageEvent(messageEvent: NexmoMessageEvent) {
messageEvent.markAsSeen(object: NexmoRequestListener<Void> {
override fun onError(error: NexmoApiError) {...}
override fun onSuccess(result: Void?) {...}
})
}
public void onMessageEvent(@NonNull NexmoMessageEvent messageEvent) {
messageEvent.markAsSeen(new NexmoRequestListener() {
@Override
public void onError(@NonNull NexmoApiError error) { ... }
@Override
public void onSuccess(@Nullable Object result) { ... }
});
}
if conversation.myMember?.memberUuid != event.fromMemberId {
conversation.sendMarkSeenMessage(event.uuid, completionHandler: nil)
}
if (conversation.myMember.memberUuid != event.fromMemberId) {
[conversation sendMarkSeenMessage:event.uuid completionHandler:nil];
}
Mensaje recibido
Dada una conversación de la que ya eres miembro, message:seen se recibirán eventos cuando Message los eventos se fijan para verlos en el contexto de la conversación actual:
conversation.on('message: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);
Añadir NXMConversationDelegate como extensión de un ViewController o similar, y aplicar conversation(_ conversation: NXMConversation, didReceive event: NXMMessageStatusEvent):
Nota: El primer método siguiente es necesario cuando se aplica 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)")
}
}
}
Tener un ViewControllero similar, se ajustan a NXMConversationDelegate y aplicar conversation:didReceiveMessageStatusEvent::
Nota: El primer método siguiente es necesario cuando se aplica 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);
}
}