示例#1
0
文件: Utils.cs 项目: tyayers/NewsyBot
        public static async Task <TextAnalyticLanguageResponse> GetTextLanaguage(string Text)
        {
            Text = Uri.EscapeDataString(Text);

            TextAnalyticRequest request = new TextAnalyticRequest();

            request.documents.Add(new TextAnalyticDocument()
            {
                id = "1", text = Text
            });

            TextAnalyticLanguageResponse data = new TextAnalyticLanguageResponse();

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "4fbf5d7bfcef441cabac799bb9556d96");

                string requestUri       = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/languages";
                HttpResponseMessage msg = await client.PostAsJsonAsync <TextAnalyticRequest>(requestUri, request);

                if (msg.IsSuccessStatusCode)
                {
                    var JsonDataResponse = await msg.Content.ReadAsStringAsync();

                    data = JsonConvert.DeserializeObject <TextAnalyticLanguageResponse>(JsonDataResponse);
                }
            }

            return(data);
        }
示例#2
0
        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                string currentLanguageCode = "en", region = "us";
                string userText = activity.Text;

                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

                // Send typing activity
                Activity typingReply = activity.CreateReply();
                typingReply.Type = ActivityTypes.Typing;
                connector.Conversations.ReplyToActivityAsync(typingReply);

                // First, detect user language
                TextAnalyticLanguageResponse languageResponse = await Utilities.Utils.GetTextLanaguage(activity.Text);

                if (languageResponse.documents != null && languageResponse.documents.Count > 0)
                {
                    currentLanguageCode = languageResponse.documents[0].detectedLanguages[0].iso6391Name;
                    Activity languageReply = activity.CreateReply("Found language: " + currentLanguageCode);
                    await connector.Conversations.ReplyToActivityAsync(languageReply);
                }

                // If detected language is different than english, then translate it
                if (currentLanguageCode != "en")
                {
                    userText = await Utilities.Utils.TranslateText(userText, currentLanguageCode, "en");

                    Activity translatedReply = activity.CreateReply("Translated text: " + userText);
                    await connector.Conversations.ReplyToActivityAsync(translatedReply);
                }

                //await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
                MultilingualBotCommon.LuisResponse dto = await Utilities.Utils.GetEntityFromLUIS(userText);

                if (dto.entities.Length > 0)
                {
                    region = dto.entities[0].entity;
                }

                Activity reply = activity.CreateReply("Ok! Checking if I have some news from '" + region + "'...");
                await connector.Conversations.ReplyToActivityAsync(reply);

                connector.Conversations.ReplyToActivityAsync(typingReply);

                NewsResponses news = await Utilities.Utils.GetNews(region, "", currentLanguageCode);

                if (news.UserMessage != "")
                {
                    // There is a message for the user, show it
                    Activity messageReply = activity.CreateReply(news.UserMessage);
                    await connector.Conversations.ReplyToActivityAsync(messageReply);
                }

                // Show the news source info that was returned
                Activity         newsSourceReply  = activity.CreateReply("");
                List <CardImage> newsSourceImages = new List <CardImage>();
                newsSourceImages.Add(new CardImage(url: news.SourceImageLink));

                List <CardAction> newsSourceCardButtons = new List <CardAction>();

                CardAction newsSourceButton = new CardAction()
                {
                    Value = news.SourceHomepageLink,
                    Type  = "openUrl",
                    Title = news.SourceName
                };

                newsSourceCardButtons.Add(newsSourceButton);

                ThumbnailCard newsSourceCard = new ThumbnailCard()
                {
                    Title    = $"Found news from {news.SourceName}",
                    Subtitle = $"{news.SourceName} Homepage",
                    Images   = newsSourceImages,
                    Buttons  = newsSourceCardButtons
                };

                Attachment newsSourceAttachment = newsSourceCard.ToAttachment();
                newsSourceReply.Attachments.Add(newsSourceAttachment);
                await connector.Conversations.ReplyToActivityAsync(newsSourceReply);

                // Now show the real news results
                Activity newsReply = activity.CreateReply("News results");
                newsReply.AttachmentLayout = "carousel";

                newsReply.Attachments = new List <Attachment>();

                foreach (NewsResponse article in news.Responses)
                {
                    List <CardImage> cardImages = new List <CardImage>();
                    cardImages.Add(new CardImage(url: article.imageLink));

                    List <CardAction> cardButtons = new List <CardAction>();

                    CardAction plButton = new CardAction()
                    {
                        Value = article.articleLink,
                        Type  = "openUrl",
                        Title = news.SourceName
                    };

                    cardButtons.Add(plButton);

                    HeroCard plCard = new HeroCard()
                    {
                        Title    = article.title,
                        Subtitle = article.description,
                        Images   = cardImages,
                        Buttons  = cardButtons
                    };

                    Attachment plAttachment = plCard.ToAttachment();
                    newsReply.Attachments.Add(plAttachment);
                }

                await connector.Conversations.ReplyToActivityAsync(newsReply);
            }
            else
            {
                HandleSystemMessage(activity);
            }

            var response = Request.CreateResponse(HttpStatusCode.OK);

            return(response);
        }