Line Bot中Flex Message轮播模板开发异常问题求助
问题分析与解决方案
你的Case 2之所以没有任何回复(尽管请求返回200),核心原因是Flex Carousel消息的JSON格式完全不符合Line Messaging API的规范,Line服务器无法解析无效的消息结构,因此不会向用户推送内容。
错误点拆解
- 你直接将
"type": "carousel"放在了JSON根层级,但Line的回复接口要求所有消息必须包裹在messages数组中,每个数组元素对应一条完整的消息。 - Carousel是Flex消息的布局类型,并非独立的消息类型。它必须作为
type: "flex"消息的contents字段的值,而不能单独作为消息的type。
修正后的Case 2代码
if event.message.text == 'test2': reply_header = {'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + 'xxx'} reply_json = { "replyToken": event.reply_token, "messages": [ # 必须包裹在messages数组里 { "type": "flex", # 消息类型是flex "altText": "Carousel Flex Message", # 供不支持Flex的设备显示的替代文本 "contents": { "type": "carousel", # 这里才是carousel布局类型 "contents": [ { "type": "bubble", "body": { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "First bubble" } ] } }, { "type": "bubble", "body": { "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "Second bubble" } ] } } ] } } ] } r = requests.post("https://api.line.me/v2/bot/message/reply", headers=reply_header, json=reply_json)
关键修改说明
- 新增
messages数组,将整个Flex消息包裹在内,符合Line回复接口的必填结构。 - 明确消息类型为
"type": "flex",并将Carousel布局作为该消息的contents字段值。 - 添加
altText字段,这是Flex消息的必填项,用于在不支持Flex格式的客户端上显示替代文本。
这样修改后,请求就能被Line服务器正确解析,用户就能收到你想要的Carousel样式Flex消息啦!
内容的提问来源于stack exchange,提问作者jason8797




