Я планирую сохранять данные в коллекции "medic_reminder" для конкретного пользователя с uid. Но я не знаю, как передать пользовательский идентификатор, который в настоящее время входит в мое приложение.
Вот index.js для выполнения Dialogflow, здесь я уже указываю 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 пользователя, вошедшего в систему. Спасибо
Спасибо @tlaquetzal, я обновил вопрос с запросом Dialogflow.
Сначала вам нужно добавить uid в переменную с именем payload. Судя по вашему коду, полезная нагрузка является глобальной переменной, поэтому, если в данный момент она пуста, просто добавьте пользователя (см. этот вопрос, чтобы узнать, как получить uid из Firebase):
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
В вашем флаттер-коде вы уже готовы отправить информацию о полезной нагрузке в запросеDetectIntent, поэтому нет необходимости изменять эту часть:
if (payload.isNotEmpty) {
queryParams =
'{"resetContexts": ${this.resetContexts}, "payload": $payload}';
}
Наконец, в вашем коде исполнения кажется, что вы используете библиотеку dialogflow-fulfillment-nodejs, поэтому вам нужно получить доступ к полезной нагрузке в свойстве originalRequest, чтобы получить uId:
let uId = agent.originalRequest.payload.uId;
Вот и все! Теперь вы можете использовать его в остальной части кода выполнения.
Большое вам спасибо за вашу помощь :) . Это сработало.
Это здорово, я рад помочь и добро пожаловать в Stack Overflow. Если этот или любой другой ответ решил вашу проблему, отметьте его как принятый.
У вас должен быть идентификатор пользователя в вашем приложении, которое взаимодействует с Dialogflow из флаттера. В запросе detectIntent вы можете использовать поле
payload
в QueryParameters для отправки информации для выполнения. Можете ли вы поделиться кодом, используемым для связи с диалоговым потоком из флаттера?