Dialogflow JSON脚本求助:实现LINE平台触发关键词随机返回指定图片
解决Dialogflow在LINE平台随机返回指定图片的问题
嘿,我来帮你搞定这个问题!你原来的静态JSON响应没法实现随机返回图片的功能,因为Dialogflow的默认响应系统不支持逻辑判断或随机选择操作。要实现这个需求,必须借助**Fulfillment(履行功能)**编写自定义代码来动态生成响应,具体步骤如下:
步骤1:启用Dialogflow的Fulfillment功能
- 打开你的Dialogflow代理后台,切换到Fulfillment标签页
- 启用Inline Editor(这是最方便快速测试的方式,不用自己搭建服务器)
步骤2:编写Node.js实现随机图片逻辑
把内联编辑器里的默认代码替换成下面的内容:
'use strict'; const functions = require('firebase-functions'); const {WebhookClient, Payload} = require('dialogflow-fulfillment'); process.env.DEBUG = 'dialogflow:debug'; // 开启调试日志,方便排查问题 exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => { const agent = new WebhookClient({ request, response }); // 把你需要随机返回的图片URL都放在这个数组里 const imageUrlList = [ "https://i.ibb.co/2Kb9hWV/Somepics-001.png", "https://i.ibb.co/2Kb9hWV/otherpics-001.png", "https://i.ibb.co/2Kb9hWV/pics-201.png" ]; // 核心逻辑:随机选一张图片并返回给LINE用户 function sendRandomImageResponse(agent) { // 生成随机索引,从数组里选一个URL const randomIdx = Math.floor(Math.random() * imageUrlList.length); const targetImageUrl = imageUrlList[randomIdx]; // 构造符合LINE平台要求的图片消息格式 agent.add(new Payload(agent.LINE, { "type": "image", "originalContentUrl": targetImageUrl, "previewImageUrl": targetImageUrl }, {sendAsMessage: true})); } // 绑定意图:把你的触发关键词对应的意图名称和处理函数关联起来 const intentMap = new Map(); intentMap.set('你的意图名称', sendRandomImageResponse); // 这里替换成你实际的意图名称 agent.handleRequest(intentMap); });
步骤3:配置意图的Webhook触发
- 切换到你设置了触发关键词的意图页面
- 滚动到Fulfillment部分,勾选Enable webhook call for this intent
- 保存意图和Fulfillment代码
关键注意事项
- 一定要替换代码里的
你的意图名称为你实际创建的、对应触发关键词的意图名称 - LINE平台的图片消息要求必须提供
originalContentUrl(原图链接)和previewImageUrl(预览图链接),这里我们直接用同一个URL即可 - 确保你的图片链接是公开可访问的,LINE服务器需要能抓取到图片内容
这样设置之后,当用户触发对应的关键词时,Dialogflow就会通过Fulfillment代码随机返回你指定的其中一张图片啦!
内容的提问来源于stack exchange,提问作者Ferry Yan
相关产品推荐
相关产品推荐

