如何通过NodeJS向Dialogflow请求传递参数?
解决方案:通过Node.js向Dialogflow传递自定义参数
我懂你想实现的效果——从Node.js代码里给Dialogflow传个参数(比如name),让它自动返回带这个参数的动态响应,比如"Hi $name"。下面是调整后的完整可运行代码,已经帮你把参数传递的逻辑补全了:
const projectId = 'your-project-id'; const sessionId = 'session-id'; const query = 'your-query'; // 这里填触发对应意图的问句,比如"打招呼" const languageCode = 'your-language'; // 示例:'zh-CN' 或 'en-US' // 引入structjson工具(用于JSON与Dialogflow Struct格式互转,把对应代码存为structjson.js放在同目录即可) const j = require("./structjson.js"); const dialogflow = require('dialogflow'); // 初始化会话客户端,替换为你的服务账号密钥文件路径 const sessionClient = new dialogflow.SessionsClient({keyFilename: './your-service-account-key.json'}); const sessionPath = sessionClient.sessionPath(projectId, sessionId); async function sendRequestWithParams() { // 初始化上下文客户端 const contextClient = new dialogflow.ContextsClient({ keyFilename: './your-service-account-key.json' }); // 构造包含自定义参数的上下文 const contextData = { name: contextClient.contextPath(projectId, sessionId, 'custom-context'), // 自定义上下文名称 parameters: j.jsonToStructProto({ name: 'John' }), // 传入你要传递的参数,比如这里的name: 'John' lifespanCount: 1 // 上下文有效期,1表示仅当前请求生效 }; // 创建上下文 const [context] = await contextClient.createContext({ parent: sessionPath, context: contextData }); // 构造Dialogflow请求,把上下文加入queryParams const request = { session: sessionPath, queryInput: { text: { text: query, languageCode } }, queryParams: { contexts: [context] // 传入刚才创建的上下文 } }; // 发送请求并打印结果 const result = await sessionClient.detectIntent(request); console.log('Dialogflow响应结果:', result); } // 执行请求 sendRequestWithParams();
关键注意事项:
- structjson.js:这是Dialogflow官方提供的格式转换工具,你只需要把对应代码保存成这个文件放在项目目录里就能用。
- Dialogflow控制台配置:要在控制台给目标意图关联你定义的上下文(比如上面的
custom-context),并在意图响应里用$name引用参数。 - 密钥文件:务必把代码里的密钥文件路径替换成你自己的Dialogflow服务账号密钥路径。
这样调整后,运行代码就能让Dialogflow接收到你传入的参数,返回对应的动态响应啦!
内容的提问来源于stack exchange,提问作者Marco Lampis
相关产品推荐
相关产品推荐

