public async Task <OkResult> Post([FromBody] Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                DecodeActivityText(activity);

                string replyText = null;
                ParsedCommandRequest parsedCommandRequest = commandRequestParser.Parse(activity);

                if (parsedCommandRequest != null)
                {
                    IBotCommand command = commandSelector.GetCommand(parsedCommandRequest.Name);

                    if (command != null)
                    {
                        ExecutionResult <string> executionResult =
                            await command.ExecuteAsync(activity, parsedCommandRequest.Arguments);

                        replyText = executionResult.IsSuccess
                                                        ? executionResult.Entity
                                                        : executionResult.ErrorMessage;
                    }
                }

                if (replyText == null)
                {
                    replyText = "Sorry, I don't understand you :(";
                }

                logger.LogInformation("Replying with '{0}'", replyText);

                await messageProcessor.ReplyAsync(activity, replyText, CancellationToken.None);
            }

            return(Ok());
        }