Cargo-Planner Docs

双方向通信

頻繁に使用されるパターンとして、入力データをAPIに送信し、計算を行った結果を取得してアプリケーションに埋め込むというものがあります。

時には、コンテナからいくつかの貨物を削除したり、他の貨物を追加したりするような手動での再配置を行いたいことがあります。そのような変更を行った場合、アプリケーションにもその変更が反映されると便利です - Cargo-Plannerがあなたのシステムと連携することを望むでしょう。そのためには、いくつかのWebhookを追加する必要があります。

Webhook

Webhookは、特定のイベントを購読するために設定するエンドポイントです。

例えば、ロードプランが保存/更新されるたびに、その結果をサーバーに送信したいとします。これを達成する方法は次の通りです:

Webhookの作成

  1. Webアプリケーションの開発者ポータルに移動します
  2. Webhookセクションを展開します
  3. Webhookを作成するボタンを押します
  4. データを投稿したいURLを入力し、購読したいイベントを選択します
  5. 保存ボタンを押します

イベントのリスニング

サーバー側で、エンドポイントを追加します。これは、エンドポイント作成時に上記のURLセクションで指定したものと同じです。


from flask import Flask, request, abort
import hmac
import hashlib

app = Flask(__name__)

@app.route('/events-from-cargoplanner/', methods=['POST'])
def receive_webhook():
    payload = request.get_data(as_text=True)
    received_signature = request.headers.get('X-Hub-Signature')

    secret = "_nf7TmrgTJt6Gk43d9aSAK_yOEE58KXlTgvotei3Xe4"  # エンドポイント用に生成されたシークレットを追加

    expected_signature = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()

    if hmac.compare_digest(f'sha256={expected_signature}', received_signature):
        # ペイロードを処理
        return "Payload processed", 200
    else:
        abort(403, 'Signature verification failed')

if __name__ == '__main__':
    app.run()

Webhookを作成すると、Cargo-Plannerからのデータであることを確認するためにサーバーで使用できるシークレットが提供されます。