如何通过Telegram Bot的editMessageMedia接口正确上传本地文件?
问题
调用Telegram Bot API的editMessageText接口编辑消息文本时,以下curl命令可正常运行:
curl "https://api.telegram.org/bot123/editMessageText?chat_id=-123123&message_id=123123123&text=BLAH"
但使用editMessageMedia接口替换消息附件时,执行以下命令报错:
curl -d media='{"type": "document", "media": "@/home/user/file.mp3"}' "https://api.telegram.org/bot123/editMessageMedia?chat_id=-123123&message_id=123123124"
错误返回:
{"ok":false,"error_code":400,"description":"Bad Request: invalid file HTTP URL specified: URL host is empty"}
如何正确附加本地文件?
解决方案
要通过editMessageMedia上传本地文件,不能用-d参数(该参数仅适用于普通键值对表单,无法处理文件上传),必须采用multipart/form-data格式提交请求,具体步骤如下:
- 在
media的JSON对象中,将media字段设为attach://<占位符名称>,比如attach://file - 使用
-F参数分别提交media字段和本地文件,文件参数名要和占位符名称完全匹配
正确的curl命令示例:
curl -F media='{"type": "document", "media": "attach://file"}' -F file=@/home/user/file.mp3 "https://api.telegram.org/bot123/editMessageMedia?chat_id=-123123&message_id=123123124"
关键说明
- Telegram Bot API要求上传本地媒体文件时,必须使用
multipart/form-data编码 attach://<name>是用来关联媒体元数据和实际文件的占位符,<name>必须和后面-F指定的文件参数名一致- 确保目标消息支持媒体编辑(比如原消息本身包含媒体内容),且bot拥有对应的操作权限
内容的提问来源于stack exchange,提问作者vv0iadyk
相关产品推荐
相关产品推荐

