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

如何捕获Dialogflow接收的超256字符消息并引导至人工客服?

当然可行!我之前帮好几个开发者处理过类似的场景,核心思路就是在请求到达Dialogflow之前加一层拦截,把超长消息提前过滤出来单独处理,不让它们进入Dialogflow的流程,这样就不会触发它的字符长度报错了。

具体实现方法

1. 在Facebook Webhook中转层做前置拦截

如果你的机器人之前是通过Facebook Webhook直接对接Dialogflow的,现在需要改成用自己的后端服务做中转:

  • 让Facebook把用户消息先发送到你的后端接口
  • 在后端里先解析请求体,提取用户输入的message.text内容
  • 判断这个文本的字符长度是否超过256:
    • 如果超过,直接调用Facebook的消息API给用户返回引导转人工的回复,不用把请求传给Dialogflow
    • 如果长度正常,再把请求转发给Dialogflow,拿到Dialogflow的回复后再返回给Facebook

给你一个Node.js/Express的简单示例代码:

const express = require('express');
const fetch = require('node-fetch');
const app = express();
app.use(express.json());

app.post('/facebook-webhook', async (req, res) => {
  // 提取用户消息和发送者ID
  const messagingEvent = req.body.entry[0].messaging[0];
  const userId = messagingEvent.sender.id;
  const userMessage = messagingEvent.message?.text;

  // 检查消息长度是否超限
  if (userMessage && userMessage.length > 256) {
    // 直接回复引导转人工
    await sendFacebookMessage(userId, "抱歉,你的消息过长啦,我暂时无法处理,请联系在线人工客服哦~");
    return res.sendStatus(200);
  }

  // 消息正常,转发给Dialogflow处理
  const dialogflowRes = await fetch(`https://dialogflow.googleapis.com/v2/projects/${YOUR_PROJECT_ID}/agent/sessions/${userId}:detectIntent`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${YOUR_DIALOGFLOW_TOKEN}`
    },
    body: JSON.stringify({
      queryInput: { text: { text: userMessage, languageCode: 'zh-CN' } }
    })
  });
  const dialogflowData = await dialogflowRes.json();
  const botReply = dialogflowData.queryResult.fulfillmentText;

  // 把Dialogflow的回复发给用户
  await sendFacebookMessage(userId, botReply);
  res.sendStatus(200);
});

// 封装发送消息到Facebook的函数
async function sendFacebookMessage(userId, text) {
  const fbToken = process.env.FACEBOOK_PAGE_ACCESS_TOKEN;
  await fetch(`https://graph.facebook.com/v18.0/me/messages?access_token=${fbToken}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      recipient: { id: userId },
      message: { text }
    })
  });
}

app.listen(3000, () => console.log('Server running on port 3000'));

2. 兜底方案:Dialogflow错误处理配置

如果担心前置拦截有漏网之鱼,可以在Dialogflow里配置错误处理作为补充:

  • 进入Dialogflow控制台,点击左侧菜单的设置 → 错误处理
  • 添加一个新的错误处理规则,选择触发条件为“输入长度超过限制”
  • 设置对应的回复内容为引导转人工的话术

不过要注意:Dialogflow对超长输入可能直接拒绝请求,不会进入错误处理流程,所以这个只能作为补充,核心还是靠前置拦截。

3. 关键注意点

  • 务必确保Facebook Webhook的接收地址是你的后端接口,而不是Dialogflow的直接集成地址。如果之前是直接用Dialogflow绑定Facebook,需要解绑后重新配置到你的后端。
  • 处理Facebook请求时要验证签名,避免恶意请求(可以参考Facebook官方文档的签名验证方法)。
  • 测试时要覆盖边界情况:比如刚好256字符、257字符、空消息等,确保拦截逻辑稳定。

内容的提问来源于stack exchange,提问作者chocolate cake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:25:43