Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何将Firebase用户UID传递给Dialogflow实现以保存数据_Flutter_Dialogflow Es_Dialogflow Es Fulfillment - Fatal编程技术网

Flutter 如何将Firebase用户UID传递给Dialogflow实现以保存数据

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;

我计划在“medic_提醒”集合中为具有uid的特定用户保存数据。但是我不知道如何通过我的应用程序传递当前登录的用户uid

以下是Dialogflow实现的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));
  }
}
未来检测(字符串查询)异步{
字符串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。如果这个答案或其他任何一个解决了你的问题,请考虑将它标记为接受。