Cas d’usage
Les corrections dans vos outils
Chaque demande de corrections arrive signée sur votre route, avec le commentaire du client, prête à devenir un ticket.
import { verifyWebhook } from '@colis/protocol'
export async function POST(request: Request) {
const body = await request.text()
const result = await verifyWebhook(process.env.DROP_WEBHOOK_SECRET!, request.headers, body)
if (!result.valid) return new Response(null, { status: 401 })
const event = JSON.parse(body)
if (event.type === 'parcel.changes_requested') {
await createIssue({ // your tracker
title: `Corrections : ${event.data.filename}`,
body: event.data.comment,
reference: event.data.code,
})
}
return new Response(null, { status: 204 })
}La situation
Ce qui se passe vraiment.
Le problème
Les retours clients se perdent entre l’e-mail, la messagerie et les appels. Celui qui compte, « le logo en SVG, et le fond plus clair », doit finir dans votre outil de suivi.
Ce que colis y fait
Pointez DROP_WEBHOOK_URL vers une route à vous. verifyWebhook de @colis/protocol vérifie la signature Standard Webhooks (HMAC-SHA256) avec le même code que celui qui signe. Sur parcel.changes_requested, data.comment contient ce que le client a écrit : créez le ticket, et reliez-le au colis par son code.
À surveiller
Les pièges faciles.
Lisez le corps brut
La signature porte sur les octets reçus : request.text() avant tout JSON.parse.
Cinq minutes de tolérance
Un horodatage décalé de plus de cinq minutes est refusé, pour qu’une ancienne livraison ne puisse pas être rejouée.
Aucun secret dans l’événement
data ne contient jamais le mot de passe, son hachage, ni le jeton de l’expéditeur.
Voir aussi
D’autres façons de livrer.
Vous envoyez. Ils valident. Vous le savez.
Votre stockage, une page de livraison à votre nom, un webhook à chaque étape. Rien d’hébergé chez un tiers.