public async Task <ActionResult> Post([FromBody] Activity activity, string partner, string context, string channel, string userId, bool dummyMode, [FromServices] ChatWeb.Services.ChatEngine chatEngine) { //set the property to our new object log4net.LogicalThreadContext.Properties["interactionId"] = Guid.NewGuid().ToString(); log4net.LogicalThreadContext.Properties["clientIp"] = NetworkHelpers.GetClientIP(HttpContext); log4net.LogicalThreadContext.Properties["SessionData"] = null; if (String.IsNullOrEmpty(channel)) { channel = activity.ChannelId; } try { logger.DebugFormat("Internal: MessagesController Request: {0}", JsonConvert.SerializeObject(activity)); Activity reply = null; switch (activity.Type) { case ActivityTypes.Message: { if (String.Equals(activity.Text, "-help", StringComparison.OrdinalIgnoreCase)) { reply = activity.CreateReply(HelpText, "en"); } else { reply = await ProcessUserMessage(activity, partner, context, channel, userId, dummyMode, chatEngine); } break; } case ActivityTypes.ConversationUpdate: if (!activity.MembersAdded.Any(m => m.Id != activity.Recipient.Id)) { break; } // Start new chat reply = await ProcessUserMessage(activity, partner, context, channel, userId, dummyMode, chatEngine); break; default: HandleSystemMessage(activity); break; } if (reply != null) { ConnectorClient connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); await connectorClient.Conversations.ReplyToActivityAsync(reply); } } catch (Exception ex) { logger.Error("Internal: MessagesController.Post", ex); } return(Ok()); }
public async Task <ActionResult <ChatResponse> > Post([FromServices] ChatWeb.Services.ChatEngine chatEngine, [FromBody] ChatRequest chatRequest, string partner = null) { // NOTE: We are requiring the partner in the URL so an ALB can easily parse the partner for proper routing through proxies. if (chatRequest == null) { logger.Debug("Chat request is null"); return(BadRequest()); } if (chatRequest.ClientData == null) { chatRequest.ClientData = new ChatClientData(); } chatRequest.ClientData.ClientIp = NetworkHelpers.GetClientIP(HttpContext); chatRequest.ClientData.UserAgent = HttpContext.Request.Headers["User-Agent"]; // Ignore debug data if not allowed if (!chatConfiguration.AllowDebugMode) { chatRequest.DebugData = null; } bool trustedClient = (!String.IsNullOrEmpty(chatConfiguration.TrustedClientKey) && (HttpContext.Request.Headers["x-api-key"] == chatConfiguration.TrustedClientKey)); if ((chatRequest.TrustedClientData != null) && !trustedClient) { logger.WarnFormat("TrustedClientData was present but stripped since the API key did not match."); chatRequest.TrustedClientData = null; } log4net.LogicalThreadContext.Properties["interactionId"] = Guid.NewGuid().ToString(); log4net.LogicalThreadContext.Properties["clientIp"] = chatRequest.ClientData.ClientIp; if (String.IsNullOrEmpty(partner) || partner != chatRequest.Partner) { logger.Warn("Request does not contain the partner in URL parameter"); //return BadRequest("partner is required in URL"); } try { ChatResponse response = null; // Make initial call to get chat Id if missing and userinput was sent if (String.IsNullOrEmpty(chatRequest.ChatId) && !String.IsNullOrEmpty(chatRequest.UserInput)) { response = await chatEngine.HandleRequest(chatRequest); chatRequest.ChatId = response.ChatId; } if (response == null || String.IsNullOrEmpty(response.Status.Error)) { response = await chatEngine.HandleRequest(chatRequest); } if (!trustedClient) { response.TrustedClientData = null; } return(Ok(response)); } catch (Exception ex) { logger.Error("Post failed.", ex); } return(BadRequest()); }