UrielSender est le tableau de bord et l’API WhatsApp d’Akamasoft. Chaque entrée du menu correspond à une fonction réelle : voir l’activité, lier des numéros, envoyer, faire répondre un bot, recevoir les messages, gérer les clés, payer en FCFA, parrainer, et lire les notifications. Il n’y a pas de frais par message.
Le compte se crée sur l’inscription. Un lien ?ref=CODE enregistre un parrain. La connexion, le mot de passe oublié et la connexion OAuth sont sur le même espace. L’essai dure 15 jours : 1 numéro, 50 messages par jour, sans carte.
Tableau de bord
La page d’accueil du compte résume l’état des numéros : connectés, en attente de QR, en cours de connexion, déconnectés, logout. Elle affiche les messages envoyés et les échecs, jour par jour, et rappelle de connecter WhatsApp tant qu’aucune session n’est prête. Quand l’essai est terminé, elle le dit avant que les envois ne répondent 402.
Sessions
Une session est un numéro WhatsApp. Rien ne part tant que le statut n’est pas CONNECTED. On la crée d’abord, puis on la relie au téléphone, comme WhatsApp Web. Le téléphone n’a pas besoin de rester ouvert sur le tableau de bord ensuite.
Créer la session
- Ouvrez Sessions.
- Cliquez sur Nouvelle session.
- Donnez un nom, par exemple « Boutique Douala ». Le téléphone est facultatif.
- Cliquez sur Créer. La fiche s’ouvre. Le statut de départ est
SCAN_QR_CODE. L’identifiant (UUID) est déjà visible dans Identifiants de la session. La cléuriel_live_…ne s’affiche qu’une fois WhatsApp connecté.
La même création existe en API, avec le jeton du tableau de bord, pas avec une clé d’envoi. Une clé uriel_live_… répond 403 : elle ne peut pas créer de session.
curl -X POST https://urielsender.site/api/v1/sessions/create \
-H "Authorization: Bearer JETON_TABLEAU_DE_BORD" \
-H "Content-Type: application/json" \
-d '{"session_name":"Boutique Douala"}'
On peut ajouter phone_number et, si besoin, proxy_url (socks5://user:pass@hote:1080). Le nombre de sessions est limité par le plan.
La connecter
- Sur la fiche, cliquez sur Connecter (ou Lier avec QR).
- Le QR s’affiche tout de suite. Il change souvent : scannez-le sans faire de capture.
- Sur le téléphone : WhatsApp, puis Appareils liés, puis Lier un appareil.
- Scannez le QR. Le statut passe par
CONNECTING, puisCONNECTED, et le numéro du téléphone apparaît.
Si le téléphone dit « Impossible de lier l’appareil », le QR a déjà changé. Cliquez encore sur Connecter et scannez le nouveau code. Le flux en direct est GET /api/v1/sessions/{id}/qr. Le bouton appelle POST /api/v1/sessions/{id}/connect.
Une session DISCONNECTED se reprend avec le même bouton, sans nouveau QR : le téléphone reste lié. Si vous retirez UrielSender dans « Appareils liés », le statut devient LOGGED_OUT et il faut rescanner.
SCAN_QR_CODE— le QR est affiché en direct (flux SSE). On le scanne tout de suite, comme WhatsApp Web. Un code expiré se relance. On ne réutilise pas une capture.CONNECTING— la socket s’ouvre.CONNECTED— envoi, réception et bot sont possibles.DISCONNECTED— arrêt demandé. Connecter reprend le lien enregistré, sans QR. La fiche, la clé et le bot restent.LOGGED_OUT— WhatsApp a retiré l’appareil. Il faut un nouveau QR.
Sur la fiche : journaux de la session (consultables et effaçables), activité des messages, messages non lus, liste des groupes. À la création ou à la modification, on peut attacher un proxy HTTP ou SOCKS5 (socks5://user:pass@hote:1080) pour sortir par une autre adresse. Supprimer la session efface le bot, les clés, les webhooks et les journaux. Déconnecter ne le fait pas. Ces deux actions sont réservées au jeton du tableau de bord, pas à la clé d’envoi.
Envoyer
L’écran Envoyer choisit une session connectée, un destinataire et un texte. Le numéro est international, sans + ni espace. L’API couvre le reste, avec Authorization: Bearer uriel_live_… et la base https://urielsender.site.
POST /api/v1/messages/send-text— texte, mention, ou groupe dont l’identifiant finit par@g.us.POST /api/v1/messages/send-media— image, vidéo, audio, note vocale (ptt) ou document, par URL publique ou en base64, avec légende et nom de fichier.POST /api/v1/messages/send-location— latitude, longitude, nom du lieu.POST /api/v1/messages/send-poll— question, options, nombre de choix.POST /api/v1/messages/broadcast— le même modèle vers une liste, avecdelay_seconds. Le spintax, qui varie les formulations, est sur les plans Plus et Business.
curl -X POST https://urielsender.site/api/v1/messages/send-text \
-H "Authorization: Bearer uriel_live_xxx" \
-H "Content-Type: application/json" \
-d '{"session_id":"UUID","to":"237690000000","text":"Bonjour depuis UrielSender"}'
Une réponse avec un identifiant, ou "status": "sent", signifie que l’envoi est parti. Le moteur ajoute un délai d’environ 2 à 5 secondes et une présence « en train d’écrire ». Ce rythme limite les signalements. Il ne rend pas acceptable une liste de destinataires qui n’ont pas demandé le message.
Bots
Un bot répond sans code et sans n8n. Il est lié à une session connectée. Un seul par numéro. Six onglets :
- Général — nom, entreprise, message d’accueil.
- Menu — une touche (
1, ou le motmenu) renvoie un texte. - FAQ — des mots-clés (
prix,tarif,combien) déclenchent une réponse. - Catalogue — à partir du plan Pro. Source manuelle, URL JSON, ou BekeyMarkets. Le client tape
catalogue. La synchro se relance par l’API. - Commandes — à partir du plan Plus. Le client enchaîne
ajouter 1,panier,commander,annuler. Les commandes se filtrent : en attente, payées, livrées, annulées. Aucommander, UrielSender peut poster un JSON (téléphone, articles, total) vers votre site. La référence renvoyée s’affiche dans la commande. - API / Dev — les mêmes réglages par
/api/v1/bots: menu, FAQ, produits, synchro, commandes.
L’IA et l’agent IA sont sur le plan Business. On leur donne un prompt court. Le prix et le stock restent dans le menu et le catalogue, pas dans une réponse improvisée.
Webhooks
Ils sont éteints tant qu’on ne les active pas, sur la session ou avec PUT /api/v1/webhooks/{session_id}/config. On déclare une URL HTTPS et les événements.
messages.received— message entrant.fromfinit par@s.whatsapp.netpour un contact et par@g.uspour un groupe.textest le texte ou la légende. Un média peut accompagner l’événement : on le récupère et on le stocke de son côté.messages.ack— accusé de réception ou lecture.session.status— changement de statut.
Des filtres écartent les groupes, les statuts et les chaînes. La création renvoie un secret. Chaque appel porte X-Uriel-Signature, HMAC-SHA256 du corps brut. On compare avec hmac.compare_digest avant de parser le JSON. La rotation du secret invalide l’ancien immédiatement. Le pas à pas Django est dans l’article sur le webhook signé.
Sans URL publique, GET /api/v1/sessions/{id}/unread renvoie la file puis la vide. C’est un repli à appeler en boucle, pas le mode normal. Le bot natif, lui, répond même sans webhook.
Clés API
Chaque numéro a sa clé uriel_live_…. Elle envoie et lit pour cette session seulement. L’écran Clés API liste les clés, en fait tourner une (POST /api/v1/keys/session/{id}/rotate) et en révoque une. Après une rotation, l’ancienne clé cesse de marcher : on met à jour le serveur, n8n et MCP en même temps.
Le jeton JWT du tableau de bord est autre chose. Il crée, déconnecte et supprime les sessions. On ne le met pas dans l’application qui se contente d’envoyer des messages.
Abonnement
Les montants sont en FCFA, au mois, ou à l’année pour le prix de dix mois. Le paiement passe par Campay, Orange Money ou MTN. Un code promo se prévisualise avant d’être appliqué. Le crédit de parrainage se déduit au paiement.
- Essai — 0 F, 15 jours, 1 numéro, 50 messages par jour, menu et FAQ, médias, groupes, API, webhooks. Pas de MCP.
- Test — 2 F par mois, 1 numéro, 25 messages par jour, pour un essai local.
- Basic — 1 500 F, 1 numéro, sans plafond journalier, menu et FAQ, MCP, support prioritaire.
- Pro — 3 500 F, 3 numéros, catalogue, warmup basique, MCP.
- Plus — 6 500 F, 6 numéros, panier et commandes, spintax, warmup, MCP.
- Business — 10 000 F, 10 numéros, IA, spintax, warmup, MCP.
402 veut dire que le plan ne couvre pas l’action. 429 veut dire que le quota du jour est atteint. 409 veut dire que la session n’est pas connectée. 401 est une clé absente ou fausse. 403 est une clé utilisée hors de sa session.
Parrainage
Chaque compte a un code. Le lien est https://urielsender.site/app/register?ref=VOTRECODE. L’inscription lie le filleul, sans crédit. Quand le filleul paie un plan, le parrain reçoit 2 % du montant en crédit FCFA, déduit au prochain paiement. Exemple : un Pro à 3 500 F crédite 70 F. La liste des filleuls est sur cette page et sur GET /api/v1/auth/me/referrals.
Notifications
La cloche liste les avis du compte, par exemple une session déconnectée si cette alerte est activée. On marque un avis comme lu et on le supprime. Ce n’est pas la boîte des messages WhatsApp : ceux-là sont sur la session, dans les non-lus ou dans le webhook.
Compte
Les réglages s’ouvrent après confirmation du mot de passe, valable trente minutes.
- Profil — nom et e-mail.
- Sécurité — changement du mot de passe, huit caractères au minimum.
- Apparence — le thème du tableau de bord.
- Préférences — français ou anglais, affichage en FCFA, dollar ou euro.
- Équipe — le nom de l’équipe du compte.
- Jetons — les accès du tableau de bord, distincts des clés
uriel_live_. - Suppression du compte — demande le mot de passe, puis la confirmation
DELETE.
Documentation, aide, contact
Le menu Ressources ouvre trois portes. La documentation décrit le parcours, chaque route et les SDK. Le contrat brut est openapi.json, importable dans Scalar ou Postman. L’aide reprend les QR qui échouent, les bans, les médias reçus et le paiement. Le contact sert quand la doc ne suffit pas.
Les SDK officiels envoient au minimum un texte. Python, JavaScript et PHP couvrent aussi les médias, le lieu, le sondage, le broadcast, les groupes et les webhooks.
from urielsender import UrielSender
client = UrielSender("uriel_live_xxx", session_id="UUID")
client.send_text("237690000000", "Bonjour")
n8n et Cursor
n8n envoie avec un nœud HTTP Request vers /api/v1/messages/send-text. Il reçoit avec un nœud Webhook branché sur messages.received. Le secret vérifie X-Uriel-Signature avant d’écrire dans un tableur ou d’appeler un autre service. Make.com utilise le même appel.
MCP, à partir du plan Basic, laisse Cursor ou Claude appeler trois outils : send_whatsapp_message, read_unread_messages, get_session_status. Le programme est dans services/mcp-server du dépôt. La clé reste dans l’environnement du serveur MCP, pas dans la conversation.
Ce qu’il ne faut pas faire
- Envoyer avant
CONNECTED, ou avec la clé d’un autre numéro. - Traiter un webhook sans vérifier
X-Uriel-Signaturesur le corps brut. - Laisser une clé révoquée dans n8n ou dans MCP.
- Écrire le mot de passe d’un proxy dans un ticket ou dans Git.
- Confier un prix ou un stock à l’IA du bot.
- Enchaîner des destinataires qui n’ont pas accepté les messages. Le warmup et le spintax réduisent le risque de signalement. Ils ne remplacent pas le consentement.
La réception signée dans Django est détaillée dans l’article webhook. Le produit se prend en main sur urielsender.site.