Generated banner for Build Zoom Team Chat App
Generated logo for Build Zoom Team Chat App

Build Zoom Team Chat App

OpenAIOfficialCreated by ZoomDistributed by OpenAI

  • Skill
  • Tool integration
  • Software development
  • MIT
  • Medium risk

From the author

Use when building Team Chat.
— the description by Zoom

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a systematic approach to building applications for Zoom Team Chat. It guides developers through selecting the appropriate API surface, configuring app settings, modeling message structures, and implementing secure authentication and webhook handling. It covers the lifecycle of building both user-scoped messaging integrations and interactive chatbot workflows.

What it does

  • Helps select between Team Chat API and Chatbot API based on integration requirements.
  • Outlines the configuration of app types, scopes, and role enablement.
  • Provides guidance on modeling message structures including rich cards, forms, and slash commands.
  • Details the implementation of OAuth flows and token management.
  • Supports the setup of webhook handlers with signature verification.
  • Assists in debugging common issues related to JID formats, channel membership, and payload shapes.

When to use it

  • When you need to integrate custom messaging or automation into Zoom Team Chat.
  • When designing interactive chatbot workflows with buttons, forms, or dropdowns.
  • When setting up OAuth authentication for Zoom-based applications.
  • When troubleshooting connectivity or message delivery issues in a Zoom integration.

Advantages

  • Provides a clear, step-by-step path for Zoom app development.
  • Ensures security best practices like signature verification are prioritized.
  • Helps avoid common pitfalls in API selection and message formatting.
  • Centralizes references for environment variables and API endpoints.

Usage examples

“How do I start building a chatbot for Zoom Team Chat?”
The agent will guide you through choosing the Chatbot API, configuring the bot identity, and setting up the necessary OAuth and webhook infrastructure.
“I am getting an invalid access token error when sending messages.”
The agent will help you verify your app type, check if the required scopes are enabled, and confirm if the user has re-consented after recent scope changes.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/openai/build-zoom-team-chat-app/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip build-zoom-team-chat-app.zip -d .agents/skills

Documentation by Zoom

Build Zoom Team Chat App

Use this skill when the target surface is Zoom Team Chat. First decide whether the integration is user-scoped messaging, a chatbot, an interactive message-card workflow, or a webhook-driven automation.

Workflow

  1. Choose the API surface: Team Chat API for user-scoped actions, Chatbot API for bot identity and chatbot workflows.

  2. Confirm app type, scopes, role enablement, and whether the account has Zoom for Developers enabled.

  3. Model message structure before coding: plain messages, rich cards, buttons, dropdowns, forms, slash commands, and threaded replies.

  4. Implement OAuth and token refresh separately from message sending, with clear storage boundaries.

  5. Add webhook handlers for interactivity and lifecycle events with signature verification and retry-safe processing.

  6. Debug by checking JID formats, channel membership, bot installation, scopes, role settings, and message-card payload shape.

References

Files

references/message-cards.md

Message Card Components Reference

Complete reference for building rich interactive messages in Zoom Team Chat chatbots.

Card Structure

Every chatbot message has this structure:

{
  "content": {
    "head": {          // Optional header
      "text": "Title",
      "sub_head": { "text": "Subtitle" }
    },
    "body": [          // Array of components
      { "type": "message", "text": "Content" },
      { "type": "actions", "items": [...] }
      // ... more components
    ]
  }
}

Components Catalog

Text Components
message

Plain text content.

{
  "type": "message",
  "text": "Hello, this is plain text"
}
header

Title text with optional styling.

{
  "type": "header",
  "text": "Main Heading",
  "style": {
    "bold": true,
    "italic": false
  }
}
styled_text

Text with markdown-like styling.

{
  "type": "styled_text",
  "text": "**Bold** *italic* `code`"
}
Interactive Components
actions (Buttons)

Clickable buttons that trigger webhooks.

{
  "type": "actions",
  "items": [
    {
      "text": "Approve",
      "value": "approve",
      "style": "Primary"      // Primary, Danger, Default
    },
    {
      "text": "Reject",
      "value": "reject",
      "style": "Danger"
    }
  ]
}

Styles:

  • Primary - Blue button

  • Danger - Red button

  • Default - Gray button

dropdown

Select menu with options.

{
  "type": "dropdown",
  "select_items": [
    { "text": "Option 1", "value": "opt1" },
    { "text": "Option 2", "value": "opt2" }
  ]
}
form_field

Text input field.

{
  "type": "form_field",
  "editable": true,
  "text": "Enter your name"
}
Layout Components
section

Group components with optional colored sidebar.

{
  "type": "section",
  "sidebar_color": "#3b82f6",      // Hex color
  "sections": [
    { "type": "message", "text": "Grouped content" }
  ]
}

Common colors:

  • Success: #10b981 (green)

  • Error: #ef4444 (red)

  • Warning: #f59e0b (orange)

  • Info: #3b82f6 (blue)

fields

Key-value pairs displayed in columns.

{
  "type": "fields",
  "items": [
    { "key": "Status", "value": "Active" },
    { "key": "Priority", "value": "High" },
    { "key": "Assignee", "value": "John Doe" }
  ]
}
divider

Horizontal line separator.

{
  "type": "divider"
}
Media Components
attachments

Image with optional link.

{
  "type": "attachments",
  "img_url": "https://example.com/image.jpg",
  "resource_url": "https://example.com/full-page",
  "information": {
    "title": { "text": "Image Title" },
    "description": { "text": "Click to view" }
  }
}

Complete Examples

Build Notification
{
  "content": {
    "head": {
      "text": "Build #123 Complete",
      "sub_head": { "text": "main branch" }
    },
    "body": [
      {
        "type": "section",
        "sidebar_color": "#10b981",
        "sections": [
          { "type": "message", "text": "✅ Build completed successfully" }
        ]
      },
      {
        "type": "fields",
        "items": [
          { "key": "Branch", "value": "main" },
          { "key": "Commit", "value": "abc123" },
          { "key": "Duration", "value": "2m 34s" }
        ]
      },
      {
        "type": "actions",
        "items": [
          { "text": "View Logs", "value": "view_logs", "style": "Primary" },
          { "text": "Deploy", "value": "deploy", "style": "Default" }
        ]
      }
    ]
  }
}
Approval Request
{
  "content": {
    "head": {
      "text": "Expense Approval Required"
    },
    "body": [
      { "type": "message", "text": "John Doe submitted an expense report" },
      {
        "type": "fields",
        "items": [
          { "key": "Amount", "value": "$500.00" },
          { "key": "Category", "value": "Travel" },
          { "key": "Date", "value": "Feb 9, 2026" }
        ]
      },
      { "type": "divider" },
      {
        "type": "actions",
        "items": [
          { "text": "Approve", "value": "approve_500", "style": "Primary" },
          { "text": "Reject", "value": "reject_500", "style": "Danger" },
          { "text": "View Details", "value": "details_500", "style": "Default" }
        ]
      }
    ]
  }
}
Error Notification
{
  "content": {
    "head": {
      "text": "⚠️ Service Alert"
    },
    "body": [
      {
        "type": "section",
        "sidebar_color": "#ef4444",
        "sections": [
          { "type": "message", "text": "Database connection failed" }
        ]
      },
      {
        "type": "fields",
        "items": [
          { "key": "Service", "value": "api-prod" },
          { "key": "Error", "value": "Connection timeout" },
          { "key": "Time", "value": "2026-02-09 18:30:00 UTC" }
        ]
      },
      {
        "type": "actions",
        "items": [
          { "text": "View Logs", "value": "logs", "style": "Primary" },
          { "text": "Acknowledge", "value": "ack", "style": "Default" }
        ]
      }
    ]
  }
}

Limitations

ComponentLimit
Message text4,096 characters
Button text40 characters
Field key/value256 characters each
Dropdown options100 options
Buttons per message5 buttons

Best Practices

Button Design

✅ DO: Use clear, action-oriented labels

  • "Approve Request"

  • "View Details"

  • "Cancel Order"

❌ DON'T: Use vague labels

  • "OK"

  • "Click Here"

  • "Button"

Color Usage

✅ DO: Use semantic colors

  • Green (#10b981) for success

  • Red (#ef4444) for errors/destructive actions

  • Blue (#3b82f6) for info

  • Orange (#f59e0b) for warnings

❌ DON'T: Use random colors without meaning

Field Formatting

✅ DO: Keep keys concise, values informative

{ "key": "Status", "value": "Active" }

❌ DON'T: Make keys too long

{ "key": "The current status of the request", "value": "Active" }

Testing Cards

Use the Team Chat App Card Builder to:

  • Preview card designs

  • Test layouts

  • Generate JSON

Next Steps

Resources

Requirements and compatibility

Written for: OpenAI Codex

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

What our scanner noticed· Medium risk

  • Possible data-exfiltration endpoints
  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Zoom
Publisher
OpenAI (Official)
Distributed by
OpenAI
Source
openai/plugins · plugins/zoom/skills/team-chat · commit d420d13
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from plugins/zoom/LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Zoom or OpenAI.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download build-zoom-team-chat-app.zip