public async Task <JsonResult> ChatAsync([FromBody] ChatRequestBody body, [FromHeader] string sessionId) { IRestChatSession currentChatSession = null; Domain.ChatBot chatBot = await GetChatBotAsync(); Domain.ChatSession chatSession = null; if (String.IsNullOrEmpty(sessionId)) { chatSession = await _chatSessionService.Create(new Domain.ChatSession() { ChatBotId = chatBot.ChatBotId }); currentChatSession = new RestChatSession(); } else { if (await _chatSessionService.Exists(session => session.ChatSessionId == Int32.Parse(sessionId))) { chatSession = await _chatSessionService.FindBy(session => session.ChatSessionId == Int32.Parse(sessionId)); } else { chatSession = await _chatSessionService.Create(new Domain.ChatSession() { ChatBotId = chatBot.ChatBotId }); } Dictionary <string, string> sessionData = null; if (String.IsNullOrEmpty(chatSession.Data)) { sessionData = new Dictionary <string, string>(); } else { sessionData = JsonConvert.DeserializeObject <Dictionary <string, string> >(chatSession.Data); } currentChatSession = new RestChatSession(chatSession.ChatSessionId, sessionData); } Tuple <string, object> chatBotResponse = _chatBot.FindAnswer(currentChatSession, body.Message); string messageResponse = chatBotResponse.Item1; object responseObject = chatBotResponse.Item2; await SaveSessionDataAsync(currentChatSession); sessionId = chatSession.ChatSessionId.ToString(); if (responseObject != null && responseObject.GetType() == typeof(ExerciseResponse)) { return(Json(new { sessionId = sessionId, chatbotResponse = messageResponse, exercise = responseObject })); } else { return(Json(new { sessionId = sessionId, chatbotResponse = messageResponse })); } }
public async Task <IActionResult> PutChatBot([FromRoute] int id, [FromBody] Domain.ChatBot chatBot) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != chatBot.ChatBotId) { return(BadRequest()); } try { await _chatBotService.Update(chatBot); } catch (DbUpdateConcurrencyException) { if (!(await ChatBotExists(id))) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <IActionResult> PostChatBot([FromBody] Domain.ChatBot chatBot) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await _chatBotService.Create(chatBot); return(CreatedAtAction("GetChatBot", new { id = chatBot.ChatBotId }, chatBot)); }
/// <summary> /// Fetches chatbot or creates if it doesn't exist /// </summary> /// <returns></returns> protected override async Task <Domain.ChatBot> GetChatBotAsync() { Domain.ChatBot chatBot = await base.GetChatBotAsync(); if (String.IsNullOrEmpty(chatBot.Link) || chatBot.Link != _relativeRoute) { chatBot.Link = _relativeRoute; await _chatBotService.Update(chatBot); } return(chatBot); }
/// <summary> /// Fetches chatbot or creates if it doesn't exist /// </summary> /// <returns></returns> protected virtual async Task <Domain.ChatBot> GetChatBotAsync() { Domain.ChatBot chatBotModel = null; if (await _chatBotService.Exists(cb => cb.Name == this._chatBotName)) { chatBotModel = await _chatBotService.FindBy(cb => cb.Name == this._chatBotName); } else { chatBotModel = await _chatBotService.Create(new Domain.ChatBot { Name = this._chatBotName }); } return(chatBotModel); }