Dialogflow中agent.add()无输出、API调用无返回问题排查咨询
问题排查与修复方案
核心错误原因
- 你调用的万智牌单卡查询API返回值
result.data是单个卡片对象,不是数组,调用数组方法map()会直接抛出JS异常,Dialogflow Fulfillment遇到未捕获的异常时会默认返回Not available,完全匹配你遇到的现象。 - 即使你调用的是列表查询接口,API返回结构是
{"cards": [卡片数组]},直接用result.data.map也不对,需要先取result.data.cards才能拿到数组。 - 你当前没有添加异常捕获逻辑,报错后没有日志输出,自然无法定位问题。
修正后的代码示例
function rhymingWordHandler(agent){ const word = agent.parameters.word; console.log('传入的word参数值:', word); agent.add(`Here is the name of ${word}`); return axios.get(`https://api.magicthegathering.io/v1/cards/${word}`) .then((result) => { // 单卡查询直接取result.data.card即可,不需要遍历 agent.add(result.data.card.name); // 如果是列表查询接口,用下面的写法 // result.data.cards.forEach(card => { // agent.add(card.name); // }); }) .catch(err => { // 打印错误日志方便定位 console.error('接口请求出错:', err); agent.add('查询卡片信息失败,请稍后重试'); }); }
其他需要检查的点
- 先手动拼接请求URL在浏览器中访问,确认
word参数是合法的卡片ID,避免参数错误导致接口返回404/500。 - 确认当前Intent已经开启了Webhook调用,且handler正确绑定了
rhymingWordHandler函数。 - 不要降级Node版本到8,Dialogflow Fulfillment现在对Node 10及以上版本的兼容性更好,axios 0.21.1也完全支持Node 10+,降级反而可能引入其他兼容性问题。
内容的提问来源于stack exchange,提问作者SCHWIDola
相关产品推荐
相关产品推荐

