You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用Google App Engine通过REST API异步在新版Hangout Chat发消息

无需Google App Engine,异步发送Hangouts Chat机器人消息的实现方案

嘿,我完全懂你不想被App Engine绑定的想法——其实咱们完全可以用Google Cloud的服务账号直接搞定认证,实现Hangouts Chat机器人的异步消息发送,根本不需要依赖App Engine。下面是一步步的具体方案和代码示例:

一、前期准备工作

  • 先去Google Cloud控制台创建一个服务账号,给它分配chat.bot权限(或者更精细的chat.messages.create权限,按需选择)
  • 下载服务账号的JSON密钥文件,把它存到你自己的服务器或者本地开发环境里
  • 确保你的Hangouts Chat机器人已经在Google Cloud控制台配置完成,并且拿到目标聊天空间的ID(可以从空间设置里找到,格式是spaces/XXX)

二、核心:用服务账号完成认证

不用App Engine的核心就是跳过它的默认认证,直接用服务账号生成OAuth2访问令牌来调用Hangouts Chat API。这里推荐用官方的客户端库来简化操作,避免手动处理令牌生成的复杂逻辑。

Python代码示例

首先安装依赖包:

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

然后编写发送消息的代码:

import google.auth
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 替换成你的实际参数
SERVICE_ACCOUNT_KEY_PATH = 'path/to/your/service-account-key.json'
TARGET_CHAT_SPACE = 'spaces/your-space-id-here'
API_SCOPES = ['https://www.googleapis.com/auth/chat.bot']

def get_chat_api_service():
    # 加载服务账号密钥并生成认证凭据
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_KEY_PATH, scopes=API_SCOPES)
    # 构建Hangouts Chat API的服务实例
    return build('chat', 'v1', credentials=credentials)

def send_chat_message(message_content):
    chat_service = get_chat_api_service()
    # 构造消息体
    message_payload = {
        'text': message_content
    }
    # 调用API发送消息
    response = chat_service.spaces().messages().create(
        parent=TARGET_CHAT_SPACE,
        body=message_payload
    ).execute()
    print(f"消息发送成功!消息ID: {response['name']}")

# 测试一下
if __name__ == '__main__':
    send_chat_message("这是一条完全不依赖App Engine的异步测试消息😎")

三、实现真正的“异步”发送

上面的代码调用API是同步的,但如果要实现异步触发(比如后台任务完成后自动发消息),你可以把发送逻辑放到异步任务队列里,比如用Celery,或者Google Cloud Tasks(这个也是独立于App Engine的服务)。这样就能实现真正的异步消息发送,不用等API调用完成再继续执行其他逻辑。

四、关键注意事项

  • 权限配置:一定要确保服务账号的角色包含Chat Bot或者Chat Message Creator,不然会返回403 Permission Denied错误,我当初踩过这个坑,别重蹈覆辙!
  • 空间ID格式:必须是spaces/xxxxxx的完整格式,不能只填后面的ID部分
  • 密钥安全:服务账号的JSON密钥是敏感信息,绝对不能泄露到公共仓库或者客户端代码里

五、其他语言的实现思路

如果用Node.js或者Java,核心逻辑是一样的:

  1. 用对应语言的Google Auth库加载服务账号密钥
  2. 生成认证凭据后调用Hangouts Chat的spaces.messages.create API

比如Node.js的极简示例:

const { google } = require('googleapis');
const serviceAccountKey = require('./your-service-account-key.json');

// 初始化认证
const authClient = new google.auth.JWT(
  serviceAccountKey.client_email,
  null,
  serviceAccountKey.private_key,
  ['https://www.googleapis.com/auth/chat.bot'],
);

// 构建Chat API服务
const chatApi = google.chat({ version: 'v1', auth: authClient });

// 发送消息函数
async function sendChatMessage(text) {
  const response = await chatApi.spaces.messages.create({
    parent: 'spaces/your-space-id',
    requestBody: { text }
  });
  console.log('消息发送成功,ID:', response.data.name);
}

// 调用测试
sendChatMessage("Node.js也能不依赖App Engine发消息!");

内容的提问来源于stack exchange,提问作者Samriddha Banik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:09:32