public async Task <KeyPhrasesResponse> GetKeyPhrases(KeyPhrasesRequest request) { string getKeyPhrasesUrl = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases"; HttpClient objHttpClient = new HttpClient(); string jsonRequest = Newtonsoft.Json.JsonConvert.SerializeObject(request); StringContent objStrContent = new StringContent(jsonRequest); objStrContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); objStrContent.Headers.Add("Ocp-Apim-Subscription-Key", AccessToken); var result = await objHttpClient.PostAsync(getKeyPhrasesUrl, objStrContent); var resultString = await result.Content.ReadAsStringAsync(); KeyPhrasesResponse objKeyPhrasesResponse = Newtonsoft.Json.JsonConvert.DeserializeObject <KeyPhrasesResponse>(resultString); return(objKeyPhrasesResponse); }
public static async Task Run([QueueTrigger("messagesqueue", Connection = "AzureWebJobsStorage")] string myQueueItem, TraceWriter log) { log.Info($"Processing: {myQueueItem}"); //variables var azureWebJobsStorage = CloudConfigurationManager.GetSetting("AzureWebJobsStorage"); var messagesTableContainerName = CloudConfigurationManager.GetSetting("MessagesTableContainerName"); var messagesTablePartitionKey = CloudConfigurationManager.GetSetting("MessagesTablePartitionKey"); var alertsTableContainerName = CloudConfigurationManager.GetSetting("AlertsTableContainerName"); var alertsTablePartitionKey = CloudConfigurationManager.GetSetting("AlertsTablePartitionKey"); var textAnalyticsApiKey = CloudConfigurationManager.GetSetting("TextAnalyticsApiKey"); var textAnalyticsApiUrl = CloudConfigurationManager.GetSetting("TextAnalyticsApiUrl"); var luisApiKey = CloudConfigurationManager.GetSetting("LuisApiKey"); var luisApiUrl = CloudConfigurationManager.GetSetting("LuisApiUrl"); var bullyingApiKey = CloudConfigurationManager.GetSetting("BullyingApiKey"); var bullyingApiUrl = CloudConfigurationManager.GetSetting("BullyingApiUrl"); var storageAccount = CloudStorageAccount.Parse(azureWebJobsStorage); var tableClient = storageAccount.CreateCloudTableClient(); //parse the message JSON to a dynamic object, then entity dynamic queueItem = JObject.Parse(myQueueItem); var chatMessageEntity = new ChatMessageEntity(messagesTablePartitionKey, Guid.NewGuid().ToString()); chatMessageEntity.Message = queueItem.Message; chatMessageEntity.Time = queueItem.Time; chatMessageEntity.UserId = queueItem.UserId; chatMessageEntity.ChatId = queueItem.ChatId; //Get Text Analytics Sentiment data and add to entity var sentimentData = await GetTextAnalyticsData(textAnalyticsApiUrl, textAnalyticsApiKey, queueItem.Message.ToString(), "sentiment"); SentimentResponse sentiment = JsonConvert.DeserializeObject <SentimentResponse>(sentimentData); chatMessageEntity.Sentiment = sentiment.documents[0].score; log.Info($"Sentiment: {chatMessageEntity.Sentiment}"); //Get Text Analytics key phrase data and add to entity var keyPhrasesData = await GetTextAnalyticsData(textAnalyticsApiUrl, textAnalyticsApiKey, queueItem.Message.ToString(), "keyPhrases"); KeyPhrasesResponse keyPhrases = JsonConvert.DeserializeObject <KeyPhrasesResponse>(keyPhrasesData); chatMessageEntity.KeyPhrases = string.Join(",", keyPhrases.documents[0].keyPhrases); log.Info($"Key Phrases: {chatMessageEntity.KeyPhrases }"); //Do LUIS entity and intent extraction here var luisData = await GetLUISData(luisApiUrl, luisApiKey, queueItem.Message.ToString()); LuisResponse luis = JsonConvert.DeserializeObject <LuisResponse>(luisData); if (luis.topScoringIntent.intent != "None") { //create an alert var alertEntity = new AlertEntity(alertsTablePartitionKey, Guid.NewGuid().ToString()); alertEntity.AlertCategory = ResolveCategory(luis.topScoringIntent.intent); alertEntity.AlertText = queueItem.Message.ToString(); alertEntity.ChatMessageId = chatMessageEntity.RowKey.ToString(); alertEntity.StartIndex = -1; alertEntity.EndIndex = -1; alertEntity.ChatId = chatMessageEntity.ChatId; await LogAlert(tableClient, alertsTableContainerName, alertEntity); } if (luis.entities.Count > 0) { //create an alert for each entity foreach (var entity in luis.entities) { //create an alert var alertEntity = new AlertEntity(alertsTablePartitionKey, Guid.NewGuid().ToString()); alertEntity.AlertCategory = ResolveCategory(entity.type); alertEntity.AlertText = entity.entity; alertEntity.ChatMessageId = chatMessageEntity.RowKey.ToString(); alertEntity.StartIndex = entity.startIndex; alertEntity.EndIndex = entity.endIndex; alertEntity.ChatId = chatMessageEntity.ChatId; await LogAlert(tableClient, alertsTableContainerName, alertEntity); } } //bullying detection var bullyingData = await GetBullyingData(bullyingApiUrl, bullyingApiKey, queueItem.Message.ToString()); // Create the TableOperation object that inserts the entity var messagesTable = tableClient.GetTableReference(messagesTableContainerName); var messageInsertOperation = TableOperation.Insert(chatMessageEntity); messagesTable.Execute(messageInsertOperation); log.Info($"Processed: {myQueueItem}"); }