如何将 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;

就是这样!现在您可以在其余的履行代码中使用它。