如何让Slack Workflow Builder渲染变量中的Markdown文本?
解决Slack Workflow Builder渲染自定义步骤Markdown变量的问题
针对你遇到的Workflow Builder无法渲染自定义步骤生成的Markdown字符串问题,给你两个可行的解决思路:
思路一:改用Block Kit结构传递消息内容
Workflow Builder对Slack的Block Kit支持更完善,你可以在自定义步骤的execute环节生成Block格式的JSON数组,而非纯Markdown字符串,这样后续步骤能正确解析并渲染格式。
实现代码示例
在你的自定义步骤execute函数里,生成Block结构的消息并返回:
def execute(step, client, logger): # 执行原有输入数据验证逻辑 # 构建Block格式的消息内容 message_blocks = [ { "type": "section", "text": { "type": "mrkdwn", "text": "*CICD构建故障通知*\n构建任务 `build-xxx` 执行失败,责任人: <@Uxxxxxxx>" } }, { "type": "context", "elements": [ {"type": "mrkdwn", "text": "故障时间: 2024-05-20 14:30"} ] } ] # 返回Block变量给Workflow return {"message_blocks": message_blocks}
Workflow配置调整
在Workflow Builder的最后一步“发送消息”中,切换到「Blocks」模式,插入变量{{data.message_blocks}}即可,此时Slack会自动解析Block中的Markdown语法并渲染。
思路二:自定义步骤直接调用API发送消息
绕过Workflow Builder的消息发送步骤,直接在自定义步骤里用Slack API完成频道消息和DM的发送,这样能完全控制消息的渲染逻辑。
实现代码示例
def execute(step, client, logger): # 获取Workflow传入的参数(频道ID、用户ID等) target_channel = step["inputs"]["ci_status_channel"] responsible_user = step["inputs"]["user_id"] # 生成带Markdown的消息内容 channel_msg = "*CICD构建故障*\n> 任务ID: `build-xxx`\n> 失败原因: 依赖包拉取超时" user_msg = "你负责的CICD任务 `build-xxx` 失败了,请尽快排查修复" # 发送频道消息(启用mrkdwn渲染) client.chat_postMessage( channel=target_channel, text=channel_msg, mrkdwn=True ) # 发送DM给责任人 client.chat_postMessage( channel=responsible_user, text=user_msg, mrkdwn=True ) # 无需返回变量给后续步骤 return {}
Workflow配置调整
删除原来的最后一步消息发送,只保留你的自定义步骤即可,所有消息发送逻辑由机器人完成,确保Markdown被正确渲染。
内容的提问来源于stack exchange,提问作者Mobile Ben
相关产品推荐
相关产品推荐

