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.
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.
La démarche
Pointez DROP_WEBHOOK_URL vers une route à vous, et vérifiez la signature avec verifyWebhook de
@colis/protocol, le même code que celui qui signe :
import { verifyWebhook, type ColisWebhookEvent } 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) as ColisWebhookEvent
if (event.type === 'parcel.changes_requested') {
await createTicket({
title: `Corrections : ${event.data.filename ?? event.data.code}`,
body: event.data.comment ?? '',
reference: event.data.code,
link: event.data.url,
})
}
return new Response(null, { status: 204 })
}createTicket est votre code : l’API de votre outil de suivi. Le code du colis relie le ticket à la
livraison ; le lien ramène au fichier tant qu’il vit.
À surveiller
- Lisez le corps brut. La signature porte sur les octets reçus :
request.text()avant toutJSON.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.
- Répondez vite, et une fois. Une nouvelle tentative porte le même
webhook-id: gardez-le pour ne pas créer deux tickets. Une réponse4xxautre que408et429n’est pas retentée. - Aucun secret dans l’événement.
datane contient jamais le mot de passe, son empreinte, ni le jeton de l’expéditeur.