这可能不是最好的问题,但是我想知道是否有人可以基于@ sys.duration帮助新人完成工作。例如,如果某人对5年或10个月的提示做出响应,他们将根据这些值得到不同的答复。
我知道,如果有人回答“ 5年”而不是回答“ 3个月...”,这可能会很棘手
我一直在使用内联编辑器,并根据一些演示使用了以下内容,并且在网上找到了这样的内容:
const functions = require('firebase-functions');
const {dialogflow} = require('actions-on-google');
const TIME_INTENT = "Time";
const LENGTH_OF_TIME_ENTITY = "LengthOfTime";
const app = dialogflow();
app.intent(TIME_INTENT, (conv) => {
const length_of_service = conv.parameters[LENGTH_OF_TIME_ENTITY].toLowerCase();
if (length_of_time > 5) {
conv.ask("Response 1");
} else {
conv.ask("Response 2");
}
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
答案 0 :(得分:3)
看起来您在正确的轨道上。我有几个建议:
LENGTH_OF_TIME_ENTITY
的名称更改为LENGTH_OF_TIME_PARAMETER
。实体有点像用户输入所属的类别,在您的情况下为@ sys.duration。参数是实际输入。{"amount":10,"unit":"min"}
的对象进入,因此您需要确保您正在处理以这种形式的对象。在使用系统实体时,Dialogflow docs是很好的参考。将它们放在一起,您将执行以下操作:
const functions = require('firebase-functions');
const {dialogflow} = require('actions-on-google');
const moment = require('moment');
const TIME_INTENT = "Time";
const LENGTH_OF_TIME_ENTITY = "LengthOfTime";
const CUTOFF = moment.duration(5, "month");
const app = dialogflow();
app.intent(TIME_INTENT, (conv) => {
const input = conv.parameters[LENGTH_OF_TIME_ENTITY];
const length_of_service = moment.duration(input.amount, input.unit);
if (length_of_service.asSeconds() > CUTOFF.asSeconds()) {
conv.ask("Response 1");
} else {
conv.ask("Response 2");
}
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
您可能需要进行一些转换,以将Dialogflow使用的单位字符串转换为Moment.js期望的形式,但这应该非常简单。我没有彻底检查任何一个的单位值,但遵循以下原则:
const toMomentUnit = (unit) => {
switch(unit) {
case "min":
return "minutes";
case "day":
return "days";
case "mo":
return "months";
case "year":
return "years";
default:
throw new Error("Unrecognized unit");
}
};