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

Dialogflow内联编辑器用Card组件时出现MalformedResponse错误求助

解决Dialogflow中Card组件导致的MalformedResponse错误

我来帮你搞定这个问题!你遇到的MalformedResponse: Failed to parse Dialogflow response into AppResponse because of empty speech response错误,根源很明确:Dialogflow要求每一个Webhook响应必须包含基础的语音/文本输出内容,哪怕你已经添加了Card这类富媒体组件。

问题分析

看你代码里的getJobs Intent处理逻辑,当用户输入数字1时,你只调用了conv.ask(new Card(...)),没有同时提供可被语音播报的文本内容。Dialogflow的响应规范里,speech或displayText字段是必填项,仅传递富媒体组件会导致响应结构缺失核心字段,从而触发解析错误。

修复后的代码

只需要在传递Card的同时,补充基础文本响应即可,修改后的代码如下:

'use strict';
// Import the Dialogflow module from the Actions on Google client library.
const {dialogflow, Card, Suggestion} = require('actions-on-google');
// Import the firebase-functions package for deployment.
const functions = require('firebase-functions');
// Instantiate the Dialogflow client.
const app = dialogflow({debug: true});

// Handle the Dialogflow intent named 'getJobs'.
// The intent collects a parameter named 'number'.
app.intent('getJobs', (conv, {number}) => {
  const jobNum = number;
  // Respond with the user's lucky number and end the conversation.
  if (number == 1) {
    // 先添加基础文本响应,再传入Card组件
    conv.ask('这是对应数字1的职位信息卡片', new Card({
      title: `Title: this is a card title`,
      imageUrl: 'https://dialogflow.com/images/api_home_laptop.svg',
      text: `This is the body text of a card. You can even use line\n breaks and emoji! 💁`,
      buttonText: '查看详情',
      buttonUrl: 'https://docs.dialogflow.com/'
    }));
    // 可选:添加建议选项提升交互体验
    conv.ask(new Suggestion('查看其他职位'));
  } else if (number == 2) {
    conv.close('camera on');
  } else {
    conv.close('unknown number');
  }
});

//Set the DialogflowApp object to handle the HTTPS POST request.
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

关键修改点

  1. 补充基础文本响应:在conv.ask()中先传递字符串形式的文本内容,这个内容会作为语音播报的内容,同时也是Dialogflow响应中必填的speech字段来源。
  2. 简化依赖导入:把Card和Suggestion直接从actions-on-google包导入,不需要重复引入dialogflow-fulfillment的相关模块(你当前的代码里同时用了两套SDK,容易混淆)。

额外提示

开启debug: true后,你可以在Firebase Functions的日志里看到完整的Webhook响应结构,确认是否包含了speech字段,这对排查类似问题非常有帮助。

内容的提问来源于stack exchange,提问作者정헌희

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:34:06