Чат-боты в Zoom Team Chat
Справочник разработчика: как слать сообщения в Zoom Team Chat от пользователя или от бота, с карточками, кнопками и слэш-командами.
- Что делает
- Справочник разработчика: как слать сообщения в Zoom Team Chat от пользователя или от бота, с карточками, кнопками и слэш-командами.
- Когда брать
- Когда нужно создать интеграцию с чатом Zoom: уведомления из CI/CD, чат-бота, интерактивные карточки или подключение LLM.
- Когда не брать
- Если нужны встречи, видео или телефония Zoom; для них есть другие скиллы плагина.
- Пример запроса
- Сделай чат-бота для Zoom Team Chat, который отвечает на слэш-команды и присылает карточки с кнопками.
- Нужно подключить
- терминал
Входит в плагин zoom-plugin. В Cowork и Claude Code можно поставить плагин целиком.
Как включить
- Скачайте архив и распакуйте его.
- Положите папку
build-zoom-team-chat-appв~/.claude/skills/. - Откройте Claude Code и опишите задачу своими словами: Claude подхватит скилл по описанию.
Текст
---
name: build-zoom-team-chat-app
description: "Справочный скилл по Zoom Team Chat. Используй после выбора рабочего процесса для чата, когда создаёшь интеграции обмена сообщениями от имени пользователя, чат-ботов, насыщенные карточки, кнопки, слэш-команды или вебхуки чата."
triggers:
- "zoom team chat"
- "zoom chatbot"
- "zoom messaging"
- "team chat api"
- "chatbot api"
- "zoom slash commands"
- "zoom chat integration"
---
/build-zoom-team-chat-app
Справочный материал по интеграциям Zoom Team Chat. Обращайся к нему, когда рабочий процесс уже понятен, особенно если важна разница между Team Chat API и Chatbot API.
Сначала прочитай это (важно)
Бывает два типа интеграций, и они не взаимозаменяемы:
- Team Chat API (пользовательский тип)
- Отправляет сообщения от имени настоящего авторизованного пользователя
- Использует User OAuth (
authorization_code) - Семейство эндпоинтов:
/v2/chat/users/...
- Chatbot API (тип «бот»)
- Отправляет сообщения от имени твоего бота
- Использует Client Credentials (
client_credentials) - Семейство эндпоинтов:
/v2/im/chat/messages
Если выбрать не тот тип в самом начале, аутентификация, права доступа и эндпоинты не совпадут, и реализация сорвётся.
Официальная документация: https://developers.zoom.us/docs/team-chat/ Документация по чат-ботам: https://developers.zoom.us/docs/team-chat/chatbot/extend/ Справочник API: https://developers.zoom.us/docs/api/rest/reference/chatbot/
Быстрые ссылки
Впервые работаешь с Team Chat? Иди по этому пути:
- [Начало работы](get-started.md) - Быстрый путь от начала до конца (пользовательский тип или бот)
- [Выбор API](concepts/api-selection.md) - Team Chat API или Chatbot API
- [Настройка окружения](concepts/environment-setup.md) - Учётные данные, права доступа, настройка приложения
- [Настройка OAuth](examples/oauth-setup.md) - Полный процесс аутентификации
- [Первое сообщение](examples/send-message.md) - Рабочий код для отправки сообщений
Справочные материалы:
- [Карточки сообщений чат-бота](references/message-cards.md) - Полный справочник по компонентам карточек
- [События вебхуков](references/webhook-events.md) - Все типы событий вебхуков
- [Справочник API](references/api-reference.md) - Эндпоинты, методы, параметры
- [Примеры приложений](references/samples.md) - Более 10 официальных примеров приложений
- Сводный указатель - см. раздел ниже в этом файле
Что-то не работает?
- Ошибки аутентификации → [Устранение проблем с OAuth](troubleshooting/oauth-issues.md)
- Вебхук не получает события → [Руководство по настройке вебхуков](troubleshooting/webhook-issues.md)
- Сообщения не отправляются → [Частые проблемы](troubleshooting/common-issues.md)
- Начни с быстрых проверок → [Пятиминутная памятка](RUNBOOK.md)
Быстрая проверка адресов OAuth:
- Адрес авторизации:
https://zoom.us/oauth/authorize - Адрес токена:
https://zoom.us/oauth/token - Если
/oauth/tokenвозвращает 404 или HTML, используйhttps://zoom.us/oauth/token.
Создаёшь интерактивных ботов?
- [Действия кнопок](examples/button-actions.md) - Обработка нажатий на кнопки
- [Отправка форм](examples/form-submissions.md) - Обработка данных формы
- [Слэш-команды](examples/slash-commands.md) - Создание собственных команд
Быстрый выбор: какой API нужен?
| Сценарий | Какой API использовать |
|---|---|
| Отправка уведомлений из скриптов, CI/CD | Team Chat API |
| Автоматизация сообщений от имени пользователя | Team Chat API |
| Создание интерактивного чат-бота | Chatbot API |
| Ответы на слэш-команды | Chatbot API |
| Сообщения с кнопками и формами | Chatbot API |
| Обработка действий пользователей | Chatbot API |
Team Chat API (уровень пользователя)
- Сообщения выглядят отправленными авторизованным пользователем
- Требуется User OAuth (процесс authorization_code)
- Эндпоинт:
POST https://api.zoom.us/v2/chat/users/me/messages - Права доступа:
chat_message:write,chat_channel:read
Chatbot API (уровень бота)
- Сообщения выглядят отправленными твоим ботом
- Требуется тип разрешения Client Credentials
- Эндпоинт:
POST https://api.zoom.us/v2/im/chat/messages - Права доступа:
imchat:bot(добавляется автоматически) - Насыщенные карточки: кнопки, формы, выпадающие списки, изображения
Предварительные требования
Системные требования
- Аккаунт Zoom
- Владелец аккаунта, администратор или пользователь с включённой ролью Zoom for developers
- Как включить: User Management → Roles → Role Settings → Advanced features → включи Zoom for developers
Создание приложения Zoom
- Открой Zoom App Marketplace
- Нажми Develop → Build App
- Выбери General App (OAuth)
⚠️ НЕ используй Server-to-Server OAuth - в приложениях S2S нет функций Chatbot и Team Chat. Чат-боты поддерживает только General App (OAuth).
Необходимые учётные данные
В Zoom Marketplace → твоё приложение:
| Учётные данные | Где найти | Для чего используются |
|---|---|---|
| Client ID | App Credentials → Development | Оба API |
| Client Secret | App Credentials → Development | Оба API |
| Account ID | App Credentials → Development | Chatbot API |
| Bot JID | Features → Chatbot → Bot Credentials | Chatbot API |
| Secret Token | Features → Team Chat Subscriptions | Chatbot API |
См.: [Руководство по настройке окружения](concepts/environment-setup.md) - полные шаги настройки.
Быстрый старт: Team Chat API
Отправка сообщения от имени пользователя:
// 1. Get access token via OAuth
const accessToken = await getOAuthToken(); // See examples/oauth-setup.md
// 2. Send message to channel
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" }
Полный пример: [Руководство по отправке сообщений](examples/send-message.md)
Быстрый старт: Chatbot API
Создание интерактивного чат-бота:
// 1. Get chatbot token (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. Send chatbot message with buttons
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' }
]
}
]
}
})
});
Полный пример: [Руководство по настройке чат-бота](examples/chatbot-setup.md)
Основные возможности
Team Chat API
| Возможность | Описание |
|---|---|
| Отправка сообщений | Публикация сообщений в каналах или личных сообщениях |
| Список каналов | Получение каналов пользователя с метаданными |
| Создание каналов | Программное создание публичных и приватных каналов |
| Ответы в ветках | Ответы на конкретные сообщения в ветках |
| Правка и удаление | Изменение или удаление сообщений |
Chatbot API
| Возможность | Описание |
|---|---|
| Насыщенные карточки сообщений | Заголовки, изображения, поля, кнопки, формы |
| Слэш-команды | Собственные команды /commands запускают вебхуки |
| Действия кнопок | Интерактивные кнопки с обратными вызовами вебхуков |
| Отправка форм | Сбор ответов пользователей через формы |
| Выпадающие списки | Выбор канала, участника, даты и времени |
| Интеграция с LLM | Простое подключение Claude, GPT и других моделей |
События вебхуков (Chatbot API)
| Событие | Когда срабатывает | Для чего использовать |
|---|---|---|
bot_notification | Пользователь пишет боту или вызывает слэш-команду | Обработка команд, интеграция с LLM |
bot_installed | Бот добавлен в аккаунт | Инициализация состояния бота |
interactive_message_actions | Нажата кнопка | Обработка действий кнопок |
chat_message.submit | Отправлена форма | Обработка данных формы |
app_deauthorized | Бот удалён | Очистка данных |
См.: [Справочник по событиям вебхуков](references/webhook-events.md)
Компоненты карточки сообщения
Создавай насыщенные интерактивные сообщения из таких компонентов:
| Компонент | Описание |
|---|---|
| header | Заголовок и подзаголовок |
| message | Простой текст |
| fields | Пары «ключ - значение» |
| actions | Кнопки (стили Primary, Danger, Default) |
| section | Группировка с цветной боковой полосой |
| attachments | Изображения со ссылками |
| divider | Горизонтальная линия |
| form_field | Текстовое поле |
| dropdown | Выпадающее меню |
| date_picker | Выбор даты |
См.: [Справочник по карточкам сообщений](references/message-cards.md) - полный каталог компонентов
Архитектурные шаблоны
Жизненный цикл чат-бота
Пользователь вводит /command → Вебхук получает bot_notification
↓
payload.cmd = "ввод пользователя"
↓
Обработка команды
↓
Отправка ответа через sendChatbotMessage()
Шаблон интеграции с LLM
case 'bot_notification': {
const { toJid, cmd, accountId } = payload;
// 1. Call your LLM
const llmResponse = await callClaude(cmd);
// 2. Send response back
await sendChatbotMessage(toJid, accountId, {
body: [{ type: 'message', text: llmResponse }]
});
}
См.: [Руководство по интеграции с LLM](examples/llm-integration.md)
Примеры приложений
| Пример | Описание | Ссылка |
|---|---|---|
| Chatbot Quickstart | Официальное руководство (рекомендуемый старт) | GitHub |
| Claude Chatbot | ИИ-бот на базе Anthropic Claude | GitHub |
| Unsplash Chatbot | Поиск изображений с базой данных | GitHub |
| ERP Chatbot | Oracle ERP с плановыми оповещениями | GitHub |
| Task Manager | Полноценное приложение с операциями CRUD | GitHub |
См.: [Руководство по примерам приложений](references/samples.md) - разбор всех 10 примеров
Частые операции
Отправка сообщения в канал
// 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'
})
});
Обработка нажатия кнопки
// Webhook handler
case 'interactive_message_actions': {
const { actionItem, toJid, accountId } = payload;
if (actionItem.value === 'approve') {
await sendChatbotMessage(toJid, accountId, {
body: [{ type: 'message', text: '✅ Approved!' }]
});
}
}
Проверка подписи вебхука
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}`;
}
Развёртывание
ngrok для локальной разработки
# Install ngrok
npm install -g ngrok
# Expose local server
ngrok http 4000
# Use HTTPS URL as Bot Endpoint URL in Zoom Marketplace
# Example: https://abc123.ngrok.io/webhook
Развёртывание в рабочей среде
См.: [Руководство по развёртыванию](concepts/deployment.md):
- Настройка обратного прокси Nginx
- Настройка базового пути
- Настройка redirect URI для OAuth
Ограничения
| Ограничение | Значение |
|---|---|
| Длина сообщения | 4096 символов |
| Размер файла | 512 МБ |
| Участников в канале | 10 000 |
| Каналов на пользователя | 500 |
Рекомендации по безопасности
- Проверяй подписи вебхуков - всегда проверяй их по заголовку
x-zm-signature - Очищай сообщения - ограничивай длину 4096 символами, удаляй управляющие символы
- Проверяй JID - формат:
user@domainилиchannel@domain - Переменные окружения - никогда не вписывай учётные данные в код
- Используй HTTPS - обязательно для вебхуков в рабочей среде
См.: [Рекомендации по безопасности](concepts/security.md)
Полная библиотека документации
Основные понятия (начни отсюда!)
- [Руководство по выбору API](concepts/api-selection.md) - Team Chat API или Chatbot API
- [Настройка окружения](concepts/environment-setup.md) - Полное руководство по учётным данным
- [Процессы аутентификации](concepts/authentication.md) - OAuth или Client Credentials
- [Архитектура вебхуков](concepts/webhooks.md) - Как работают вебхуки
- [Структура карточки сообщения](concepts/message-structure.md) - Иерархия компонентов карточки
Полные примеры
- [Настройка OAuth](examples/oauth-setup.md) - Полная реализация OAuth
- [Отправка сообщения](examples/send-message.md) - Отправка сообщений через Team Chat API
- [Настройка чат-бота](examples/chatbot-setup.md) - Полный чат-бот с вебхуками
- [Действия кнопок](examples/button-actions.md) - Обработка интерактивных кнопок
- [Отправка форм](examples/form-submissions.md) - Обработка данных формы
- [Слэш-команды](examples/slash-commands.md) - Создание собственных команд
- [Интеграция с LLM](examples/llm-integration.md) - Подключение Claude и GPT
- [Плановые оповещения](examples/scheduled-alerts.md) - Cron и входящие вебхуки
- [Управление каналами](examples/channel-management.md) - Создание и ведение каналов
Справочные материалы
- [Справочник API](references/api-reference.md) - Все эндпоинты и методы
- [События вебхуков](references/webhook-events.md) - Полный справочник по событиям
- [Карточки сообщений](references/message-cards.md) - Все компоненты карточек
- [Примеры приложений](references/samples.md) - Разбор 10 официальных примеров
- [Коды ошибок](references/error-codes.md) - Руководство по обработке ошибок
Устранение неполадок
- [Проблемы с OAuth](troubleshooting/oauth-issues.md) - Сбои аутентификации
- [Проблемы с вебхуками](troubleshooting/webhook-issues.md) - Отладка вебхуков
- [Частые проблемы](troubleshooting/common-issues.md) - Быстрая диагностика
Ресурсы
- Официальная документация: https://developers.zoom.us/docs/team-chat/
- Справочник API: https://developers.zoom.us/docs/api/rest/reference/chatbot/
- Форум разработчиков: https://devforum.zoom.us/
- App Marketplace: https://marketplace.zoom.us/
Нужна помощь? Начни с раздела «Сводный указатель» ниже: там полная навигация.
Сводный указатель
_Этот раздел перенесён из SKILL.md._
Полный путеводитель по скиллу Zoom Team Chat.
Пути быстрого старта
- Начни здесь: [Начало работы](get-started.md)
- Сначала быстрая диагностика: [Пятиминутная памятка](RUNBOOK.md)
Путь 1: Team Chat API (сообщения на уровне пользователя)
Для отправки сообщений от имени учётной записи пользователя.
- [Руководство по выбору API](concepts/api-selection.md) - Убедись, что Team Chat API подходит
- [Настройка окружения](concepts/environment-setup.md) - Получи учётные данные
- [Пример настройки OAuth](examples/oauth-setup.md) - Реализуй аутентификацию
- [Пример отправки сообщения](examples/send-message.md) - Отправь первое сообщение
Путь 2: Chatbot API (интерактивные боты)
Для создания интерактивных чат-ботов с насыщенными сообщениями.
- [Руководство по выбору API](concepts/api-selection.md) - Убедись, что Chatbot API подходит
- [Настройка окружения](concepts/environment-setup.md) - Получи учётные данные (включая Bot JID)
- [Архитектура вебхуков](concepts/webhooks.md) - Пойми, как работают события вебхуков
- [Пример настройки чат-бота](examples/chatbot-setup.md) - Создай первого бота
- [Справочник по карточкам сообщений](references/message-cards.md) - Создавай насыщенные сообщения
Основные понятия
Базовые знания для обоих API.
| Документ | Описание |
|---|---|
| [Руководство по выбору API](concepts/api-selection.md) | Team Chat API или Chatbot API |
| [Настройка окружения](concepts/environment-setup.md) | Полная настройка учётных данных и приложения |
| [Процессы аутентификации](concepts/authentication.md) | OAuth или Client Credentials |
| [Архитектура вебхуков](concepts/webhooks.md) | Как работают вебхуки (Chatbot API) |
| [Структура карточки сообщения](concepts/message-structure.md) | Иерархия компонентов карточки |
| [Руководство по развёртыванию](concepts/deployment.md) | Стратегии развёртывания в рабочей среде |
| [Рекомендации по безопасности](concepts/security.md) | Как защитить интеграцию |
Полные примеры
Рабочий код для типовых сценариев.
Аутентификация
| Пример | Описание |
|---|---|
| [Настройка OAuth](examples/oauth-setup.md) | Реализация пользовательского процесса OAuth |
| [Управление токенами](examples/token-management.md) | Обновление токенов, обработка истечения срока |
Базовые операции
| Пример | Описание |
|---|---|
| [Отправка сообщения](examples/send-message.md) | Отправка сообщений через Team Chat API |
| [Настройка чат-бота](examples/chatbot-setup.md) | Полный чат-бот с вебхуками |
| [Список каналов](examples/channel-management.md) | Получение каналов пользователя |
| [Создание канала](examples/channel-management.md) | Создание публичных и приватных каналов |
Интерактивные возможности (Chatbot API)
| Пример | Описание |
|---|---|
| [Действия кнопок](examples/button-actions.md) | Обработка нажатий на кнопки |
| [Отправка форм](examples/form-submissions.md) | Обработка данных формы |
| [Слэш-команды](examples/slash-commands.md) | Создание собственных команд |
| [Выпадающие списки](examples/dropdown-selects.md) | Выбор канала или участника |
Расширенная интеграция
| Пример | Описание |
|---|---|
| [Интеграция с LLM](examples/llm-integration.md) | Подключение Claude и GPT |
| [Плановые оповещения](examples/scheduled-alerts.md) | Cron и входящие вебхуки |
| [Интеграция с базой данных](examples/database-integration.md) | Хранение состояния беседы |
| [Многошаговые рабочие процессы](examples/multi-step-workflows.md) | Сложные сценарии взаимодействия с пользователем |
Справочные материалы
Документация по API
| Справочник | Описание |
|---|---|
| [Справочник API](references/api-reference.md) | Ссылки и распространённые эндпоинты |
| [События вебхуков](references/webhook-events.md) | Типы событий и контрольный список обработки |
| [Карточки сообщений](references/message-cards.md) | Все компоненты карточек |
| [Коды ошибок](references/error-codes.md) | Руководство по обработке ошибок |
Примеры приложений
| Справочник | Описание |
|---|---|
| [Примеры приложений](references/samples.md) | Указатель и заметки по примерам приложений |
Практические руководства
| Справочник | Описание |
|---|---|
| [Форматы JID](references/jid-formats.md) | Как устроены идентификаторы JID |
| [Справочник по правам доступа](references/scopes.md) | Распространённые права доступа |
| [Лимиты запросов](references/rate-limits.md) | Рекомендации по ограничению частоты запросов |
Устранение неполадок
| Руководство | Описание |
|---|---|
| [Частые проблемы](troubleshooting/common-issues.md) | Быстрая диагностика и решения |
| [Проблемы с OAuth](troubleshooting/oauth-issues.md) | Сбои аутентификации |
| [Проблемы с вебхуками](troubleshooting/webhook-issues.md) | Отладка вебхуков |
| [Проблемы с сообщениями](troubleshooting/message-issues.md) | Неполадки при отправке сообщений |
| [Проблемы при развёртывании](troubleshooting/deployment-issues.md) | Сбои в рабочей среде |
Архитектурные шаблоны
Жизненный цикл чат-бота
Действие пользователя → Вебхук → Обработка → Ответ
Шаблон интеграции с LLM
Ввод пользователя → Чат-бот получает → Вызов LLM → Отправка ответа
Шаблон процесса согласования
Запрос → Отправка карточки с кнопками → Пользователь нажимает → Обновление статуса → Уведомление
Типовые сценарии использования
Уведомления
- Уведомления о сборках CI/CD
- Оповещения мониторинга серверов
- Плановые отчёты
- Проверки работоспособности систем
Рабочие процессы
- Запросы на согласование
- Назначение задач
- Обновления статусов
- Отправка форм
Интеграции
- Ассистенты на базе LLM
- Запросы к базам данных
- Интеграция с внешними API
- Обмен файлами и изображениями
Автоматизация
- Плановые сообщения
- Автоответы
- Сбор данных
- Формирование отчётов
Ссылки на ресурсы
Официальная документация
- Документация Team Chat - Официальный обзор
- Документация по чат-ботам - Руководство по чат-ботам
- Справочник API - Документация REST API
- App Marketplace - Создание приложений и управление ими
Примеры кода
- Chatbot Quickstart - Официальное руководство
- Claude Chatbot - Интеграция с ИИ
- Unsplash Chatbot - Бот для поиска изображений
- ERP Chatbot - Корпоративная интеграция
- Task Manager - Полноценное приложение с операциями CRUD
Инструменты
- App Card Builder - Визуальный конструктор карточек
- ngrok - Локальное тестирование вебхуков
- Postman - Тестирование API
Сообщество
- Форум разработчиков - Задавай вопросы
- GitHub Discussions - Поддержка сообщества
- Поддержка разработчиков - Официальная поддержка
Состояние документации
✅ Готово
- Главная точка входа skill.md
- Руководство по выбору API
- Настройка окружения
- Архитектура вебхуков
- Пример настройки чат-бота (полный рабочий код)
- Справочник по карточкам сообщений
- Устранение частых проблем
📝 В очереди (высокий приоритет)
- Пример настройки OAuth
- Пример отправки сообщения
- Пример действий кнопок
- Пример интеграции с LLM
- Справочник по событиям вебхуков
- Справочник API
- Разбор примеров приложений
📋 Запланировано (низкий приоритет)
- Пример отправки форм
- Примеры управления каналами
- Пример интеграции с базой данных
- Справочник по кодам ошибок
- Руководство по лимитам запросов
- Устранение проблем при развёртывании
Контрольный список для начала работы
Для Team Chat API
- [ ] Прочитай [Руководство по выбору API](concepts/api-selection.md)
- [ ] Выполни [Настройку окружения](concepts/environment-setup.md)
- [ ] Получи Client ID и Client Secret
- [ ] Добавь нужные права доступа
- [ ] Реализуй процесс OAuth
- [ ] Отправь первое сообщение
Для Chatbot API
- [ ] Прочитай [Руководство по выбору API](concepts/api-selection.md)
- [ ] Выполни [Настройку окружения](concepts/environment-setup.md)
- [ ] Получи Client ID, Client Secret, Bot JID, Secret Token, Account ID
- [ ] Включи Team Chat в разделе Features
- [ ] Настрой Bot Endpoint URL и слэш-команду
- [ ] Настрой ngrok для локального тестирования
- [ ] Реализуй обработчик вебхуков
- [ ] Отправь первое сообщение чат-бота
История версий
- v1.0 (2026-02-09) - Первая полная документация
- Основные понятия (выбор API, настройка окружения, вебхуки)
- Полный пример настройки чат-бота
- Справочник по карточкам сообщений
- Устранение частых проблем
Поддержка
Используй этот SKILL.md как навигационный центр для выбора Team Chat API, настройки, примеров и устранения неполадок.
Переменные окружения
- Стандартные ключи
.envи то, где найти каждое значение, смотри в [references/environment-variables.md](references/environment-variables.md).
Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/partner-built/zoom-plugin/skills/team-chat, лицензия MIT. Изменения: перевод на русский язык.
Оригинал на английском
---
name: build-zoom-team-chat-app
description: "Reference skill for Zoom Team Chat. Use after routing to a chat workflow when building user-scoped messaging integrations, chatbot experiences, rich cards, buttons, slash commands, or chat webhooks."
triggers:
- "zoom team chat"
- "zoom chatbot"
- "zoom messaging"
- "team chat api"
- "chatbot api"
- "zoom slash commands"
- "zoom chat integration"
---
# /build-zoom-team-chat-app
Background reference for Zoom Team Chat integrations. Use this after the workflow is clear, especially when the Team Chat API versus Chatbot API distinction matters.
## Read This First (Critical)
There are two different integration types and they are not interchangeable:
1. **Team Chat API (user type)**
- Sends messages as a real authenticated user
- Uses **User OAuth** (`authorization_code`)
- Endpoint family: `/v2/chat/users/...`
2. **Chatbot API (bot type)**
- Sends messages as your bot identity
- Uses **Client Credentials** (`client_credentials`)
- Endpoint family: `/v2/im/chat/messages`
If you choose the wrong type early, auth/scopes/endpoints all mismatch and implementation fails.
**Official Documentation**: https://developers.zoom.us/docs/team-chat/
**Chatbot Documentation**: https://developers.zoom.us/docs/team-chat/chatbot/extend/
**API Reference**: https://developers.zoom.us/docs/api/rest/reference/chatbot/
## Quick Links
**New to Team Chat? Follow this path:**
1. **[Get Started](get-started.md)** - End-to-end fast path (user type vs bot type)
2. **[Choose Your API](concepts/api-selection.md)** - Team Chat API vs Chatbot API
3. **[Environment Setup](concepts/environment-setup.md)** - Credentials, scopes, app configuration
4. **[OAuth Setup](examples/oauth-setup.md)** - Complete authentication flow
5. **[Send First Message](examples/send-message.md)** - Working code to send messages
**Reference:**
- **[Chatbot Message Cards](references/message-cards.md)** - Complete card component reference
- **[Webhook Events](references/webhook-events.md)** - All webhook event types
- **[API Reference](references/api-reference.md)** - Endpoints, methods, parameters
- **[Sample Applications](references/samples.md)** - 10+ official sample apps
- **Integrated Index** - see the section below in this file
**Having issues?**
- Authentication errors → [OAuth Troubleshooting](troubleshooting/oauth-issues.md)
- Webhook not receiving events → [Webhook Setup Guide](troubleshooting/webhook-issues.md)
- Messages not sending → [Common Issues](troubleshooting/common-issues.md)
- Start with quick checks → [5-Minute Runbook](RUNBOOK.md)
**OAuth endpoint sanity check:**
- Authorize URL: `https://zoom.us/oauth/authorize`
- Token URL: `https://zoom.us/oauth/token`
- If `/oauth/token` returns 404/HTML, use `https://zoom.us/oauth/token`.
**Building Interactive Bots?**
- [Button Actions](examples/button-actions.md) - Handle button clicks
- [Form Submissions](examples/form-submissions.md) - Process form data
- [Slash Commands](examples/slash-commands.md) - Create custom commands
## Quick Decision: Which API?
| Use Case | API to Use |
|----------|------------|
| Send notifications from scripts/CI/CD | **Team Chat API** |
| Automate messages as a user | **Team Chat API** |
| Build an interactive chatbot | **Chatbot API** |
| Respond to slash commands | **Chatbot API** |
| Create messages with buttons/forms | **Chatbot API** |
| Handle user interactions | **Chatbot API** |
### Team Chat API (User-Level)
- Messages appear as sent by **authenticated user**
- Requires **User OAuth** (authorization_code flow)
- Endpoint: `POST https://api.zoom.us/v2/chat/users/me/messages`
- Scopes: `chat_message:write`, `chat_channel:read`
### Chatbot API (Bot-Level)
- Messages appear as sent by your **bot**
- Requires **Client Credentials** grant
- Endpoint: `POST https://api.zoom.us/v2/im/chat/messages`
- Scopes: `imchat:bot` (auto-added)
- **Rich cards**: buttons, forms, dropdowns, images
## Prerequisites
### System Requirements
- Zoom account
- Account owner, admin, or **Zoom for developers** role enabled
- To enable: **User Management** → **Roles** → **Role Settings** → **Advanced features** → Enable **Zoom for developers**
### Create Zoom App
1. Go to [Zoom App Marketplace](https://marketplace.zoom.us/)
2. Click **Develop** → **Build App**
3. Select **General App** (OAuth)
> ⚠️ **Do NOT use Server-to-Server OAuth** - S2S apps don't have the Chatbot/Team Chat feature. Only General App (OAuth) supports chatbots.
### Required Credentials
From Zoom Marketplace → Your App:
| Credential | Location | Used By |
|------------|----------|---------|
| Client ID | App Credentials → Development | Both APIs |
| Client Secret | App Credentials → Development | Both APIs |
| Account ID | App Credentials → Development | Chatbot API |
| Bot JID | Features → Chatbot → Bot Credentials | Chatbot API |
| Secret Token | Features → Team Chat Subscriptions | Chatbot API |
**See**: [Environment Setup Guide](concepts/environment-setup.md) for complete configuration steps.
## Quick Start: Team Chat API
Send a message as a user:
```javascript
// 1. Get access token via OAuth
const accessToken = await getOAuthToken(); // See examples/oauth-setup.md
// 2. Send message to channel
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" }
```
**Complete example**: [Send Message Guide](examples/send-message.md)
## Quick Start: Chatbot API
Build an interactive chatbot:
```javascript
// 1. Get chatbot token (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. Send chatbot message with buttons
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' }
]
}
]
}
})
});
```
**Complete example**: [Chatbot Setup Guide](examples/chatbot-setup.md)
## Key Features
### Team Chat API
| Feature | Description |
|---------|-------------|
| **Send Messages** | Post messages to channels or direct messages |
| **List Channels** | Get user's channels with metadata |
| **Create Channels** | Create public/private channels programmatically |
| **Threaded Replies** | Reply to specific messages in threads |
| **Edit/Delete** | Modify or remove messages |
### Chatbot API
| Feature | Description |
|---------|-------------|
| **Rich Message Cards** | Headers, images, fields, buttons, forms |
| **Slash Commands** | Custom `/commands` trigger webhooks |
| **Button Actions** | Interactive buttons with webhook callbacks |
| **Form Submissions** | Collect user input with forms |
| **Dropdown Selects** | Channel, member, date/time pickers |
| **LLM Integration** | Easy integration with Claude, GPT, etc. |
## Webhook Events (Chatbot API)
| Event | Trigger | Use Case |
|-------|---------|----------|
| `bot_notification` | User messages bot or uses slash command | Process commands, integrate LLM |
| `bot_installed` | Bot added to account | Initialize bot state |
| `interactive_message_actions` | Button clicked | Handle button actions |
| `chat_message.submit` | Form submitted | Process form data |
| `app_deauthorized` | Bot removed | Cleanup |
**See**: [Webhook Events Reference](references/webhook-events.md)
## Message Card Components
Build rich interactive messages with these components:
| Component | Description |
|-----------|-------------|
| **header** | Title and subtitle |
| **message** | Plain text |
| **fields** | Key-value pairs |
| **actions** | Buttons (Primary, Danger, Default styles) |
| **section** | Colored sidebar grouping |
| **attachments** | Images with links |
| **divider** | Horizontal line |
| **form_field** | Text input |
| **dropdown** | Select menu |
| **date_picker** | Date selection |
**See**: [Message Cards Reference](references/message-cards.md) for complete component catalog
## Architecture Patterns
### Chatbot Lifecycle
```
User types /command → Webhook receives bot_notification
↓
payload.cmd = "user's input"
↓
Process command
↓
Send response via sendChatbotMessage()
```
### LLM Integration Pattern
```javascript
case 'bot_notification': {
const { toJid, cmd, accountId } = payload;
// 1. Call your LLM
const llmResponse = await callClaude(cmd);
// 2. Send response back
await sendChatbotMessage(toJid, accountId, {
body: [{ type: 'message', text: llmResponse }]
});
}
```
**See**: [LLM Integration Guide](examples/llm-integration.md)
## Sample Applications
| Sample | Description | Link |
|--------|-------------|------|
| **Chatbot Quickstart** | Official tutorial (recommended start) | [GitHub](https://github.com/zoom/chatbot-nodejs-quickstart) |
| **Claude Chatbot** | AI chatbot with Anthropic Claude | [GitHub](https://github.com/zoom/zoom-chatbot-claude-sample) |
| **Unsplash Chatbot** | Image search with database | [GitHub](https://github.com/zoom/unsplash-chatbot) |
| **ERP Chatbot** | Oracle ERP with scheduled alerts | [GitHub](https://github.com/zoom/zoom-erp-chatbot-sample) |
| **Task Manager** | Full CRUD app | [GitHub](https://github.com/zoom/task-manager-sample) |
**See**: [Sample Applications Guide](references/samples.md) for analysis of all 10 samples
## Common Operations
### Send Message to Channel
```javascript
// 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'
})
});
```
### Handle Button Click
```javascript
// Webhook handler
case 'interactive_message_actions': {
const { actionItem, toJid, accountId } = payload;
if (actionItem.value === 'approve') {
await sendChatbotMessage(toJid, accountId, {
body: [{ type: 'message', text: '✅ Approved!' }]
});
}
}
```
### Verify Webhook Signature
```javascript
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}`;
}
```
## Deployment
### ngrok for Local Development
```bash
# Install ngrok
npm install -g ngrok
# Expose local server
ngrok http 4000
# Use HTTPS URL as Bot Endpoint URL in Zoom Marketplace
# Example: https://abc123.ngrok.io/webhook
```
### Production Deployment
**See**: [Deployment Guide](concepts/deployment.md) for:
- Nginx reverse proxy setup
- Base path configuration
- OAuth redirect URI setup
## Limitations
| Limit | Value |
|-------|-------|
| Message length | 4,096 characters |
| File size | 512 MB |
| Members per channel | 10,000 |
| Channels per user | 500 |
## Security Best Practices
1. **Verify webhook signatures** - Always validate using `x-zm-signature` header
2. **Sanitize messages** - Limit to 4096 chars, remove control characters
3. **Validate JIDs** - Check format: `user@domain` or `channel@domain`
4. **Environment variables** - Never hardcode credentials
5. **Use HTTPS** - Required for production webhooks
**See**: [Security Best Practices](concepts/security.md)
## Complete Documentation Library
### Core Concepts (Start Here!)
- **[API Selection Guide](concepts/api-selection.md)** - Choose Team Chat API vs Chatbot API
- **[Environment Setup](concepts/environment-setup.md)** - Complete credentials guide
- **[Authentication Flows](concepts/authentication.md)** - OAuth vs Client Credentials
- **[Webhook Architecture](concepts/webhooks.md)** - How webhooks work
- **[Message Card Structure](concepts/message-structure.md)** - Card component hierarchy
### Complete Examples
- **[OAuth Setup](examples/oauth-setup.md)** - Full OAuth implementation
- **[Send Message](examples/send-message.md)** - Team Chat API message sending
- **[Chatbot Setup](examples/chatbot-setup.md)** - Complete chatbot with webhooks
- **[Button Actions](examples/button-actions.md)** - Handle interactive buttons
- **[Form Submissions](examples/form-submissions.md)** - Process form data
- **[Slash Commands](examples/slash-commands.md)** - Create custom commands
- **[LLM Integration](examples/llm-integration.md)** - Claude/GPT integration
- **[Scheduled Alerts](examples/scheduled-alerts.md)** - Cron + incoming webhooks
- **[Channel Management](examples/channel-management.md)** - Create/manage channels
### References
- **[API Reference](references/api-reference.md)** - All endpoints and methods
- **[Webhook Events](references/webhook-events.md)** - Complete event reference
- **[Message Cards](references/message-cards.md)** - All card components
- **[Sample Applications](references/samples.md)** - Analysis of 10 official samples
- **[Error Codes](references/error-codes.md)** - Error handling guide
### Troubleshooting
- **[OAuth Issues](troubleshooting/oauth-issues.md)** - Authentication failures
- **[Webhook Issues](troubleshooting/webhook-issues.md)** - Webhook debugging
- **[Common Issues](troubleshooting/common-issues.md)** - Quick diagnostics
## Resources
- **Official Docs**: https://developers.zoom.us/docs/team-chat/
- **API Reference**: https://developers.zoom.us/docs/api/rest/reference/chatbot/
- **Dev Forum**: https://devforum.zoom.us/
- **App Marketplace**: https://marketplace.zoom.us/
---
**Need help?** Start with Integrated Index section below for complete navigation.
---
## Integrated Index
_This section was migrated from `SKILL.md`._
Complete navigation guide for the Zoom Team Chat skill.
## Quick Start Paths
- Start here: [Get Started](get-started.md)
- Fast troubleshooting first: [5-Minute Runbook](RUNBOOK.md)
### Path 1: Team Chat API (User-Level Messaging)
For sending messages as a user account.
1. [API Selection Guide](concepts/api-selection.md) - Confirm Team Chat API is right
2. [Environment Setup](concepts/environment-setup.md) - Get credentials
3. [OAuth Setup Example](examples/oauth-setup.md) - Implement authentication
4. [Send Message Example](examples/send-message.md) - Send your first message
### Path 2: Chatbot API (Interactive Bots)
For building interactive chatbots with rich messages.
1. [API Selection Guide](concepts/api-selection.md) - Confirm Chatbot API is right
2. [Environment Setup](concepts/environment-setup.md) - Get credentials (including Bot JID)
3. [Webhook Architecture](concepts/webhooks.md) - Understand webhook events
4. [Chatbot Setup Example](examples/chatbot-setup.md) - Build your first bot
5. [Message Cards Reference](references/message-cards.md) - Create rich messages
## Core Concepts
Essential understanding for both APIs.
| Document | Description |
|----------|-------------|
| [API Selection Guide](concepts/api-selection.md) | Choose Team Chat API vs Chatbot API |
| [Environment Setup](concepts/environment-setup.md) | Complete credentials and app configuration |
| [Authentication Flows](concepts/authentication.md) | OAuth vs Client Credentials |
| [Webhook Architecture](concepts/webhooks.md) | How webhooks work (Chatbot API) |
| [Message Card Structure](concepts/message-structure.md) | Card component hierarchy |
| [Deployment Guide](concepts/deployment.md) | Production deployment strategies |
| [Security Best Practices](concepts/security.md) | Secure your integration |
## Complete Examples
Working code for common scenarios.
### Authentication
| Example | Description |
|---------|-------------|
| [OAuth Setup](examples/oauth-setup.md) | User OAuth flow implementation |
| [Token Management](examples/token-management.md) | Refresh tokens, expiration handling |
### Basic Operations
| Example | Description |
|---------|-------------|
| [Send Message](examples/send-message.md) | Team Chat API message sending |
| [Chatbot Setup](examples/chatbot-setup.md) | Complete chatbot with webhooks |
| [List Channels](examples/channel-management.md) | Get user's channels |
| [Create Channel](examples/channel-management.md) | Create public/private channels |
### Interactive Features (Chatbot API)
| Example | Description |
|---------|-------------|
| [Button Actions](examples/button-actions.md) | Handle button clicks |
| [Form Submissions](examples/form-submissions.md) | Process form data |
| [Slash Commands](examples/slash-commands.md) | Create custom commands |
| [Dropdown Selects](examples/dropdown-selects.md) | Channel/member pickers |
### Advanced Integration
| Example | Description |
|---------|-------------|
| [LLM Integration](examples/llm-integration.md) | Integrate Claude/GPT |
| [Scheduled Alerts](examples/scheduled-alerts.md) | Cron + incoming webhooks |
| [Database Integration](examples/database-integration.md) | Store conversation state |
| [Multi-Step Workflows](examples/multi-step-workflows.md) | Complex user interactions |
## References
### API Documentation
| Reference | Description |
|-----------|-------------|
| [API Reference](references/api-reference.md) | Pointers and common endpoints |
| [Webhook Events](references/webhook-events.md) | Event types and handling checklist |
| [Message Cards](references/message-cards.md) | All card components |
| [Error Codes](references/error-codes.md) | Error handling guide |
### Sample Applications
| Reference | Description |
|-----------|-------------|
| [Sample Applications](references/samples.md) | Sample app index/notes |
### Field Guides
| Reference | Description |
|-----------|-------------|
| [JID Formats](references/jid-formats.md) | Understanding JID identifiers |
| [Scopes Reference](references/scopes.md) | Common scopes |
| [Rate Limits](references/rate-limits.md) | Throttling guidance |
## Troubleshooting
| Guide | Description |
|-------|-------------|
| [Common Issues](troubleshooting/common-issues.md) | Quick diagnostics and solutions |
| [OAuth Issues](troubleshooting/oauth-issues.md) | Authentication failures |
| [Webhook Issues](troubleshooting/webhook-issues.md) | Webhook debugging |
| [Message Issues](troubleshooting/message-issues.md) | Message sending problems |
| [Deployment Issues](troubleshooting/deployment-issues.md) | Production problems |
## Architecture Patterns
### Chatbot Lifecycle
```
User Action → Webhook → Process → Response
```
### LLM Integration Pattern
```
User Input → Chatbot receives → Call LLM → Send response
```
### Approval Workflow Pattern
```
Request → Send card with buttons → User clicks → Update status → Notify
```
## Common Use Cases
### Notifications
- CI/CD build notifications
- Server monitoring alerts
- Scheduled reports
- System health checks
### Workflows
- Approval requests
- Task assignment
- Status updates
- Form submissions
### Integrations
- LLM-powered assistants
- Database queries
- External API integration
- File/image sharing
### Automation
- Scheduled messages
- Auto-responses
- Data collection
- Report generation
## Resource Links
### Official Documentation
- **[Team Chat Docs](https://developers.zoom.us/docs/team-chat/)** - Official overview
- **[Chatbot Docs](https://developers.zoom.us/docs/team-chat/chatbot/extend/)** - Chatbot guide
- **[API Reference](https://developers.zoom.us/docs/api/rest/reference/chatbot/)** - REST API docs
- **[App Marketplace](https://marketplace.zoom.us/)** - Create and manage apps
### Sample Code
- **[Chatbot Quickstart](https://github.com/zoom/chatbot-nodejs-quickstart)** - Official tutorial
- **[Claude Chatbot](https://github.com/zoom/zoom-chatbot-claude-sample)** - AI integration
- **[Unsplash Chatbot](https://github.com/zoom/unsplash-chatbot)** - Image search bot
- **[ERP Chatbot](https://github.com/zoom/zoom-erp-chatbot-sample)** - Enterprise integration
- **[Task Manager](https://github.com/zoom/task-manager-sample)** - Full CRUD app
### Tools
- **[App Card Builder](https://appssdk.zoom.us/cardbuilder/)** - Visual card designer
- **[ngrok](https://ngrok.com/)** - Local webhook testing
- **[Postman](https://www.postman.com/)** - API testing
### Community
- **[Developer Forum](https://devforum.zoom.us/)** - Ask questions
- **[GitHub Discussions](https://github.com/zoom)** - Community support
- **[Developer Support](https://devsupport.zoom.us)** - Official support
## Documentation Status
### ✅ Complete
- Main skill.md entry point
- API Selection Guide
- Environment Setup
- Webhook Architecture
- Chatbot Setup Example (complete working code)
- Message Cards Reference
- Common Issues Troubleshooting
### 📝 Pending (High Priority)
- OAuth Setup Example
- Send Message Example
- Button Actions Example
- LLM Integration Example
- Webhook Events Reference
- API Reference
- Sample Applications Analysis
### 📋 Planned (Lower Priority)
- Form Submissions Example
- Channel Management Examples
- Database Integration Example
- Error Codes Reference
- Rate Limits Guide
- Deployment troubleshooting
## Getting Started Checklist
### For Team Chat API
- [ ] Read [API Selection Guide](concepts/api-selection.md)
- [ ] Complete [Environment Setup](concepts/environment-setup.md)
- [ ] Obtain Client ID, Client Secret
- [ ] Add required scopes
- [ ] Implement OAuth flow
- [ ] Send first message
### For Chatbot API
- [ ] Read [API Selection Guide](concepts/api-selection.md)
- [ ] Complete [Environment Setup](concepts/environment-setup.md)
- [ ] Obtain Client ID, Client Secret, Bot JID, Secret Token, Account ID
- [ ] Enable Team Chat in Features
- [ ] Configure Bot Endpoint URL and Slash Command
- [ ] Set up ngrok for local testing
- [ ] Implement webhook handler
- [ ] Send first chatbot message
## Version History
- **v1.0** (2026-02-09) - Initial comprehensive documentation
- Core concepts (API selection, environment setup, webhooks)
- Complete chatbot setup example
- Message cards reference
- Common issues troubleshooting
## Support
Use this SKILL.md as the navigation hub for Team Chat API selection, setup, examples, and troubleshooting.
## Environment Variables
- See [references/environment-variables.md](references/environment-variables.md) for standardized `.env` keys and where to find each value.
Источник: anthropics/knowledge-work-plugins / zoom-plugin / build-zoom-team-chat-app ↗. Ссылка проверена 2026-10-10.