Open
Description
The nRF Cloud Message Routing now sends AWS Thingy Shadow documents. This is much more convenient compared to the current implementation which requires the backend to poll the device state regularly.
The webhook now receives a message that is a copy of the $aws/things/<thing ID>/shadow/update/documents
message.
In the example below this was the shadow update: {"reported": { "foo": "bar" }}
{
"type": "device.messages",
"messages": [
{
"teamId": "<team ID>",
"deviceId": "<device ID>",
"messageId": "251cd7a1-23a4-422d-be14-1aafd209e75b",
"topic": "$aws/things/<device ID>/shadow/update/documents",
"message": {
"previous": {
"state": {
"desired": {
"nrfcloud_mqtt_topic_prefix": "prod/<team ID>/",
"pairing": {
"state": "paired",
"topics": {
"d2c": "prod/<team ID>/m/d/<device ID>/d2c",
"c2d": "prod/<team ID>/m/d/<device ID>/+/r"
}
}
}
},
"metadata": {
"desired": {
"nrfcloud_mqtt_topic_prefix": { "timestamp": 1723215415 },
"pairing": {
"state": { "timestamp": 1723215415 },
"topics": {
"d2c": { "timestamp": 1723215415 },
"c2d": { "timestamp": 1723215415 }
}
}
}
},
"version": 1
},
"current": {
"state": {
"desired": {
"nrfcloud_mqtt_topic_prefix": "prod/<team ID>/",
"pairing": {
"state": "paired",
"topics": {
"d2c": "prod/<team ID>/m/d/<device ID>/d2c",
"c2d": "prod/<team ID>/m/d/<device ID>/+/r"
}
}
},
"reported": { "foo": "bar" }
},
"metadata": {
"desired": {
"nrfcloud_mqtt_topic_prefix": { "timestamp": 1723215415 },
"pairing": {
"state": { "timestamp": 1723215415 },
"topics": {
"d2c": { "timestamp": 1723215415 },
"c2d": { "timestamp": 1723215415 }
}
}
},
"reported": { "foo": { "timestamp": 1749799965 } }
},
"version": 2
},
"timestamp": 1749799965
},
"receivedAt": "2025-06-13T07:32:45.090Z"
}
],
"timestamp": "2025-06-13T07:32:45.145971775Z"
}