如何将 Firebase 用户 UID 传递给 Dialogflow fulfillment 以便能够保存数据
How to pass Firebase user UID to Dialogflow fulfillment to be able to save data
我计划将数据保存在“medic_reminder”集合中,用于具有 uid 的特定用户。但是我不知道如何通过我的应用程序传递当前登录的用户 uid。
这里是 Dialogflow fulfillment 的 index.js,这里我已经指定了用户 uid:
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));
}
}
请帮我提供有关如何获取登录用户 uid 的任何建议。谢谢
首先,您需要将uid 添加到名为payload 的变量中。根据您的代码,payload 似乎是一个全局变量,因此如果它当前为空,请继续添加用户(请参阅 了解如何从 Firebase 获取 uid):
String uId = "uxxxx"; // This is an example variable, here you'll have your user from Firebase
String payload = '{"uId":"$uId"}'; // Add it to a payload string
在你的 flutter 代码中,你已经准备好在 detectIntent 请求中发送 payload 信息,所以不需要更改那部分:
if (payload.isNotEmpty) {
queryParams =
'{"resetContexts": ${this.resetContexts}, "payload": $payload}';
}
最后,在您的实现代码中,您似乎正在使用 dialogflow-fulfillment-nodejs
library,因此您需要访问 originalRequest 属性 中的负载以获得 uId:
let uId = agent.originalRequest.payload.uId;
就是这样!现在您可以在其余的履行代码中使用它。
我计划将数据保存在“medic_reminder”集合中,用于具有 uid 的特定用户。但是我不知道如何通过我的应用程序传递当前登录的用户 uid。
这里是 Dialogflow fulfillment 的 index.js,这里我已经指定了用户 uid:
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));
}
}
请帮我提供有关如何获取登录用户 uid 的任何建议。谢谢
首先,您需要将uid 添加到名为payload 的变量中。根据您的代码,payload 似乎是一个全局变量,因此如果它当前为空,请继续添加用户(请参阅
String uId = "uxxxx"; // This is an example variable, here you'll have your user from Firebase
String payload = '{"uId":"$uId"}'; // Add it to a payload string
在你的 flutter 代码中,你已经准备好在 detectIntent 请求中发送 payload 信息,所以不需要更改那部分:
if (payload.isNotEmpty) {
queryParams =
'{"resetContexts": ${this.resetContexts}, "payload": $payload}';
}
最后,在您的实现代码中,您似乎正在使用 dialogflow-fulfillment-nodejs
library,因此您需要访问 originalRequest 属性 中的负载以获得 uId:
let uId = agent.originalRequest.payload.uId;
就是这样!现在您可以在其余的履行代码中使用它。