Ir al contenido

Webhook

El provider de eventos Webhook permite que tu trabajador digital reciba webhooks HTTP de servicios externos como GitHub, Stripe, Shopify, etc.

  1. Configura el Provider

    answers.json
    {
    "events-webhook": {
    "enabled": true,
    "public_base_url": "https://your-domain.ngrok-free.app"
    }
    }
  2. Ejecuta la configuración

    Ventana de terminal
    gtc setup --answers answers.json ./my-bundle
  3. Registra el Webhook

    Usa la URL de webhook generada en tu servicio externo:

    https://your-domain.com/events/webhook/{tenant}/{event_type}
OpciónRequeridoDescripción
enabledHabilita/deshabilita el provider
public_base_urlURL pública para los webhooks
secret_headerNoNombre del header para la validación de firmas
secret_keyNoClave secreta para la validación de firmas
POST https://your-domain.com/events/webhook/{tenant}/{event_type}

Ejemplo:

POST https://your-domain.com/events/webhook/demo/order.created
flows/on_webhook.ygtc
name: handle_webhook
version: "1.0"
nodes:
- id: process
type: script
config:
script: |
let data = event.payload;
// Process webhook data
data
next: respond
- id: respond
type: http_response
config:
status: 200
body:
success: true
triggers:
- type: event
event_type: "order.created"
target: process
nodes:
- id: check_event
type: branch
config:
conditions:
- expression: "headers['x-github-event'] == 'push'"
next: handle_push
- expression: "headers['x-github-event'] == 'pull_request'"
next: handle_pr
default: ignore
- id: handle_push
type: script
config:
script: |
let commits = event.payload.commits;
format!("Received {} commits", commits.len())
triggers:
- type: event
event_type: "github"
target: check_event
nodes:
- id: handle_stripe
type: branch
config:
conditions:
- expression: "event.payload.type == 'payment_intent.succeeded'"
next: payment_success
- expression: "event.payload.type == 'payment_intent.failed'"
next: payment_failed
triggers:
- type: event
event_type: "stripe"
target: handle_stripe
answers.json
{
"events-webhook": {
"enabled": true,
"public_base_url": "https://your-domain.com",
"signatures": {
"github": {
"header": "X-Hub-Signature-256",
"algorithm": "sha256",
"secret": "your-github-secret"
},
"stripe": {
"header": "Stripe-Signature",
"algorithm": "stripe",
"secret": "whsec_xxx"
}
}
}
}

La mayoría de los providers de webhook esperan una respuesta rápida:

- id: ack
type: http_response
config:
status: 200
next: async_process # Process async after responding

Para tareas de larga duración, confirma primero:

nodes:
- id: acknowledge
type: http_response
config:
status: 202
body:
message: "Processing"
next: process_async
- id: process_async
type: async
config:
flow: "process_webhook_data"
payload: "{{event.payload}}"
Ventana de terminal
curl -X POST https://your-domain.com/events/webhook/demo/test \
-H "Content-Type: application/json" \
-d '{"message": "Hello from webhook"}'
Ventana de terminal
ngrok http 8080
# Visit http://localhost:4040 to inspect requests
  1. Verifica que la URL sea correcta
  2. Comprueba que la URL pública sea accesible
  3. Revisa el firewall o los grupos de seguridad
  4. Consulta los logs del servicio externo
  1. Verifica que la clave secreta coincida
  2. Comprueba que el nombre del header sea correcto
  3. Asegúrate de usar el cuerpo sin procesar para la validación