Telegram API link_preview_options参数使用报错求助
Telegram Bot API sendMessage接口link_preview_options参数400错误解决办法
添加link_preview_options: {is_disabled: true}参数后请求返回400错误,提示无法解析该JSON对象,移除参数后请求正常。问题出在Google Apps Script的UrlFetchApp默认处理嵌套参数的方式不符合Telegram API的要求。
解决代码
function sendTelegramMessage(chatId, text) { var token = "my_token"; var apiUrl = "https://api.telegram.org/bot" + token + "/sendMessage"; var payload = { method: "post", contentType: "application/json", payload: JSON.stringify({ chat_id: chatId, text: text, parse_mode: "HTML", link_preview_options: {is_disabled: true} }) }; var response = UrlFetchApp.fetch(apiUrl, payload); }
原因说明
原来的写法中,UrlFetchApp会把嵌套的link_preview_options对象解析成表单字段(类似link_preview_options[is_disabled]=true),但Telegram API要求请求体是JSON格式,这种表单格式无法被正确解析成JSON对象,所以返回400错误。改用JSON.stringify把整个请求体转成JSON字符串,并设置contentType: "application/json",就能匹配API的接收要求。
官方文档相关内容翻译
link_preview_options(可选,LinkPreviewOptions类型):链接预览的配置选项。省略该参数时将使用默认的链接预览设置。
LinkPreviewOptions 对象结构:
- is_disabled(可选,布尔型):设为true时禁用链接预览
- url(可选,字符串型):用于生成预览的自定义链接,必须是消息文本中包含的链接
- prefer_small_media(可选,布尔型):设为true时优先显示小尺寸媒体预览
- prefer_large_media(可选,布尔型):设为true时优先显示大尺寸媒体预览
- show_above_text(可选,布尔型):设为true时链接预览显示在消息文本上方,否则显示在下方
内容的提问来源于stack exchange,提问作者GoXLd
相关产品推荐
相关产品推荐

