Callbackに失敗したメッセージをSigfox APIで取得する方法

技術情報

Sigfoxを使ったアプリケーション運用において、SigfoxクラウドまではIoTデバイスからのメッセージが到達しているものの、Callbackに失敗して、ご自身のアプリケーションサーバまでメッセージが届かなかったというケースがあるかと思います。

technical092501.jpg

そのような場合に、Device Messageのリストを取得するAPI/devices/{id}/messagesを使って、Callbackに成功しているメッセージも含めて取得することも可能ですが、処理の複雑性も考えるとおすすめできません。
そのような場合におすすめなのは、DeviceTypesのAPIにある"Retrieve a list of callback errors"です。

/device-types/{id}/callbacks-not-delivered

このAPIは、Callbackに失敗したメッセージのみを取得するものです。
{id}には該当デバイスが属するDeviceType IDを入れ、since,beforeパラメータによる取得時刻の範囲指定や、offsetパラメータの指定が可能です。

動作確認

下記GETリクエストを、Basic認証付きで送ります。
https://api.sigfox.com/v2/device-types/{id}/callbacks-not-delivered
成功すると、200応答とともに下記ようなのJSONメッセージを取得できます。

response.json
{ 
  "data": [
    {
      "deviceId": "1234AB",
      "deviceTypeId": "5c187c222564327e8xxxxxxx",
     "snr": 22.19,
      "time": 1568980330000,
      "date": "2019-09-20 20:52:10",
      "data": "0b7527bf052bffa9000403f5",
      "status": 404,
      "message": "Not Found",
      "callback": {
       "url": "https://foo.com/api/dataadvanceda",
       "headers": {
       },
        "method": "POST",
       "contentType": "application/json",
       "body": {
         "device": "1234AB",
         "time": 1568980330,
         "data": "0b7527bf052bffa9000403f5",
         "seqNumber": 110,
         "lqi": "3",
         "devicetype_id": "5c187c222564327e8xxxxxxx",
         "group_id": "566ea3e09336a8059xxxxxxx"
       }
     },
     "parameters": {}
    }
  ],
  "paging": {}
}

data->callback->bodyを参照することにより、デバイスID、受信時刻、ペイロード他をAPIで取得することができます。
アプリケーションサーバ内のデータインテグリティを意識される方は是非お試しください。