public async Task <Result> GetSpeechAsync(Activity message, Sesion sesion, IDialogContext context) { Result result = new Result(); try { string fileSavePath = System.Web.HttpContext.Current.Server.MapPath("~/Dialogflow/") + AppConstant.DialogFlow.FilePrivateKeyIdJson; if (System.IO.File.Exists(fileSavePath)) { GoogleCredential cred = GoogleCredential.FromFile(fileSavePath); Channel channel = new Channel(SessionsClient.DefaultEndpoint.Host, SessionsClient.DefaultEndpoint.Port, cred.ToChannelCredentials()); SessionsClient client = SessionsClient.Create(channel); QueryInput query = new QueryInput { Text = new TextInput { Text = message.Text, LanguageCode = "es-es" } }; //string sessionId = Guid.NewGuid().ToString(); //string projectId = "upc-chatbot"; //TODO: Move to AppSettings string sessionId = sesion.IdSesion.ToString(); string projectId = ConfigurationManager.AppSettings["ApiAiProjectId"].ToString(); SessionName sessionName = new SessionName(projectId, sessionId); RepeatedField <Context> outputContexts = new RepeatedField <Context>(); List <DialogFlowContext> dialogFlowContexts = new List <DialogFlowContext>(); if (context.UserData.ContainsKey("OutputContexts")) { string outputContextsGetValue = context.UserData.GetValue <string>("OutputContexts"); if (!string.IsNullOrEmpty(outputContextsGetValue)) { dialogFlowContexts = JsonConvert.DeserializeObject <List <DialogFlowContext> >(outputContextsGetValue); foreach (var item in dialogFlowContexts) { Struct s = new Struct(); foreach (var p in item.Parameters) { Value v = new Value { StructValue = null, ListValue = null, NumberValue = 0D, StringValue = p.Value //This order position matters!!! }; s.Fields.Add(p.Key, v); } outputContexts.Add(new Context { Name = item.Name, LifespanCount = item.LifespanCount, Parameters = s }); } } } DetectIntentRequest detectIntentRequest = new DetectIntentRequest { SessionAsSessionName = sessionName, QueryInput = query, QueryParams = new QueryParameters() }; if (outputContexts.Count > 0) { detectIntentRequest.QueryParams.Contexts.AddRange(outputContexts); } DetectIntentResponse dialogFlow = client.DetectIntent(detectIntentRequest); QueryResult response = dialogFlow.QueryResult; string outputContextsSetValue = response.OutputContexts.ToString(); context.UserData.SetValue("OutputContexts", outputContextsSetValue); await EvaluateDialogFlowResponse(response, result, message, sesion); } } catch (Exception ex) { Console.WriteLine(ex.Message); BaseData.LogError(ex); } return(result); }