build-zoom-team-chat-app

Par anthropics · knowledge-work-plugins

Skill de référence pour Zoom Team Chat. À utiliser après routage vers un workflow de chat lors de la création d'intégrations de messagerie à portée utilisateur, d'expériences chatbot, de cartes enrichies, de boutons, de slash commands ou de webhooks de chat.

npx skills add https://github.com/anthropics/knowledge-work-plugins --skill build-zoom-team-chat-app

/build-zoom-team-chat-app

Documentation de référence pour les intégrations Zoom Team Chat. À utiliser après que le workflow soit clair, notamment quand la distinction entre Team Chat API et Chatbot API importe.

À lire en premier (Critique)

Il existe deux types d'intégration différents qui ne sont pas interchangeables :

  1. Team Chat API (type utilisateur)

    • Envoie les messages en tant qu'utilisateur authentifié réel
    • Utilise User OAuth (authorization_code)
    • Famille d'endpoints : /v2/chat/users/...
  2. Chatbot API (type bot)

    • Envoie les messages en tant qu'identité de votre bot
    • Utilise Client Credentials (client_credentials)
    • Famille d'endpoints : /v2/im/chat/messages

Si vous choisissez le mauvais type au départ, l'authentification/scopes/endpoints ne correspondent pas et l'implémentation échoue.

Documentation officielle : https://developers.zoom.us/docs/team-chat/
Documentation Chatbot : https://developers.zoom.us/docs/team-chat/chatbot/extend/
Référence API : https://developers.zoom.us/docs/api/rest/reference/chatbot/

Liens rapides

Nouveau sur Team Chat ? Suivez ce parcours :

  1. Démarrer - Chemin rapide complet (type utilisateur vs type bot)
  2. Choisir votre API - Team Chat API vs Chatbot API
  3. Configuration d'environnement - Identifiants, scopes, configuration d'app
  4. Configuration OAuth - Flux d'authentification complet
  5. Envoyer le premier message - Code fonctionnel pour envoyer des messages

Références :

Vous avez des problèmes ?

Vérification OAuth endpoint :

  • URL d'autorisation : https://zoom.us/oauth/authorize
  • URL token : https://zoom.us/oauth/token
  • Si /oauth/token retourne 404/HTML, utilisez https://zoom.us/oauth/token.

Construire des bots interactifs ?

Décision rapide : Quelle API ?

Cas d'usage API à utiliser
Envoyer des notifications depuis des scripts/CI/CD Team Chat API
Automatiser les messages en tant qu'utilisateur Team Chat API
Construire un chatbot interactif Chatbot API
Répondre à des commandes slash Chatbot API
Créer des messages avec boutons/formulaires Chatbot API
Gérer les interactions utilisateur Chatbot API

Team Chat API (Niveau utilisateur)

  • Les messages apparaissent comme envoyés par un utilisateur authentifié
  • Requiert User OAuth (flux authorization_code)
  • Endpoint : POST https://api.zoom.us/v2/chat/users/me/messages
  • Scopes : chat_message:write, chat_channel:read

Chatbot API (Niveau bot)

  • Les messages apparaissent comme envoyés par votre bot
  • Requiert le grant Client Credentials
  • Endpoint : POST https://api.zoom.us/v2/im/chat/messages
  • Scopes : imchat:bot (ajouté automatiquement)
  • Cartes enrichies : boutons, formulaires, listes déroulantes, images

Prérequis

Configuration requise

  • Compte Zoom
  • Propriétaire de compte, administrateur, ou rôle Zoom for developers activé
    • Pour activer : User ManagementRolesRole SettingsAdvanced features → Activer Zoom for developers

Créer une app Zoom

  1. Allez à Zoom App Marketplace
  2. Cliquez sur DevelopBuild App
  3. Sélectionnez General App (OAuth)

⚠️ N'utilisez PAS Server-to-Server OAuth - Les apps S2S n'ont pas la fonctionnalité Chatbot/Team Chat. Seule General App (OAuth) supporte les chatbots.

Identifiants requis

De Zoom Marketplace → Votre app :

Identifiant Localisation Utilisé par
Client ID App Credentials → Development Les deux APIs
Client Secret App Credentials → Development Les deux APIs
Account ID App Credentials → Development Chatbot API
Bot JID Features → Chatbot → Bot Credentials Chatbot API
Secret Token Features → Team Chat Subscriptions Chatbot API

Voir : Guide de configuration d'environnement pour les étapes de configuration complètes.

Démarrage rapide : Team Chat API

Envoyer un message en tant qu'utilisateur :

// 1. Obtenir le token d'accès via OAuth
const accessToken = await getOAuthToken(); // Voir examples/oauth-setup.md

// 2. Envoyer un message au canal
const response = await fetch('https://api.zoom.us/v2/chat/users/me/messages', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    message: 'Hello from CI/CD pipeline!',
    to_channel: 'CHANNEL_ID'
  })
});

const data = await response.json();
// { "id": "msg_abc123", "date_time": "2024-01-15T10:30:00Z" }

Exemple complet : Guide d'envoi de message

Démarrage rapide : Chatbot API

Construire un chatbot interactif :

// 1. Obtenir le token du chatbot (client_credentials)
async function getChatbotToken() {
  const credentials = Buffer.from(
    `${CLIENT_ID}:${CLIENT_SECRET}`
  ).toString('base64');

  const response = await fetch('https://zoom.us/oauth/token', {
    method: 'POST',
    headers: {
      'Authorization': `Basic ${credentials}`,
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: 'grant_type=client_credentials'
  });

  return (await response.json()).access_token;
}

// 2. Envoyer un message chatbot avec boutons
const response = await fetch('https://api.zoom.us/v2/im/chat/messages', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    robot_jid: process.env.ZOOM_BOT_JID,
    to_jid: payload.toJid,           // From webhook
    account_id: payload.accountId,   // From webhook
    content: {
      head: {
        text: 'Build Notification',
        sub_head: { text: 'CI/CD Pipeline' }
      },
      body: [
        { type: 'message', text: 'Deployment successful!' },
        {
          type: 'fields',
          items: [
            { key: 'Branch', value: 'main' },
            { key: 'Commit', value: 'abc123' }
          ]
        },
        {
          type: 'actions',
          items: [
            { text: 'View Logs', value: 'view_logs', style: 'Primary' },
            { text: 'Dismiss', value: 'dismiss', style: 'Default' }
          ]
        }
      ]
    }
  })
});

Exemple complet : Guide de configuration Chatbot

Fonctionnalités principales

Team Chat API

Fonctionnalité Description
Envoyer des messages Publier des messages dans les canaux ou messages directs
Lister les canaux Obtenir les canaux de l'utilisateur avec métadonnées
Créer des canaux Créer des canaux publics/privés par programmation
Réponses en fil Répondre à des messages spécifiques dans les fils
Modifier/Supprimer Modifier ou supprimer les messages

Chatbot API

Fonctionnalité Description
Cartes de message enrichies En-têtes, images, champs, boutons, formulaires
Commandes slash Les /commandes personnalisées déclenchent les webhooks
Actions bouton Boutons interactifs avec callbacks webhook
Soumissions de formulaires Collecter les données utilisateur avec des formulaires
Listes déroulantes Sélecteurs de canal, membre, date/heure
Intégration LLM Intégration facile avec Claude, GPT, etc.

Événements Webhook (Chatbot API)

Événement Déclencheur Cas d'usage
bot_notification L'utilisateur envoie un message au bot ou utilise une commande slash Traiter les commandes, intégrer LLM
bot_installed Bot ajouté au compte Initialiser l'état du bot
interactive_message_actions Bouton cliqué Gérer les actions de bouton
chat_message.submit Formulaire soumis Traiter les données de formulaire
app_deauthorized Bot supprimé Nettoyage

Voir : Référence des événements Webhook

Composants de carte de message

Construire des messages interactifs enrichis avec ces composants :

Composant Description
header Titre et sous-titre
message Texte brut
fields Paires clé-valeur
actions Boutons (styles Primary, Danger, Default)
section Groupement avec barre latérale colorée
attachments Images avec liens
divider Ligne horizontale
form_field Champ de texte
dropdown Menu de sélection
date_picker Sélection de date

Voir : Référence des cartes de message pour le catalogue complet des composants

Modèles d'architecture

Cycle de vie du Chatbot

L'utilisateur tape /command → Webhook reçoit bot_notification
                            ↓
                     payload.cmd = "entrée de l'utilisateur"
                            ↓
                     Traiter la commande
                            ↓
                     Envoyer la réponse via sendChatbotMessage()

Modèle d'intégration LLM

case 'bot_notification': {
  const { toJid, cmd, accountId } = payload;

  // 1. Appeler votre LLM
  const llmResponse = await callClaude(cmd);

  // 2. Envoyer la réponse
  await sendChatbotMessage(toJid, accountId, {
    body: [{ type: 'message', text: llmResponse }]
  });
}

Voir : Guide d'intégration LLM

Exemples d'applications

Exemple Description Lien
Chatbot Quickstart Tutoriel officiel (démarrage recommandé) GitHub
Claude Chatbot Chatbot IA avec Anthropic Claude GitHub
Unsplash Chatbot Recherche d'images avec base de données GitHub
ERP Chatbot Oracle ERP avec alertes planifiées GitHub
Task Manager Application CRUD complète GitHub

Voir : Guide des exemples d'applications pour l'analyse de tous les 10 exemples

Opérations courantes

Envoyer un message au canal

// Team Chat API
await fetch('https://api.zoom.us/v2/chat/users/me/messages', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${token}` },
  body: JSON.stringify({
    message: 'Hello!',
    to_channel: 'CHANNEL_ID'
  })
});

Gérer le clic de bouton

// Gestionnaire webhook
case 'interactive_message_actions': {
  const { actionItem, toJid, accountId } = payload;

  if (actionItem.value === 'approve') {
    await sendChatbotMessage(toJid, accountId, {
      body: [{ type: 'message', text: '✅ Approved!' }]
    });
  }
}

Vérifier la signature Webhook

function verifyWebhook(req) {
  const message = `v0:${req.headers['x-zm-request-timestamp']}:${JSON.stringify(req.body)}`;
  const hash = crypto.createHmac('sha256', process.env.ZOOM_VERIFICATION_TOKEN)
    .update(message)
    .digest('hex');
  return req.headers['x-zm-signature'] === `v0=${hash}`;
}

Déploiement

ngrok pour développement local

# Installer ngrok
npm install -g ngrok

# Exposer le serveur local
ngrok http 4000

# Utiliser l'URL HTTPS comme Bot Endpoint URL dans Zoom Marketplace
# Exemple : https://abc123.ngrok.io/webhook

Déploiement en production

Voir : Guide de déploiement pour :

  • Configuration du reverse proxy Nginx
  • Configuration du chemin de base
  • Configuration de l'URI de redirection OAuth

Limitations

Limite Valeur
Longueur du message 4 096 caractères
Taille fichier 512 MB
Membres par canal 10 000
Canaux par utilisateur 500

Bonnes pratiques de sécurité

  1. Vérifier les signatures webhook - Toujours valider en utilisant l'en-tête x-zm-signature
  2. Assainir les messages - Limiter à 4 096 caractères, supprimer les caractères de contrôle
  3. Valider les JIDs - Vérifier le format : user@domain ou channel@domain
  4. Variables d'environnement - Ne jamais coder en dur les identifiants
  5. Utiliser HTTPS - Requis pour les webhooks de production

Voir : Bonnes pratiques de sécurité

Bibliothèque de documentation complète

Concepts fondamentaux (À commencer !)

Exemples complets

Références

Dépannage

Ressources


Besoin d'aide ? Commencez par la section Index intégré ci-dessous pour une navigation complète.


Index intégré

Cette section a été migrée depuis SKILL.md.

Guide de navigation complète pour la skill Zoom Team Chat.

Parcours de démarrage rapide

Chemin 1 : Team Chat API (Messaging au niveau utilisateur)

Pour envoyer des messages en tant que compte utilisateur.

  1. Guide de sélection API - Confirmer que Team Chat API est appropriée
  2. Configuration d'environnement - Obtenir les identifiants
  3. Exemple de configuration OAuth - Implémenter l'authentification
  4. Exemple d'envoi de message - Envoyer votre premier message

Chemin 2 : Chatbot API (Bots interactifs)

Pour construire des chatbots interactifs avec des messages enrichis.

  1. Guide de sélection API - Confirmer que Chatbot API est appropriée
  2. Configuration d'environnement - Obtenir les identifiants (y compris Bot JID)
  3. Architecture Webhook - Comprendre les événements webhook
  4. Exemple de configuration Chatbot - Construire votre premier bot
  5. Référence des cartes de message - Créer des messages enrichis

Concepts fondamentaux

Compréhension essentielle pour les deux APIs.

Document Description
Guide de sélection API Choisir Team Chat API vs Chatbot API
Configuration d'environnement Configuration d'app et identifiants complets
Flux d'authentification OAuth vs Client Credentials
Architecture Webhook Comment fonctionnent les webhooks (Chatbot API)
Structure de carte de message Hiérarchie des composants de carte
Guide de déploiement Stratégies de déploiement en production
Bonnes pratiques de sécurité Sécuriser votre intégration

Exemples complets

Code fonctionnel pour les scénarios courants.

Authentification

Exemple Description
Configuration OAuth Implémentation du flux User OAuth
Gestion des tokens Gestion de l'expiration et actualisation des tokens

Opérations de base

Exemple Description
Envoyer un message Envoi de messages Team Chat API
Configuration Chatbot Chatbot complet avec webhooks
Lister les canaux Obtenir les canaux de l'utilisateur
Créer un canal Créer des canaux publics/privés

Fonctionnalités interactives (Chatbot API)

Exemple Description
Actions bouton Gérer les clics de bouton
Soumissions de formulaires Traiter les données de formulaire
Commandes slash Créer des commandes personnalisées
Sélections déroulantes Sélecteurs de canal/membre

Intégration avancée

Exemple Description
Intégration LLM Intégrer Claude/GPT
Alertes planifiées Cron + webhooks entrants
Intégration de base de données Stocker l'état de conversation
Workflows multi-étapes Interactions utilisateur complexes

Références

Documentation API

Référence Description
Référence API Pointeurs et endpoints courants
Événements Webhook Types d'événements et checklist de gestion
Cartes de message Tous les composants de carte
Codes d'erreur Guide de gestion d'erreur

Exemples d'applications

Référence Description
Exemples d'applications Index et notes des apps exemples

Guides spécialisés

Référence Description
Formats JID Compréhension des identifiants JID
Référence Scopes Scopes courants
Limites de taux Conseils sur la limitation

Dépannage

Guide Description
Problèmes courants Diagnostics rapides et solutions
Problèmes OAuth Échecs d'authentification
Problèmes Webhook Débogage webhook
Problèmes de message Problèmes d'envoi de message
Problèmes de déploiement Problèmes en production

Modèles d'architecture

Cycle de vie du Chatbot

Action utilisateur → Webhook → Traitement → Réponse

Modèle d'intégration LLM

Entrée utilisateur → Chatbot reçoit → Appel LLM → Envoyer réponse

Modèle de workflow d'approbation

Demande → Envoyer carte avec boutons → Utilisateur clique → Mettre à jour le statut → Notifier

Cas d'usage courants

Notifications

  • Notifications de build CI/CD
  • Alertes de monitoring de serveur
  • Rapports planifiés
  • Vérifications de santé du système

Workflows

  • Demandes d'approbation
  • Affectation de tâches
  • Mises à jour de statut
  • Soumissions de formulaires

Intégrations

  • Assistants alimentés par LLM
  • Requêtes de base de données
  • Intégration API externe
  • Partage de fichiers/images

Automatisation

  • Messages planifiés
  • Réponses automatiques
  • Collecte de données
  • Génération de rapports

Liens de ressources

Documentation officielle

Exemples de code

Outils

Communauté

Statut de la documentation

✅ Complète

  • Entrée principale skill.md
  • Guide de sélection API
  • Configuration d'environnement
  • Architecture Webhook
  • Exemple de configuration Chatbot (code fonctionnel complet)
  • Référence des cartes de message
  • Dépannage des problèmes courants

📝 En attente (Priorité haute)

  • Exemple de configuration OAuth
  • Exemple d'envoi de message
  • Exemple d'actions bouton
  • Exemple d'intégration LLM
  • Référence des événements Webhook
  • Référence API
  • Analyse des exemples d'applications

📋 Planifiée (Priorité plus basse)

  • Exemple de soumissions de formulaires
  • Exemples de gestion de canaux
  • Exemple d'intégration de base de données
  • Référence des codes d'erreur
  • Guide des limites de taux
  • Dépannage du déploiement

Checklist de démarrage

Pour Team Chat API

Pour Chatbot API

  • [ ] Lire Guide de sélection API
  • [ ] Compléter Configuration d'environnement
  • [ ] Obtenir Client ID, Client Secret, Bot JID, Secret Token, Account ID
  • [ ] Activer Team Chat dans Features
  • [ ] Configurer Bot Endpoint URL et Slash Command
  • [ ] Configurer ngrok pour le test local
  • [ ] Implémenter le gestionnaire webhook
  • [ ] Envoyer le premier message chatbot

Historique des versions

  • v1.0 (2026-02-09) - Documentation complète initiale
    • Concepts fondamentaux (sélection API, configuration d'environnement, webhooks)
    • Exemple de configuration chatbot complet
    • Référence des cartes de message
    • Dépannage des problèmes courants

Support

Utilisez ce SKILL.md comme hub de navigation pour la sélection Team Chat API, la configuration, les exemples et le dépannage.

Variables d'environnement

Skills similaires