Slack API Blocks中tags类型在Python调用时失效的问题排查
问题根源
Slack官方的Block Kit没有名为tags的区块类型,这就是你带这个区块会触发invalid_block错误的核心原因——Slack API根本不识别这个类型,跟你是否用json.dumps()序列化无关。
正确解决步骤
1. 替换tags区块为官方支持的类型
如果你的需求是在消息里展示标签,用官方认可的区块模拟:
- 用
section区块配合Markdown格式文本,比如用*#标签名*或[#标签名]呈现标签样式 - 用
context区块,把多个标签放在同一行展示
2. 用Slack官方Python SDK发送Blocks(推荐)
别手动处理JSON序列化,用slack-sdk的WebClient直接传Python字典,SDK会自动处理格式问题,代码示例:
from slack_sdk import WebClient from slack_sdk.errors import SlackApiError # 初始化客户端,替换为你的Bot Token client = WebClient(token="xoxb-your-bot-token") # 构造包含合法区块的payload blocks = [ { "type": "section", "text": { "type": "mrkdwn", "text": "这是带标签的消息:*#项目A* *#紧急*" } }, { "type": "context", "elements": [ { "type": "mrkdwn", "text": "*#前端*" }, { "type": "mrkdwn", "text": "*#Bug修复*" } ] } ] try: # 发送消息,直接传入blocks字典 response = client.chat_postMessage( channel="#your-channel", blocks=blocks ) print("消息发送成功:", response["ts"]) except SlackApiError as e: print(f"发送失败: {e.response['error']}")
3. 验证Blocks格式
用Slack官方的Block Kit验证工具检查你的payload,确保所有区块类型都是官方支持的(比如section、divider、image、actions、context等),避免使用非官方类型。
额外注意点
- 不要用
json.dumps()把blocks转成字符串传给API,直接传Python字典即可,Slack SDK会自动处理序列化 - 从Block Kit Builder复制payload时,务必检查区块类型,有些测试或第三方扩展的类型官方API不支持,只保留官方文档里列出的类型
内容的提问来源于stack exchange,提问作者Akshay Hazari
相关产品推荐
相关产品推荐

