DialogFlow与LINE通过Fulfillment Webhook集成:富消息回复失败求助
嘿,我之前也碰到过一模一样的问题!这大概率是几个容易忽略的配置或格式细节导致的,给你列几个排查方向:
1. 先确认DialogFlow的LINE集成里开了富消息Webhook开关
去DialogFlow的「集成」页面找到LINE,一定要勾选**"Use webhook for rich messages"**。要是没开,DialogFlow只会认speech/displayText字段,完全不会理你data里的LINE专属格式——这是我当初踩的第一个坑!
2. 别硬编码replyToken!要动态取请求里的
你示例里的replyToken是写死的吧?这绝对不行!这个token是LINE每次发请求给DialogFlow时带的临时凭证,必须从Webhook收到的请求体里提取:
// 从请求里拿这个值 request.body.originalDetectIntentRequest.payload.replyToken
把这个动态获取的token放到响应的data.line.replyToken里,不能自己随便填固定值。
3. 严格对齐响应的JSON结构
DialogFlow对LINE专属响应的格式要求很严,差一点都不行,正确的结构应该是这样(动态token版):
{ "data": { "line": { "replyToken": "<从请求里提取的真实replyToken>", "messages": [ { "type": "text", "text": "Hi" } ] } } }
检查一下有没有多余的逗号、漏写的字段,比如messages必须是数组,每个消息的type和对应内容要匹配(比如text类型就必须有text字段)。
4. 检查Webhook的返回状态和内容
确保你的Webhook返回的是200 OK状态码,而且响应体是纯JSON格式(没有HTML标签或者多余的字符)。可以在Webhook里加日志,把收到的请求和返回的响应都打出来,看看是不是哪里被篡改了——比如服务器自动加了额外内容导致格式错误。
5. 确认LINE Channel的权限
去LINE开发者后台看看你的Channel Access Token有没有回复消息的权限,要是权限没开,就算格式对了也发不出去。
要是还没解决,把Webhook的请求日志和响应日志贴出来,应该就能一眼看出问题啦!
内容的提问来源于stack exchange,提问作者Andy

