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"
}
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/documentsmessage.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" }