Cargo-Planner Docs
Comunicação bidirecional
Um padrão de uso frequente é que você envia alguns dados de entrada para nossa API, nós fazemos o processamento e você receberá um resultado, que pode ser incorporado em sua aplicação.
Às vezes, você quer fazer algumas reorganizações manualmente, onde pode querer excluir algumas cargas de um contêiner, e adicionar outras. Quando você faz esse tipo de modificação, seria ótimo se sua aplicação também recebesse essas alterações - você quer que o Cargo-Planner interaja com seu sistema também. Então você vai querer adicionar alguns webhooks.
Webhooks
Webhooks são basicamente endpoints que você configura para assinar certos eventos.
Digamos que assim que um plano de carga for salvo/atualizado por você, você queira que esse resultado seja enviado para o seu servidor. É assim que você consegue isso:

- Vá para o portal do Desenvolvedor na aplicação web
- Expanda a seção de webhooks
- Pressione criar webhook
- Insira a URL para a qual você deseja que os dados sejam enviados, além de selecionar qual evento você deseja assinar
- Pressione salvar
Ouvindo eventos
No seu servidor, adicione um endpoint, o mesmo que você especificou na seção de URL acima ao criar o endpoint
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" # Adicione o segredo gerado para o seu endpoint
expected_signature = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
if hmac.compare_digest(f'sha256={expected_signature}', received_signature):
# Processar o payload
return "Payload processed", 200
else:
abort(403, 'Falha na verificação da assinatura')
if __name__ == '__main__':
app.run()
Ao criar um webhook, você receberá um segredo que pode ser usado no seu servidor para garantir que os dados realmente venham do Cargo-Planner.