Cargo-Planner Docs
Comunicación bidireccional
Un patrón de uso frecuente es que envías algunos datos de entrada a nuestra API, nosotros hacemos el cálculo y luego se te presentará un resultado, que puedes integrar en tu aplicación.
A veces quieres hacer algunos reajustes manualmente donde podrías querer eliminar algunas cargas de un contenedor, y otras más. Cuando hayas hecho ese tipo de modificaciones, sería genial que tu aplicación también recibiera esos cambios; quieres que Cargo-Planner interactúe con tu sistema también. Entonces querrás agregar algunos webhooks.
Webhooks
Los webhooks son básicamente puntos de conexión que configuras para suscribirte a ciertos eventos.
Digamos que tan pronto como un plan de carga es guardado/actualizado por ti, quieres que este resultado sea enviado a tu servidor. Así es como logras eso:

- Ve al portal de Desarrollador en la aplicación web
- Expande la sección de webhooks
- Presiona crear webhook
- Ingresa la URL a la que deseas que se envíen los datos, así como selecciona a qué evento deseas suscribirte
- Presiona guardar
Escuchando eventos
En tu servidor, agrega un punto de conexión, igual al que especificaste en la sección de URL arriba al crear el punto de conexión
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" # Add the secret generated for your endpoint
expected_signature = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
if hmac.compare_digest(f'sha256={expected_signature}', received_signature):
# Process the payload
return "Payload processed", 200s
else:
abort(403, 'Signature verification failed')
if __name__ == '__main__':
app.run()
Al crear un webhook recibirás un secreto que puedes usar en tu servidor para asegurarte de que los datos realmente provienen de Cargo-Planner.