Envoyez et recevez des messages GPChat au nom d'un bot d'intégration, en conversation privée ou dans un groupe, et recevez les messages entrants via webhook.
Un bot est un vrai compte GPChat (isBot: true) rattaché à votre application. Il peut envoyer et
recevoir des messages exactement comme un utilisateur classique. Créez votre application et provisionnez un bot
depuis l'espace développeur — la clé API générée porte automatiquement le scope
messages:send.
Toutes les requêtes utilisent une clé API dans l'en-tête Authorization :
Authorization: Bearer gpk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
La clé doit porter le scope messages:send. Limite par défaut : 60 requêtes/minute par clé.
/publicSendMessage| Champ | Type | Description |
|---|---|---|
to | string | userId GPChat du destinataire |
type | string | text · image · audio · doc |
content | string | Texte du message (requis pour type: text) |
fileUrl | string | URL du fichier (requis pour les autres types) |
caption | string | Légende optionnelle pour un média |
curl -X POST https://api.gpchat.app/v1/messages \
-H "Authorization: Bearer gpk_live_..." \
-H "Content-Type: application/json" \
-d '{
"to": "UID_DESTINATAIRE",
"type": "text",
"content": "Bonjour depuis mon intégration !"
}'
/publicSendGroupMessageMêmes champs que ci-dessus, avec groupId à la place de to. Le bot doit être membre du groupe.
curl -X POST https://api.gpchat.app/v1/messages/group \
-H "Authorization: Bearer gpk_live_..." \
-H "Content-Type: application/json" \
-d '{ "groupId": "GROUP_ID", "type": "text", "content": "Bonjour tout le monde !" }'
Configurez un webhookUrl sur votre application pour recevoir les messages adressés à votre bot en
temps réel. GPChat envoie une requête POST signée à chaque nouveau message :
POST <votre webhookUrl>
Content-Type: application/json
X-GPChat-Event: message.received
X-GPChat-Signature: t=1699999999,v1=<hmac_hex>
{
"type": "message.received",
"data": {
"from": "UID_EXPEDITEUR",
"msgId": "...",
"chatId": "...",
"type": "text",
"textMsg": "Bonjour !"
}
}
Les messages de groupe utilisent l'événement group_message.received (mêmes champs, plus groupId).
La signature HMAC-SHA256 porte sur {timestamp}.{corps brut de la requête}, avec votre webhookSecret :
const [t, v1] = signatureHeader.replace('t=', '').split(',v1=');
const expected = crypto.createHmac('sha256', webhookSecret)
.update(`${t}.${rawBody}`).digest('hex');
// comparer expected et v1 en temps constant (crypto.timingSafeEqual)
abandoned. Répondez avec un code 2xx sous 10 secondes pour confirmer la réception.
| HTTP | Cause |
|---|---|
| 401 | Clé API manquante, invalide ou révoquée |
| 403 | Scope manquant, application suspendue, ou permissions de groupe insuffisantes |
| 404 | Destinataire ou groupe introuvable |
| 422 | Clé API non rattachée à un bot |
| 429 | Limite de requêtes dépassée |