SuperAPI AI 工具集

google-chat

办公与效率

查看项目

更新于 10-16 07:11

技能介绍

用途

本工具用于向 Google Chat 的空间(Space)和用户发送消息,支持两种方式:Webhook 和 OAuth。适用于发送通知、告警或消息到 Google Chat 频道的场景。

主要能力

方式一:Webhook(推荐用于已知频道)

向预先配置的频道发送消息,消息以机器人身份显示。支持线程回复。

发送命令:

python3 scripts/send_webhook.py "$WEBHOOK_URL" "Your message here"

带线程的示例:

python3 scripts/send_webhook.py "$WEBHOOK_URL" "Reply message" --thread_key "unique-thread-id"

Webhook 配置存储在 google-chat-config.json 中:

{
  "webhooks": {
    "acs_engineering_network": "https://chat.googleapis.com/v1/spaces/...",
    "general": "https://chat.googleapis.com/v1/spaces/..."
  }
}

读取配置并发送:

WEBHOOK_URL=$(jq -r '.webhooks.acs_engineering_network' google-chat-config.json)
python3 scripts/send_webhook.py "$WEBHOOK_URL" "Deploy completed ✅"

方式二:OAuth(用于动态消息发送)

首次设置:将 OAuth 凭据保存到文件(如 google-chat-oauth-credentials.json),然后运行初始认证(会打开浏览器并保存 token):

python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --space "General" \
  "Test message"

按名称发送到空间:

python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --space "Engineering Network" \
  "Deploy completed"

注意:OAuth 消息会自动添加 🤖 emoji 前缀,使用 --no-emoji 可禁用:

python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --space "Engineering Network" \
  "Message without emoji" \
  --no-emoji

列出可用空间:

python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --list-spaces

发送私信(需要已有空间 ID):

# 注意:Google Chat API 不支持通过邮箱创建新私信
# 需要已有私信会话的空间 ID
python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --space-id "spaces/xxxxx" \
  "The report is ready"

按空间 ID 发送(更快):

python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --space-id "spaces/AAAALtlqgVA" \
  "Direct message to space"

使用方式

依赖安装

安装所需的 Python 包:

pip install google-auth-oauthlib google-auth-httplib2 google-api-python-client

所需 OAuth 权限范围

  • https://www.googleapis.com/auth/chat.messages — 发送消息
  • https://www.googleapis.com/auth/chat.spaces — 访问空间信息
  • https://www.googleapis.com/auth/chat.memberships.readonly — 列出空间成员(用于私信识别)

OAuth 设置指南

如果 OAuth 凭据尚不存在:

  1. 前往 Google Cloud Console
  2. 选择或创建项目
  3. 启用 Google Chat API
  4. 前往 APIs & Services → Credentials
  5. 创建 OAuth 2.0 Client ID(Desktop app 类型)
  6. 下载 JSON 并保存为 google-chat-oauth-credentials.json

凭据 JSON 格式示例:

{
  "installed": {
    "client_id": "...apps.googleusercontent.com",
    "client_secret": "GOCSPX-...",
    "redirect_uris": ["http://localhost"],
    ...
  }
}

Webhook 设置指南

为 Google Chat 空间创建 Webhook:

  1. 在浏览器中打开 Google Chat
  2. 进入目标空间
  3. 点击空间名称 → Apps & integrations
  4. 点击 Manage webhooks → Add webhook
  5. 为其命名(如 "Agustin Networks")
  6. 复制 Webhook URL
  7. 添加到 google-chat-config.json

方法选择

使用 Webhook 的场景:

  • 重复向相同频道发送消息
  • 消息应以机器人/服务身份显示
  • 速度重要(无需 OAuth 握手)
  • 配置是静态的

使用 OAuth 的场景:

  • 动态向不同空间发送消息
  • 消息应来自配置的 Google Chat App
  • 空间名称在运行时确定
  • 需要列出和发现可用空间

适用场景

  • 部署通知发送到工程频道
  • 向特定用户发送任务提醒
  • 将多条消息归入同一线程

示例:

WEBHOOK=$(jq -r '.webhooks.acs_engineering_network' google-chat-config.json)
python3 scripts/send_webhook.py "$WEBHOOK" "🚀 Production deploy v2.1.0 completed"
python3 scripts/send_oauth.py \
  --credentials google-chat-oauth-credentials.json \
  --token google-chat-token.json \
  --dm juan@empresa.com \
  "Your report is ready for review: https://docs.company.com/report"
WEBHOOK=$(jq -r '.webhooks.general' google-chat-config.json)
THREAD_KEY="deploy-$(date +%s)"

python3 scripts/send_webhook.py "$WEBHOOK" "Starting deploy..." --thread_key "$THREAD_KEY"
# ... deployment happens ...
python3 scripts/send_webhook.py "$WEBHOOK" "Deploy completed ✅" --thread_key "$THREAD_KEY"

限制

OAuth 限制

  • 无法通过邮箱地址创建新私信(Google Chat API 限制)
  • 发送私信需要已有会话的空间 ID
  • 可使用 --list-spaces 查找可用的私信空间 ID

消息格式

两种方法均支持简单文本。如需高级格式(卡片、按钮),需构造 JSON payload:

Webhook 卡片示例:

import json
import urllib.request

payload = {
    "cardsV2": [{
        "cardId": "unique-card-id",
        "card": {
            "header": {"title": "Deploy Status"},
            "sections": [{
                "widgets": [{
                    "textParagraph": {"text": "Production deploy completed successfully"}
                }]
            }]
        }
    }]
}

data = json.dumps(payload).encode("utf-8")
req = urllib.request.Request(webhook_url, data=data, headers={"Content-Type": "application/json"})
urllib.request.urlopen(req)

故障排查

Webhook 错误:

  • 验证 Webhook URL 是否正确且有效
  • 检查空间是否仍存在且 Webhook 未被删除
  • 确保消息不为空

OAuth 错误:

  • 如果 token 过期,重新运行认证流程
  • 验证 Cloud Console 中已启用 Google Chat API
  • 检查用户是否有权访问目标空间
  • 对于私信,确保用户邮箱正确且在同一工作区

权限错误:

  • Webhook:必须是空间成员
  • OAuth:必须有权访问目标空间或用户
  • 企业工作区:部分功能可能受管理员策略限制