Sigfox Callback機能

#Sigfox Callbacksとは
[Sigfox](http://www.sigfox.com)クラウドには、Callbacksと呼ばれる機能がついています。このCallback機能とは、Sigfoxデバイスから送信され、Sigfoxクラウドに届いたデータをサードパーティーのアプリケーションサーバーに転送する機能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/7221c711-6b10-1656-a628-785a0ebe852d.png)

この機能を使用することにより、IoTアプリケーション開発で、複雑な通信プロトコル処理を必要とせず、RESTfulなデバイスメッセージ処理が可能になります。
Sigfox Callbacksは、一般的なHTTP/HTTPSでアプリケーションサーバーにデータを転送する**Custom Callback**の他、下記のIoTプロットフォームに対する専用コネクタが用意されています。

- Amazon Web Services:
    - [AWS IoT](https://aws.amazon.com/documentation/iot/)
    - [AWS Kinesis](https://aws.amazon.com/documentation/kinesis/)
- Microsoft Azure:
    - [Microsoft Azure IoT Hub](https://docs.microsoft.com/en-us/azure/iot-hub/)
    - [Microsoft Azure Event Hub](https://docs.microsoft.com/en-us/azure/event-hubs/)
- [IBM Watson Iot Platform](https://console.bluemix.net/docs/services/IoT/getting-started.html#getting-started-with-iotp)

ここでは、一般的な**Custom Callback**について説明します。
##Custom Callback設定方法
Custom Callbackは、URLを指定しアプリケーションサーバーにデータを転送することや指定したメールアドレス先にデータを転送することができます。事前に、アプリケーションサーバー側の待ち受け、もしくはメールアドレスをご準備ください。また、Callback設定は、DEVICE TYPE（複数デイバスをグルーピング化したもの）単位となります。
1. Callback設定をしたいDEVICE TYPEを選択し、左メニューの**CALLBACKS**をクリック。
2. 右上の[New]ボタンをクリックすると下記画面となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/dd8a789e-e22e-02a1-0383-9a49ebda071d.png)
3. ここで、Custom callbackを選択してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/408fb0ea-30d9-3494-fe83-e404e6cf6c5c.png)
4. この画面でCallback設定を行います。各メニューの説明をしておきます。

- Type
    - DATA: ペイロードデータ（メッセージ）を転送
        - UPLINK: 上りメッセージを転送
        - BIDIR: 上りメッセージの転送に加え、下りメッセージの応答
    - SERVICE: メッセージ以外の付加サービス情報の転送
        - STATUS: デバイスのバッテリー電圧や温度情報の転送
        - GEOLOC: ~~位置情報サービスオプション(Sigfox Atlas)~~ *GEOLOC CallbackはData Advanced Service Callbackにマイグレートされました
        - ACKNOWLEDGE: 下りメッセージを送信したことを通知
        - REPEATER: Sigfoxリピータ情報（日本対応のリピータはまだ出ていません）
        - DATA_ADVANCED: Sigfox Altas位置情報サービスやRFメタデータ用
    - ERROR: 通信エラー情報の転送
- Channel
    - URL: アプリケーションサーバへの転送
    - BATCH_URL: アプリケーションサーバへの転送。ですが、これを選んだ場合は、複数のデバイスからのメッセージを1秒間まとめて転送します。
    - EMAIL: メールアドレス先への転送
- Custom payload config: ペイロードデータを独自の記述言語を使いparseする機能です。（別記事で説明予定）
- Url patern: 転送先アプリケーションサーバの待ち受けURL
- Use HTTP Method: HTTPメソッド。GET/PUT/POSTから選択できます。
- Send SNI: SSL/TLSの拡張仕様 Server Name Indication (SNI)を使用する場合にチェックを入れます。（☑推奨）
- Headers: HTTP/HTTPSのヘッダを付加したい場合に設定します
- Contents type: コンテンツタイプ。例えば、JSON形式で送る場合は、application/json
- Body: コンテンツの中身です

Bodyでは、下記変数を{}カッコ括りで記述することが可能で、
`device, time, duplicate, snr, station, data, avgSnr, lat, lng, rssi, seqNumber, deviceTypeId`
例えば、{device}と記述した場合、この部分が実際のSigfoxデバイスのIDに切り替わってPOSTされることになります。
*注意：duplicatie, snr, station, avgSnr, lat, lng, rssiは2020年4月に廃止されました。Data Advanced Service Callback及び、それに伴うオプションの契約が必要となります。

##Custom Callback設定の一例
ここでは、www.foo.com/receiveapiで待ち受けてもらっているアプリケーションサーバに対してJSONでPOSTする例を記します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/7065e395-cdd0-9fe4-0f8c-821522af3fce.png)
このように設定すると、デバイスID "12AB90"から"1234567890ABCDEF"というデータ（メッセージ）が送信された場合に、

```
{
  device:"12AB90",
  time:"1527860900",　　<-unixタイムスタンプです
  data:"1234567890ABCDEF"
}
```
というBodyがPOSTされるようになります。
初めての方は、まず、Channelを[EMAIL]にして、ご自身のメールアドレス先にデータ（メッセージ）を転送されることをお勧めします。

[Next > Custom payload config機能](https://qiita.com/ghibi/items/361ea55ea04658b4193c)
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/d6ad10bc-75ba-8124-14d4-f144657c6473.png)](https://twitter.com/ghibi)