Slack Webhook发送含路径字符时返回invalid_payload问题求助
问题根源
你手动拼接JSON payload的方式有问题——当消息里带Windows路径的反斜杠\时,生成的JSON格式会失效。因为JSON语法要求字符串里的反斜杠必须写成\\,你的代码没做转义处理,导致Slack收到的payload不符合规范,触发invalid_payload错误。
修复方案
别自己拼JSON了,用Python自带的json模块或者requests的内置功能来处理,它们会自动搞定字符转义:
方案1:用json模块序列化
import requests import json def send_slack_message(message: str): payload = json.dumps({"text": message}) response = requests.post(url, data=payload, headers={"Content-Type": "application/json"}) print(response.text) def main(message_text: str): send_slack_message(message=message_text)
调用的时候可以直接传原始路径,或者用Python原始字符串(加r前缀)避免本地转义:
# 普通字符串(需要手动转义反斜杠) main(message_text="Found at \\something.co.uk\\blahblah\\blah") # 原始字符串(无需手动转义) main(message_text=r"Found at \something.co.uk\blahblah\blah")
方案2:直接用requests的json参数
更简单的方式,让requests自动处理序列化和请求头:
import requests def send_slack_message(message: str): response = requests.post(url, json={"text": message}) print(response.text) def main(message_text: str): send_slack_message(message=message_text)
Slack Webhook字符规则说明
Slack对消息内容的字符限制很宽松,核心约束来自JSON格式:
- 反斜杠、双引号必须转义(用
json模块会自动处理) - 控制字符(比如换行、制表符)需要正确转义
- 除JSON语法要求的转义外,常规的字母、数字、路径符号(
\、/等)都能正常发送
只要保证最终发送的payload是合法JSON,就能成功投递消息。
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

