You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dialogflow集成Skype/Facebook Messenger未返回自定义Fulfillment响应问题

问题分析与解决方案

我帮你梳理下这个问题的核心原因,以及对应的解决办法:

为啥Skype和Messenger只返回默认响应?

你当前的代码用了actions-on-google这个库来生成响应,但这个库是专门给Google Assistant定制的——它输出的响应格式只符合Google生态的规范,Skype、Facebook Messenger这类第三方集成根本看不懂这种格式,所以它们会直接忽略你的Webhook返回内容,转而用你在Intent里设置的默认静态文本。而Dialogflow模拟器和Google Actions模拟器能正常工作,正是因为它们本身就是适配Google Assistant格式的。

解决办法:改用Dialogflow标准Webhook响应格式

要让第三方集成也能正确获取你的自定义响应,你需要抛弃actions-on-google,直接按照Dialogflow的通用Webhook规范来返回响应。核心是用fulfillmentText(通用文本)或者fulfillmentMessages(多平台自定义消息)字段来传递内容。

修改后的完整代码

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.use(bodyParser.json())
app.set('port', (process.env.PORT || 5000))

const LANGUAGE_INTENT = 'Languages';
const LANGUAGE_TYPE_ENTITY = 'LanguageType';

app.post('/webhook', (req, res) => {
    console.log(req.body);
    const intentName = req.body.queryResult.intent.displayName;
    
    // 处理Languages意图
    if (intentName === LANGUAGE_INTENT) {
        const quote_type = req.body.queryResult.parameters[LANGUAGE_TYPE_ENTITY]?.toLowerCase();
        let responseText = "";
        
        switch(quote_type) {
            case "telugu":
                responseText = "Telugu, This response is for telugu";
                break;
            case "english":
                responseText = "English, this is response is for english";
                break;
            case "hindi":
                responseText = "Hindi, this response is for Hindi";
                break;
            default:
                responseText = "Can't understand bro";
        }
        
        // 返回Dialogflow标准响应格式
        res.json({
            fulfillmentText: responseText
            // 如果需要给不同平台做定制,可以用fulfillmentMessages
            // 示例:给Skype单独设置消息
            // fulfillmentMessages: [
            //     {
            //         platform: "SKYPE",
            //         text: {
            //             text: [responseText]
            //         }
            //     },
            //     {
            //         platform: "FACEBOOK",
            //         text: {
            //             text: [responseText]
            //         }
            //     }
            // ]
        });
    } 
    // 处理其他未匹配的意图
    else {
        res.json({
            fulfillmentText: "Sorry, I didn't get that."
        });
    }
});

app.listen(app.get('port'), function () {
    console.log('* Webhook service is listening on port:' + app.get('port'));
});

关键细节说明

  • 移除了actions-on-google相关的所有依赖和代码,直接处理Dialogflow的原始请求。
  • fulfillmentText是所有集成平台都能识别的通用字段,用它返回的文本会被Skype、Messenger等平台直接展示。
  • 如果需要给特定平台做样式或内容定制,可以用fulfillmentMessages字段,指定platform参数来区分不同集成,不过fulfillmentText已经能满足基础的文本响应需求。

最后再检查两个点

  1. 打开你的Intent配置页面,在「响应」标签下,确保Webhook调用的优先级高于默认静态响应,不要让默认响应覆盖了Webhook的内容。
  2. 重新部署修改后的Webhook,然后在Dialogflow的「Fulfillment」页面测试一下URL的连通性,确保服务正常运行。

内容的提问来源于stack exchange,提问作者Baji shaik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:58:32