Langage :
Flows d'autorisation
OAuth2Authorization Code Flow — le seul flow supporté par AlfyChat.
Étape 1 — Rediriger l'utilisateur
Construisez l'URL de la page de consentement avec les paramètres suivants :
| Paramètre | Requis | Description |
|---|---|---|
| client_id | Oui | L'id de votre bot |
| redirect_uri | Oui | URI de callback (doit être enregistrée) |
| scope | Oui | Scopes séparés par des espaces (ex: bot identify) |
| permissions | Non | Bitmask des permissions (si scope bot) |
| state | Non | Valeur aléatoire pour protection CSRF |
const params = new URLSearchParams({
client_id: 'VOTRE_BOT_ID',
redirect_uri: 'https://monapp.fr/callback',
scope: 'bot identify',
permissions: '3', // READ_MESSAGES | SEND_MESSAGES
state: crypto.randomUUID(), // protection CSRF
});
const authUrl = `https://alfychat.app/oauth2/authorize?${params}`;
window.location.href = authUrl;Étape 2 — L'utilisateur autorise
AlfyChat affiche une page de consentement listant les permissions demandées. Si l'utilisateur accepte, il est redirigé vers votre redirect_uri avec un paramètre code valide 10 minutes.
# Callback reçu
https://monapp.fr/callback?code=abc123&state=votre-stateEn cas de refus, le callback contient ?error=access_denied à la place du code.
Étape 3 — Échanger le code
Depuis votre serveur (jamais côté client), échangez le code contre un access_token :
POST https://gateway.alfychat.app/api/oauth2/token
Content-Type: application/json
{
"client_id": "VOTRE_BOT_ID",
"client_secret": "VOTRE_CLIENT_SECRET",
"code": "abc123",
"redirect_uri": "https://monapp.fr/callback"
}Réponse
{
"success": true,
"data": {
"access_token": "tok_xxxxxxxxxxxxxxxx",
"token_type": "Bot",
"expires_in": 2592000,
"scope": "bot identify"
}
}Étape 4 — Appeler l'API
Utilisez l'access_token pour appeler l'API au nom de l'utilisateur :
GET https://gateway.alfychat.app/api/users/me
Authorization: Bot tok_xxxxxxxxxxxxxxxxconst res = await fetch('https://gateway.alfychat.app/api/users/me', {
headers: { Authorization: `Bot ${accessToken}` },
});
const { data } = await res.json();
console.log(data.user.username);Gestion des erreurs
access_deniedL'utilisateur a refusé l'autorisation.invalid_clientclient_id ou client_secret incorrect.invalid_grantCode expiré (>10 min), déjà utilisé, ou redirect_uri incorrecte.invalid_redirect_uriLa redirect_uri n'est pas enregistrée sur votre bot.