Webhooks
Bumblebee has the ability to send an HTTP POST request every time new data is received from a node.
This functionality is called a 'webhook'. After setting up a webhook, Bumblebee will send new data to the configured URL so you immediately know when for example the location of one of your assets has changed.
Webhooks can be configured by administrators here.
Creating a webhook
For the webhook you have the following options:
URL | This is the endpoint to send the HTTP POST request to. |
---|---|
Data | Select which data updates you want to receive. |
Headers |
You can add multiple key / value pairs which will be sent as HTTP headers with every request. If your request
required HTTP authorization for example, you can add an Authorize header with your credentials.
|
You can request updates for the following data:
Battery levels | Receive a request every time we receive a battery level from a node. |
---|---|
GPS-locations | Receive a request every time we receive a GPS-location from a node. |
Temperatures | Receive a request every time we receive temperature from a node. |
Sensor values | Receive a request every time we receive sensor values from a node. |
Sigfox messages | Receive a request every time we receive any data from a node. |
Receiving a webhook
To receive a webhook message, your webserver must accept an HTTP POST request on the configured URL. All request always contain a JSON body containing the data you subscribed for.
HTTP method
POST
Headers
Content-Type |
Always application/json to indicate Bumblebee is sending JSON data. |
---|---|
User-Agent |
Contains the version of Bumblebee that sent the request. (E.g. Bumblebee v1.0.1 webhooks )
|
X-Request-ID |
Contains the ID of the webhook message, you can persist this ID to check if you already processed the webhook. |
Custom headers | The headers configured in the webhook will also be sent. |
Body
{ "data_type": "Type", "data": { "id": "Abc123", "latitude": 52.255223, "longitude": 6.160636, "radius_accuracy": 48.5, "recorded_at": "2025-01-01T13:00:00.000+01:00" }, "asset": { "id": "Abc123" }, "node": { "id": "Ref001", "sigfox_id": "123ABC" }, "message_info": { "id": "Abc123", "sent_at": "2025-01-01T13:00:00.000+01:00", "message_number": 123, "external_io": 1, "day_number": 123 } }
data_type |
Contains the type of data that is being sent. See data for more information. |
---|---|
data |
Contains the actual data of the request. The contents of this node differ based on the value of
data_type . See data for more information.
|
asset |
Contains the ID of the asset related to the data. This node is omitted if the asset is unknown. |
node |
Contains the ID and Sigfox ID of the node that sent the data. This node is omitted if the node is unknown. |
message_info |
Contains metadata from the Sigfox message that contained this data. This node is omitted for battery levels and Sigfox messages. If present it contains the ID of the message info, the timestamp when the message was sent, the sequence number for the message, and the state of the external i/o. See the Sigfox message info section for more information. |
Response
Status 2XX
When the webhook recipient responds with a 2XX HTTP status, the webhook message will be marked as delivered.
Status 4XX
When the webhook recipient responds with a 4XX HTTP status, the webhook message will be marked as canceled and will not be tried again.
Status 5XX
When the webhook fails or the recipient responds with a 5XX HTTP status, the webhook message will be marked as failed and will be retried for a maximum of 5 times. If all 6 attempts fail, the webhook message will be marked as canceled and will not be tried again.
Error message
The recipient can respond with an optional error message which will be persisted in Bumblebee. To respond with an
error message, add a Content-Type
header with application/json
as the value, and add a JSON
object to the body containing an error
node:
{"error": "Your error message"}
Error messages will only be saved when the recipient responds with a 4XX or 5XX status, and will be truncated to 750 characters.
Retries
When a webhook fails or the recipient responds with a 5XX HTTP status, the delivery of the webhook message will be retried after a staggered delay. The timing of this is as follows:
Attempt | Delay |
---|---|
1 | None. The first attempt will be done immediately. |
2 | After 1 minute. |
3 | After 5 minutes. |
4 | After 15 minutes. |
5 | After 1 hour. |
6 | After 3 hours. |
Data
The data sent by Bumblebee differs for each data type. See the documentation below for the exact contents of each
request, plus documentation for the information in the data
node.
Battery level
Data type
battery_level/update
Body
{ "data_type": "battery_level/update", "data": { "recorded_at": "2025-01-01T13:00:00.000+01:00", "percentage": 90 }, "asset": { "id": "Abc123" }, "node": { "id": "Ref001", "sigfox_id": "123ABC" } }
recorded_at |
When the battery level was recorded. |
---|---|
percentage |
Contains the charge-percentage of the battery, rounded to 5 percent. |
GPS-location
Data type
geo_location/create
Body
{ "data_type": "geo_location/create", "data": { "id": "Abc123", "latitude": 52.255223, "longitude": 6.160636, "radius_accuracy": 48.5, "recorded_at": "2025-01-01T13:00:00.000+01:00" }, "asset": { "id": "Abc123" }, "node": { "id": "Ref001", "sigfox_id": "123ABC" }, "message_info": { "id": "Abc123", "sent_at": "2025-01-01T13:00:00.000+01:00", "message_number": 123, "external_io": 1, "day_number": 123 } }
latitude |
The latitude of the GPS-coordinate, between -90 and 90 |
---|---|
longitude |
The longitude of the GPS-coordinate, between -180 and 180 |
radius_accuracy |
The accuracy of the GPS-coordinate. This feature is unimplemented for now. |
recorded_at |
When the GPS-coordinate was recorded. |
Temperature
Data type
temperature/create
Body
{ "data_type": "temperature/create", "data": { "id": "Abc123", "degrees": 21.5, "recorded_at": "2025-01-01T13:00:00.000+01:00" }, "asset": { "id": "Abc123" }, "node": { "id": "Ref001", "sigfox_id": "123ABC" }, "message_info": { "id": "Abc123", "sent_at": "2025-01-01T13:00:00.000+01:00", "message_number": 123, "external_io": 1, "day_number": 123 } }
degrees |
The temperature of the node in degrees Celcius. |
---|---|
recorded_at |
When the temperature was recorded. |
Sensor values
Data type
sensor_value/create
Body
{ "data_type": "sensor_value/create", "data": { "id": "Abc123", "recorded_at": "2025-01-01T13:00:00.000+01:00", "sensor1_raw_value": 123, "sensor2_raw_value": 456, "sensor3_raw_value": 789 }, "asset": { "id": "Abc123" }, "node": { "id": "Ref001", "sigfox_id": "123ABC" }, "message_info": { "id": "Abc123", "sent_at": "2025-01-01T13:00:00.000+01:00", "message_number": 123, "external_io": 1, "day_number": 123 } }
sensor1_raw_value |
The raw value of sensor 1 ranging from 0 to 4095. |
---|---|
sensor2_raw_value |
The raw value of sensor2 ranging from 0 to 4095. |
sensor3_raw_value |
The raw value of sensor3 ranging from 0 to 4095. |
recorded_at |
When the sensor value was recorded. |
Sigfox message info
Data type
sigfox_message_info/create
Body
{ "data_type": "sigfox_message_info/create", "data": { "id": "Abc123", "sent_at": "2025-01-01T13:00:00.000+01:00", "created_at": "2025-01-01T13:00:00.000+01:00", "recorded_at": "2025-01-01T13:00:00.000+01:00", "snr": 1.234, "rssi": 1.234, "sequence": 123, "message_number": 123, "external_io": 1, "day_number": 123, "processing_error": "Processing Error", "node_configuration": { "id": "Ref001", "name": "Name", "behavior_id": "Abc123", "behavior_version": 3, "behavior_profile": "unless", "trigger_type": "motion" } }, "asset": { "id": "Abc123" }, "node": { "id": "Ref001", "sigfox_id": "123ABC" } }
recorded_at |
When the data was recorded by the node.
This field can be null for acknowledgement messages or if the
data could not be parsed.
|
---|---|
sent_at |
When the message was sent by the node. (Please note: If a message is being sent again, the sent_at will contain the timestamp for when the message was sent again, not the original timestamp) |
snr |
The signal-to-noise ratio in dB. |
rssi |
The received signal strength indicator in dBm. |
sequence |
The Sigfox sequence number of the message. |
message_number |
The Bumblebee sequence number of the message.
This field can be null for acknowledgement messages or if the data could not be parsed.
|
external_io |
The state of the external i/o at the time of the message. A value of 0 means the external i/o is
active, a value of 1 means the external i/o is inactive.
This value will be nil
for acknowledgement messages, if the data could not be parsed, or
if the node version is below 0.9
|
created_at |
When we received this message from Sigfox. |
processing_error |
Errors occured during the processing of the message. Omitted when empty. |
node_configuration |
The node-configuration that was active at the time the message was recorded. This can differ from the configuration that is assigned to the asset if the node has not received the latest configuration changes yet. This node can be null for acknowledgement messages or if the data could not be parsed.
|
node_configuration /id |
The id of the configuration. |
node_configuration /name |
The name of the configuration. |
node_configuration /behavior_id |
The ID of the behavior that was active. |
node_configuration /behavior_version |
The version of the behavior that was active. The version will change every time you alter the behavior. |
node_configuration /behavior_profile |
The profile of the behavior that was active, the value is one of: default or unless .
|
node_configuration /trigger_type |
The type of trigger that caused this message to be sent, only present if behavior_profile is
unless .
|
Message log
All webhook messages sent by Bumblebee are accessible by administrators through the backoffice via your webhook. The webhooks for your customer are listed here. After opening one of your webhooks you can access the message log from the sidebar on the left.
By default, all messages are listed ordered by descending creation date/time. Optionally you can filter the messages
by their state:
pending
, sent
, failed
, or canceled
.
States
pending |
The message has been created but has not been sent yet. |
---|---|
failed |
Delivery of the message has failed so far, Bumblebee will retry delivering the message. |
canceled |
Delivery of the message has failed, Bumblebee will not retry delivering this message. |
sent |
The message has been successfully delivered. |
Status message
If the message status is failed
or canceled
, Bumblebee will tell you why the delivery failed
if you open the message.