Google Chat卡片API用Base64图片报错,求内网图片发送方案
Google Chat卡片API插入内网图片问题解决方案
错误原因
Google Chat卡片API的imageUrl字段不支持Data URI(即data:image/png;base64,...格式),这是你收到400「无效参数」错误的直接原因——官方仅允许该字段填入可被Google Chat服务器正常拉取的HTTP/HTTPS URL。
无需上传公网的可行方案
1. 利用Google Workspace内部共享(适合使用Workspace的企业)
将内网图片上传至公司内部共享的Google Drive文件夹,设置权限为「Google Workspace域内任何人可查看」(避免公开访问),然后将Drive的预览链接转换为直接访问URL:
- 原预览链接格式:
https://drive.google.com/file/d/[FILE_ID]/view - 转换后直接访问URL:
https://drive.google.com/uc?id=[FILE_ID]
把转换后的URL填入卡片的imageUrl字段即可。
2. 开放内网图片给Google Chat服务器
Google Chat的后端服务器需要能拉取图片资源,可通过以下方式实现:
- 查询Google官方文档获取Chat服务的出站IP段,将这些IP添加到公司内网图片服务器的白名单,允许其访问图片资源。
- 配置公司反向代理,将内网图片路径映射到对外可访问的域名,但仅允许Google的IP段访问,既保证图片不公开,又能让Chat服务正常拉取。
3. 发送图片作为消息附件(无需嵌入卡片)
如果不需要将图片嵌入卡片,可直接通过Chat API发送带附件的消息,无需公网URL,直接上传图片二进制数据即可。示例Python代码:
from googleapiclient.discovery import build from google.oauth2.service_account import Credentials import os # 加载服务账号凭证 creds = Credentials.from_service_account_file('your-service-account-key.json') chat_service = build('chat', 'v1', credentials=creds) # 读取本地图片二进制数据 with open('internal-image.png', 'rb') as f: image_content = f.read() # 构造消息体 message_body = { "text": "问题解答相关图片", "attachments": [ { "contentType": "image/png", "content": image_content } ] } # 发送消息 response = chat_service.spaces().messages().create( parent='spaces/XXXXXXXXXXX', body=message_body ).execute()
内容的提问来源于stack exchange,提问作者Michael Pulis
相关产品推荐
相关产品推荐

