Webhooks y API de notificaciones de DeHub
Tu servidor y DeHub se hablan en ambos sentidos. DeHub envía eventos firmados a tu webhook, y tu servidor envía notificaciones a quienes añadieron tu app.
Recibir eventos
Pon webhookUrl en tu manifiesto. DeHub envía un POST con este cuerpo:
{ "event": "app_added", "token": "eyJhbGciOiJFUzI1NiIs…" }
| Evento | Cuándo |
|---|---|
app_added | Alguien añadió tu app. Ya puede recibir tus notificaciones. |
app_removed | Alguien quitó tu app. Deja de notificarle. |
payment | Alguien pagó a tu app con dehub.actions.pay(). El token añade amount, chainId, txHash y el memo. |
tip | Opcional. La cartera propietaria recibió una propina. Añade actor, amount, currency y el postId cuando la propina fue en una publicación. |
follow | Opcional. Alguien siguió a la cartera propietaria. Añade actor. |
mention | Opcional. Alguien mencionó a la cartera propietaria. Añade actor y el postId. |
ping | Una prueba enviada desde el botón Webhook en dehub.io/apps/dev. |
tip, follow y el mention se refieren a la cartera propietaria de tu app, así que sub es esa cartera. Indica los que quieras en tu manifiesto y envíalo de nuevo:
"webhookUrl": "https://tipjar.example.com/api/dehub-webhook",
"webhookEvents": ["tip", "follow", "mention"]
token es un JWT firmado con typ: "event", el event nombre del evento, sub (la billetera del usuario) y aud (tu dominio). Verifícalo con las mismas claves públicas que los tokens de inicio de sesión, e ignora cualquier cuerpo cuyo token no se verifique. Responde en 5 segundos con un 2xx. Un error de red o un 5xx se reintenta una vez a los 3 segundos. Cada intento aparece en Webhook en dehub.io/apps/dev. Aun así, toma dehub.context's client.added como fuente de verdad cuando alguien abre tu app.
Enviar notificaciones
Crea una clave de notificaciones en dehub.io/apps/dev. Solo se muestra una vez; DeHub guarda solo un hash, así que una clave perdida se reemplaza, no se recupera.
curl -X POST https://aigxuutjaqsywioxjefr.supabase.co/functions/v1/miniapp-notify \
-H 'Authorization: Bearer dhmk_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{
"notificationId": "turn-42",
"title": "Your turn",
"body": "Sam played a move. Tap to answer.",
"targetUrl": "https://chess.example.com/game/42",
"wallets": ["0xabc…"]
}'
| Campo | Reglas |
|---|---|
notificationId | Obligatorio. Hasta 128 caracteres. El mismo id llega a una persona como máximo una vez cada 24 horas. |
title | Obligatorio. Hasta 32 caracteres. |
body | Hasta 128 caracteres. |
targetUrl | Un enlace https en el dominio de tu app, que se abre al tocar la notificación. |
wallets | A quién notificar. Si lo omites, se notifica a todos los que añadieron tu app (hasta 1.000 por llamada). |
La respuesta indica a quién se envió y por qué se omitió a alguien: { sent, sentTo, skipped: { duplicate, rateLimited, notAdded } }. Cada persona recibe como máximo una notificación cada 30 segundos y diez al día de tu app, y solo si la añadió y dejó activadas sus notificaciones.
Recibos de pago
dehub.actions.pay() se resuelve solo después de que DeHub compruebe la transferencia en cadena y entrega a tu app un recibo firmado para verificar en tu servidor. El payment webhook es una segunda copia para tu servidor, enviada en segundo plano. Consulta Pagos.
Abrir DeHub