Skip to main content

Message metadata

Message metadata lets you attach key-value status data to messages. Common use cases include message reactions, gift redemption status, and order state changes.

tip
  • Metadata is supported only in direct, group, and community channels.
  • Each update can set up to 20 key-value pairs, with a maximum of 300 total per message.

Listen for metadata changes

Use MessageHandler to listen for metadata updates and removals.

kotlin
NCEngine.addMessageHandler("myHandler", object : MessageHandler {
override fun onMessageMetadataUpdated(event: MessageMetadataUpdatedEvent) {
Log.d("MetaData", "Message ${event.message.messageId} metadata updated")
event.metadata.forEach { (key, value) ->
Log.d("MetaData", "$key = $value")
}
}

override fun onMessageMetadataDeleted(event: MessageMetadataDeletedEvent) {
Log.d("MetaData", "Keys removed from message ${event.message.messageId}: ${event.keys}")
}
})

Update metadata

Use message.setMetadata() to update key-value pairs on a message.

kotlin
val expansion = mapOf(
"status" to "confirmed",
"confirmTime" to System.currentTimeMillis().toString()
)

message.setMetadata(expansion) { error ->
if (error == null) {
println("Metadata updated")
} else {
println("Update failed: ${error.code}")
}
}

Remove metadata

Use message.deleteMetadata() to remove specific keys from a message's metadata.

kotlin
val keysToRemove = listOf("status", "confirmTime")

message.deleteMetadata(keysToRemove) { error ->
if (error == null) {
println("Keys removed")
} else {
println("Remove failed: ${error.code}")
}
}

Important notes

  • Each metadata update generates an internal notification message.
  • Frequent updates generate many messages. Limit how often you update metadata.