Firebase-google dialogflow集参数

Firebase-google dialogflow集参数,firebase,dialogflow-es,Firebase,Dialogflow Es,我正在谷歌Dialogflow代理上工作。基本上,代理由第三方系统调用,我能够将所有参数解析回该第三方系统 这是一个简单的约会示例应用程序,它在谷歌日历中添加了一个条目。但如果已经有预约,它会通知用户 根据createCalendarEvent的返回,我想在Dialogflow中设置一个变量,我可以将该变量解析为调用该bot的系统 代码如下: /** *2017谷歌公司版权所有。保留所有权利。 * *根据Apache许可证2.0版(以下简称“许可证”)获得许可; *除非遵守许可证,否则不得使用

我正在谷歌Dialogflow代理上工作。基本上,代理由第三方系统调用,我能够将所有参数解析回该第三方系统

这是一个简单的约会示例应用程序,它在谷歌日历中添加了一个条目。但如果已经有预约,它会通知用户

根据createCalendarEvent的返回,我想在Dialogflow中设置一个变量,我可以将该变量解析为调用该bot的系统

代码如下:

/**
*2017谷歌公司版权所有。保留所有权利。
*
*根据Apache许可证2.0版(以下简称“许可证”)获得许可;
*除非遵守许可证,否则不得使用此文件。
*您可以通过以下方式获得许可证副本:
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*除非适用法律要求或书面同意,软件
*根据许可证进行的分发是按“原样”进行分发的,
*无任何明示或暗示的保证或条件。
*请参阅许可证以了解管理权限和权限的特定语言
*许可证下的限制。
*/
"严格使用",;
const functions=require('firebase-functions');
const{google}=require('googleapis');
const{WebhookClient}=require('dialogflow-fulfillment');
//在下面输入您的日历ID和服务帐户。
const calendar id='1〕756o1cgnf2gpvm3iefod0npk34@group.calendar.google.com'; // 例子:6ujc6j6rgfk02cp02vg6h38cs0@group.calendar.google.com
常量服务帐户={
“类型”:“服务账户”,
“项目id”:“任命和履行”,
“私钥id”:“---------------------------”,
“私钥”:“---------------------”,
“客户电子邮件”:appointmentandfulfilment@appointmentandfulfilment.iam.gserviceaccount.com",
“客户id”:“-------”,
“auth_uri”:https://accounts.google.com/o/oauth2/auth",
“令牌uri”:https://oauth2.googleapis.com/token",
“身份验证提供程序\u x509\u证书\u url”:https://www.googleapis.com/oauth2/v1/certs",
“客户端\u x509\u证书\u url”:https://www.googleapis.com/robot/v1/metadata/x509/appointmentandfulfilment%40appointmentandfulfilment.iam.gserviceaccount.com"
}; // JSON对象看起来像:{“type”:“service_account”,…}
//设置Google日历服务帐户凭据
const serviceAccountAuth=new google.auth.JWT({
电子邮件:serviceAccount.client_电子邮件,
密钥:serviceAccount.private_密钥,
范围:'https://www.googleapis.com/auth/calendar'
});
const calendar=google.calendar('v3');
process.env.DEBUG='dialogflow:';//它支持lib调试语句
常数时区='欧洲/柏林';//把它改成你的时区
常量时区偏移='+01:00';//将其更改为您的时区偏移
const isappointsuccessful=false;
exports.dialogflowFirebaseFulfillment=functions.https.onRequest((请求,响应)=>{
const-agent=new-WebhookClient({request,response});
功能预约(代理){
//console.log(“函数启动”);
//console.log(“约会日期字符串=“+agent.parameters.date”);
//console.log(“约会日期字符串=“+agent.parameters.time”);
//使用Dialogflow的日期和时间参数创建Javascript日期实例、“dateTimeStart”和“dateTimeEnd”,
//用于指定约会的时间。
const appointmentDuration=1;//将约会的长度定义为一小时。
const dateTimeStart=convertParametersDate(agent.parameters.date,agent.parameters.time);
const dateTimeEnd=addHours(dateTimeStart,appointmentDuration);
const appointmentTimeString=getLocaleTimeString(dateTimeStart);
const appointmentDateString=GetLocaleDeTestRing(dateTimeStart);
//检查时间段的可用性,如果日历上有时间段,则设置约会
返回createCalendarEvent(dateTimeStart,dateTimeEnd)。然后(()=>{
add(`明白了。我已将您的约会安排在${appointmentDateString}的${appointmentTimeString}。再见。`);
}).catch(()=>{
add(`对不起,我们在${appointmentTimeString}预订了${appointmentDateString}。还有什么我能为您做的吗?`);
});
}
让intentMap=newmap();
intentMap.set('makeAppointment',makeAppointment);//它将意图'makeAppointment'映射到函数'makeAppointment()'
代理handleRequest(intentMap);
});
函数createCalendarEvent(dateTimeStart、dateTimeEnd){
返回新承诺((解决、拒绝)=>{
calendar.events.list({//列出指定时间段内的所有事件
auth:serviceAccountAuth,
calendarId:calendarId,
timeMin:dateTimeStart.toISOString(),
timeMax:dateTimeEnd.toISOString()
},(错误,日历响应)=>{
//检查给定指定时间段的日历上是否存在任何事件
if(err | | calendarResponse.data.items.length>0){
拒绝(err | | new Error(“请求的时间与另一个约会冲突”);
}否则{
//为请求的时间段创建事件
插入({auth:serviceAccountAuth,
calendarId:calendarId,
资源:{摘要:'约会',
开始:{dateTime:dateTimeStart},
结束:{dateTime:dateTimeEnd}
},(错误,事件)=>{
err?拒绝(err):解决(事件);
}
);
}
});
});
}
//接收Dialogflow的“日期”和“时间”参数并创建日期实例的辅助函数。
函数转换器参数数据(日期、时间){
返回新日期(Date.parse(Date.split('T')[0]+'T'+time.split('T')[1].split('T'))[0]+timeZoneOffset));
}
//将整数值'hoursToAdd'添加到日期实例'dateObj'并返回新数据实例的辅助函数。
功能添加小时数(dateObj,hoursToAdd){
返回新日期(新日期(dateObj).setHours(dateObj.getHours()+hoursToAdd)
agent.context.set({
  'name':'return-values',
  'lifespan': 5,
  'parameters':{
    'successful':'true'
    }
});
const returnValuesContext = agent.context.get('return-values');
const successful = returnValuesContext.parameters.successful;