- Desenvolvedores
- Guias
- Webhooks: fique sabendo de cada alteração
Webhooks: fique sabendo de cada alteração
Receba um POST assinado sempre que o cardápio mudar, em vez de consultar a API a todo momento.
Em vez de consultar a API a todo momento, registre uma URL e o Delimenu enviará a ela um POST sempre que o cardápio mudar: ao criar, editar ou excluir um produto ou uma categoria, e ao alterar os dados do restaurante. Eles são criados em Configurações › Webhooks no painel ou com POST /restaurants/{ref}/webhooks, até 5 por restaurante.
Eventos disponíveis: product.created, product.updated, product.deleted, category.created, category.updated, category.deleted, restaurant.updated, restaurant.deleted.
Verificar a assinatura
Cada requisição vem assinada no cabeçalho Delimenu-Signature com o segredo do endpoint, que é exibido uma única vez. Verifique-a sempre, sobre o corpo exatamente como chegou:
import { createHmac, timingSafeEqual } from 'node:crypto'
// rawBody: the request body exactly as received (a string or Buffer), not re-serialized JSON
export function verifyDelimenuWebhook(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(',').map(part => part.split('=')))
const timestamp = Number(parts.t)
if (!timestamp || Math.abs(Date.now() / 1000 - timestamp) > 300) return false
const expected = createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex')
const received = Buffer.from(parts.v1 ?? '', 'hex')
return received.length === 32 && timingSafeEqual(received, Buffer.from(expected, 'hex'))
}
// const ok = verifyDelimenuWebhook(rawBody, req.headers['delimenu-signature'], process.env.DELIMENU_WEBHOOK_SECRET)Novas tentativas
Responda com qualquer 2xx em menos de 10 segundos e faça o trabalho depois. Se falhar, tentamos de novo com espera crescente até 8 vezes durante cerca de um dia, então use o id do evento para não processá-lo duas vezes. Um endpoint que esgota as tentativas em 20 eventos seguidos é desativado; você o reativa pelo painel.