AkamaSoft

UrielSender porte les numéros WhatsApp et livre les réponses à votre application. Django n’ouvre pas de session WhatsApp. Il envoie un appel REST pour parler, et il vérifie une signature HMAC avant de croire un webhook.

L'application envoie via REST. Les réponses reviennent par un webhook HMAC.

Deux sens, deux vérifications

À l’aller, l’application s’authentifie avec sa clé d’API et demande l’envoi d’un texte ou d’un média vers un numéro déjà connecté dans le tableau de bord. Au retour, UrielSender appelle une URL de votre site. Ce second appel doit prouver qu’il vient bien du service, pas d’un client qui a deviné l’adresse.

Django recalcule le HMAC du corps brut et refuse la requête si la signature ne correspond pas.

Vérifier le corps brut

L’en-tête s’appelle X-Uriel-Signature. C’est le HMAC-SHA256 du corps brut, avec le secret rendu à la création du webhook. Il peut être préfixé par sha256= : on retire ce préfixe avant de comparer. Relire request.POST ou ré-encoder le dictionnaire change les octets, et une signature valide devient fausse.

import hashlib
import hmac

from django.conf import settings
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

def _signature(header):
    value = (header or "").strip()
    if value.lower().startswith("sha256="):
        return value.split("=", 1)[1]
    return value

@csrf_exempt
def urielsender_webhook(request):
    if request.method != "POST":
        return HttpResponse(status=405)
    body = request.body
    given = _signature(request.headers.get("X-Uriel-Signature", ""))
    digest = hmac.new(
        settings.URIELSENDER_WEBHOOK_SECRET.encode(),
        body,
        hashlib.sha256,
    ).hexdigest()
    if not hmac.compare_digest(given, digest):
        return HttpResponse(status=401)
    return HttpResponse(status=200)

compare_digest évite de s’arrêter au premier caractère différent. Le secret et la clé d’API viennent des variables d’environnement, jamais du dépôt. La vue est exemptée de CSRF parce que l’appelant n’est pas un formulaire du site : la signature tient ce rôle.

Répondre vite

On répond 200 dès que la signature est bonne et que l’événement est enregistré. L’envoi d’un message, la mise à jour d’une fiche ou un appel lent se font ensuite, dans une tâche. Un webhook qui attend une minute se fait rappeler, et le même événement arrive deux fois. On garde donc un identifiant d’événement pour ignorer le doublon.

Le tour du produit, les numéros multiples et le pilotage par MCP sont dans l’article sur l’API. Le site du service est urielsender.site.

Auteur : Mvondo bekey anael

ceo | founder
Compétences
  • • Maîtrise des environnements Unix, Linux, Mac, Windows, iOS et Android
  • • Programmation orientée objet : Python, Ruby, C++, Java, PHP, JavaScript
  • • Certifié Linux LPI (101, 102, 202, 203, 301, 303)
  • • Certifié AdWords Professional, certifié CEH (6, 7, 8, 9, 10, 11)
  • • Maîtrise de Docker, VMware vSphere, Microsoft Hyper-V, Citrix, VirtualBox, Proxmox VE
Annonce