Flutter 如何将Firebase用户UID传递给Dialogflow实现以保存数据
我计划在“medic_提醒”集合中为具有uid的特定用户保存数据。但是我不知道如何通过我的应用程序传递当前登录的用户uid 以下是Dialogflow实现的index.js,我已经在这里指定了用户uid:Flutter 如何将Firebase用户UID传递给Dialogflow实现以保存数据,flutter,dialogflow-es,dialogflow-es-fulfillment,Flutter,Dialogflow Es,Dialogflow Es Fulfillment,我计划在“medic_提醒”集合中为具有uid的特定用户保存数据。但是我不知道如何通过我的应用程序传递当前登录的用户uid 以下是Dialogflow实现的index.js,我已经在这里指定了用户uid: async function handlerSaveFromDB(agent){ const medicName = agent.parameters.medicName; const quantityTime = agent.parameters.quantiy;
async function handlerSaveFromDB(agent){
const medicName = agent.parameters.medicName;
const quantityTime = agent.parameters.quantiy;
const dateEnded = agent.parameters.dateEnded;
const dosage = agent.parameters.dosage;
const timeFormat = agent.parameters.time;
const time = new Date(timeFormat);
const minutes = time.getMinutes();
const hour = time.getHours() -16;
const ref = db.collection('users').doc('wM4uxxxxxxx').collection('medic_reminder').doc('5');
const data = {
dateEnded: new Date(dateEnded),
dosage: dosage,
hour: hour,
howManyTimeDay: 0,
id: '5',
medName: medicName,
min: minutes,
quantityTime: quantityTime,
status: true
};
const res = await ref.set(data);
response.json({
fulfillmentText: `Your reminder was saved`
});
}
这是我的Dialogflow请求:
Future<AIResponse> detectIntent(String query) async {
String queryParams = '{"resetContexts": ${this.resetContexts} }';
if (payload.isNotEmpty) {
queryParams =
'{"resetContexts": ${this.resetContexts}, "payload": $payload}';
}
String body =
'{"queryInput":{"audioConfig":{"languageCode":"$language"}},"outputAudioConfig":{"audioEncoding":"OUTPUT_AUDIO_ENCODING_LINEAR_16"}, "inputAudio":"$query","queryParams": $queryParams}';
var response = await authGoogle.post(_getUrl(),
headers: {
HttpHeaders.authorizationHeader: "Bearer ${authGoogle.getToken}"
},
body: body);
return AIResponse(body: json.decode(response.body));
}
}
未来检测(字符串查询)异步{
字符串queryParams='{“resetContexts”:${this.resetContexts}}';
if(有效负载.isNotEmpty){
槲寄生=
“{”resetContexts:${this.resetContexts},“payload:$payload}”;
}
弦体=
{“queryInput”:{“audioConfig”:{“languageCode”:“$language”},{“outputAudioConfig”:{“audioEncoding”:“OUTPUT_AUDIO_ENCODING_LINEAR_16”},“inputAudio”:“$query”,“queryParams”:$queryParams}”;
var response=wait authGoogle.post(_getUrl(),
标题:{
HttpHeaders.authorizationHeader:“承载者${authGoogle.getToken}”
},
身体:身体),;
返回AIResponse(body:json.decode(response.body));
}
}
请帮助我提供有关如何获取登录用户uid的任何建议。谢谢首先,您需要将uid添加到名为payload的变量中。根据您的代码,负载似乎是一个全局变量,因此如果它当前为空,只需继续添加用户(请参阅了解如何从Firebase获取uid):
String uId=“uxxx”//这是一个示例变量,您的用户来自Firebase
字符串有效负载=“{”uId:“$uId”}”;//将其添加到有效负载字符串中
在颤振代码中,您已经准备好在Detectinent请求中发送有效载荷信息,因此无需更改该部分:
if(payload.isNotEmpty){
槲寄生=
“{”resetContexts:${this.resetContexts},“payload:$payload}”;
}
最后,在您的实现代码中,您似乎正在使用,因此您需要访问originalRequest属性中的有效负载以获取uId:
让uId=agent.originalRequest.payload.uId;
就这样!现在,您可以在履行代码的其余部分使用它。首先需要将uid添加到名为payload的变量中。根据您的代码,负载似乎是一个全局变量,因此如果它当前为空,只需继续添加用户(请参阅了解如何从Firebase获取uid):
String uId=“uxxx”//这是一个示例变量,您的用户来自Firebase
字符串有效负载=“{”uId:“$uId”}”;//将其添加到有效负载字符串中
在颤振代码中,您已经准备好在Detectinent请求中发送有效载荷信息,因此无需更改该部分:
if(payload.isNotEmpty){
槲寄生=
“{”resetContexts:${this.resetContexts},“payload:$payload}”;
}
最后,在您的实现代码中,您似乎正在使用,因此您需要访问originalRequest属性中的有效负载以获取uId:
让uId=agent.originalRequest.payload.uId;
就这样!现在,您可以在履行代码的其余部分使用它。您的应用程序中应该有您的用户id,该应用程序正在与来自Flatter的Dialogflow进行通信。在Detectinent请求中,您可以使用中的
有效负载
字段发送履行信息。您可以分享用于从Flatter与dialogflow通信的代码吗?谢谢@tlaquetzal,我用dialogflow请求更新了问题。您的应用程序中应该有您的用户id,该应用程序正在从Flatter与dialogflow通信。在Detectinent请求中,您可以使用中的有效负载
字段发送履行信息。您能分享一下用于从Flatter与dialogflow通信的代码吗?谢谢@tlaquetzal,我用dialogflow请求更新了这个问题。非常感谢您的帮助:)。成功了。太好了,我很乐意帮忙,欢迎来到Stack Overflow。如果这个答案或其他任何一个解决了你的问题,请考虑将它标记为接受,非常感谢你的帮助:成功了。太好了,我很乐意帮忙,欢迎来到Stack Overflow。如果这个答案或其他任何一个解决了你的问题,请考虑将它标记为接受。