Пример #1
0
        public ChatEngineFramework()
        {
            Amazon.AWSConfigs.AWSRegion      = "us-east-1";
            Amazon.AWSConfigs.AWSProfileName = "";

            ChatConfiguration chatConfiguration = new ChatConfiguration();
            AWSDynamoService  dataService       = new AWSDynamoService(chatConfiguration);
            FlowStepProvider  flowStepProvider  = new FlowStepProvider(dataService);

            chatEngine = new ChatWeb.Services.ChatEngine(null, chatConfiguration, null, dataService, null, null, null, null, null, null, null, null, flowStepProvider);
        }
Пример #2
0
        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());
        }
Пример #3
0
        private async Task <Activity> ProcessUserMessage(Activity activity, string partner, string context, string channel, string userId, bool dummyMode, ChatWeb.Services.ChatEngine chatEngine)
        {
            //set the property to our new object
            log4net.LogicalThreadContext.Properties["interactionId"] = Guid.NewGuid().ToString();

            var                 sessionRawData = memCacheService.GetObject <string>(activity.Conversation.Id);
            ChatRequest         request        = null;
            BotFrameworkSession sessionData    = null;

            if ((sessionRawData == null) || ((activity.Text != null) && (activity.Text.StartsWith("-new"))))
            {
                sessionData = new BotFrameworkSession();
                request     = CreateNewChat(activity, partner, context, channel, userId, dummyMode);

                if (request == null)
                {
                    return(activity.CreateReply("Unsupported partner", "en"));
                }
            }
            else
            {
                sessionData = JsonConvert.DeserializeObject <BotFrameworkSession>(sessionRawData);

                request = new ChatRequest()
                {
                    ChatId     = sessionData.ChatId,
                    UserInput  = activity.Text,
                    Channel    = channel,
                    UserName   = activity.From.Name,
                    Partner    = sessionData.Partner,
                    Context    = sessionData.Context,
                    DebugData  = sessionData.DebugData,
                    ClientData = new ChatClientData {
                        ClientName = "Bot Connector", ClientVersion = "0.0.0.", ClientIp = "0.0.0.0"
                    }
                };
            }

            ChatResponse chatResponse = await chatEngine.HandleRequest(request);

            SaveSession(activity, sessionData, request, chatResponse);

            return(CreateReply(activity, chatResponse));
        }