Slack Blocks格式在Workflows中失效,请求技术排查
Slack Block Kit 格式丢失问题修复
问题现状
我编写了AWS Lambda函数向Slack发送Block Kit格式消息,但发送后所有格式失效:
- 标题“Week N: Coding Puzzle, human generation!”的加粗效果未显示
- 分隔线未渲染
- 代码块仅显示反引号,内容变为纯文本
当前Lambda代码:
def postToSlack(url, message): slack_data = json.dumps({'blocks': message}) headers = { "Content-Type": "application/json", "Accept": "application/json", } r = requests.post(url, headers=headers, data=slack_data)
问题原因与修复方案
1. 严格遵循Block Kit结构规范
Slack的Block Kit对格式有明确结构要求,需确保message变量符合以下规则:
- 加粗文本:在
section类型的block中,将text的type设为mrkdwn,并用*内容*标记加粗:{ "type": "section", "text": { "type": "mrkdwn", "text": "*Week N: Coding Puzzle, human generation!*" } } - 分隔线:单独使用一个
type: "divider"的block,不能嵌套在其他block内:{"type": "divider"} - 代码块:在
section的mrkdwn类型text中,用三个反引号包裹代码内容:{ "type": "section", "text": { "type": "mrkdwn", "text": "```\n你的代码内容\n```" } }
2. 优化Lambda函数实现
原代码手动序列化JSON并设置headers,易出现转义问题。改用requests的json参数,它会自动处理序列化和Content-Type头,避免格式错误:
import json import requests def postToSlack(url, message): # 直接传入json参数,无需手动dumps和设置headers response = requests.post(url, json={'blocks': message}) # 新增错误检查,便于调试 if response.status_code != 200: raise Exception(f"Slack请求失败: {response.status_code} - {response.text}")
3. 调试建议
- 先用Slack Block Kit Builder验证
message结构是否正确,确认预览效果符合预期后再部署Lambda - 查看Slack API的返回响应,若有错误信息可直接定位问题
内容的提问来源于stack exchange,提问作者Falpangaea
相关产品推荐
相关产品推荐

