Dialogflow调用Firebase函数Webhook报错,请求排查并给出修复方案
问题排查与修复
我看了你的代码和问题描述,能找出几个关键问题导致Webhook报错:
1. 模块拼写错误
你代码里写的是 const requst = require('request'); —— 这里的 requst 是拼写错误,应该是 request。这个错误会导致Node.js找不到对应模块,直接抛出加载失败的错误,这很可能是日志里报错的核心原因之一。
如果你的代码里其实没用到request模块(目前看你的意图处理逻辑里确实没用到它),更干脆的做法是直接删掉这一行,减少不必要的依赖。
2. 未将请求交给Dialogflow实例处理
你的Firebase函数创建了dialogflow的app实例,但最后没有让这个实例处理传入的请求并生成响应。在exports.webhook的函数末尾,必须加上 app(request, response); 这一行,否则请求得不到正确处理,自然会返回错误。
3. 可选优化:Firebase Admin初始化方式
现在Firebase Admin SDK推荐的初始化方式不需要传入functions.config().firebase参数,直接写 admin.initializeApp(); 即可,旧写法虽然可能兼容,但更推荐使用最新的初始化方式。
修复后的完整代码
const functions = require('firebase-functions'); const admin = require('firebase-admin'); // 如果没用到request模块,直接删掉下面这行 // const request = require('request'); const { dialogflow, BasicCard, BrowseCarousel, BrowseCarouselItem, Button, Carousel, Image, LinkOutSuggestion, List, MediaObject, Suggestions, SimpleResponse, } = require('actions-on-google'); const intentSuggestions = [ 'Basic Card', 'Browse Carousel', 'Carousel', 'List', 'Media', 'Suggestions', 'Table', ]; admin.initializeApp(); var firestore = admin.firestore(); const randomize = require('randomatic'); exports.webhook = functions.https.onRequest((request, response) => { const app = dialogflow({ debug: true }); app.intent('Default Welcome Intent', (conv) => { conv.ask(new SimpleResponse({ speech: 'Hi there!', text: 'Hello there!', })); conv.ask(new SimpleResponse({ speech: 'I can show you basic cards, lists and carousels ' + 'as well as suggestions on your phone.', text: 'I can show you basic cards, lists and carousels as ' + 'well as suggestions.', })); conv.ask(new Suggestions(intentSuggestions)); }); // 关键:让app处理请求并返回响应 app(request, response); });
修复完这些问题后,重新部署你的Firebase函数,然后再测试Dialogflow的Webhook调用,应该就能正常工作了。
内容的提问来源于stack exchange,提问作者user3872094
相关产品推荐
相关产品推荐

