如何在Google Actions、DialogflowApp与Firebase Functions中处理多语言及检测请求语言
解决方案:直接从Dialogflow请求体提取语言代码
我来给你梳理下最直接的解决思路——其实Dialogflow在调用你的Firebase函数(Webhook)时,已经把当前用户使用的语言信息打包在请求里了,完全不需要依赖actions-on-google库的特定方法,直接从请求payload里提取就好!
步骤1:获取语言代码
在Firebase函数的请求对象中,req.body.queryResult.languageCode就是你要的语言标识,格式和你在Dialogflow代理里配置的完全一致(比如en、zh-CN、es等)。步骤2:根据语言返回对应响应
拿到语言代码后,就可以通过条件判断或switch分支返回对应语言的内容,示例代码如下:
const functions = require('firebase-functions'); exports.yourWebhookName = functions.https.onRequest((req, res) => { // 提取当前请求的语言代码 const lang = req.body.queryResult.languageCode; // 根据语言生成对应响应文本 let fulfillmentText; if (lang === 'en') { fulfillmentText = 'Welcome! How can I assist you today?'; } else if (lang === 'zh-CN') { fulfillmentText = '欢迎!请问我能帮你做什么?'; } else if (lang === 'es') { fulfillmentText = '¡Bienvenido! ¿En qué puedo ayudarte hoy?'; } else { // 默认 fallback 语言 fulfillmentText = 'Hello! How can I help you?'; } // 返回符合Dialogflow要求的响应格式 res.json({ fulfillmentText: fulfillmentText }); });
- 额外补充
如果你用的是actions-on-google新版本库(v3+),也可以通过对话上下文conv.user.locale获取更详细的语言/地区信息(比如en-US、zh-CN),但直接读取请求体的方式更通用,不依赖库版本,也更直观。
之前你在actions-on-google-nodejs仓库找不到类似getLang的方法,是因为旧版本的DialogflowApp确实没封装这个快捷方法,但底层的语言信息一直都在请求payload里,直接提取反而更可靠。
内容的提问来源于stack exchange,提问作者Blasco
相关产品推荐
相关产品推荐

