public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("Function started"); string SubscriptionKey = System.Environment.GetEnvironmentVariable("SubscriptionKey"); string storageUrl = System.Environment.GetEnvironmentVariable("TranscriptStorageContainerUrl"); string SASToken = System.Environment.GetEnvironmentVariable("SASToken"); log.LogInformation(SubscriptionKey); string HostName = string.Format(HostNameTempalte, System.Environment.GetEnvironmentVariable("Region")); log.LogInformation(HostName); var client = BatchClient.CreateApiV2Client(SubscriptionKey, HostName, Port); var Transcriptionresult = await client.GetTranscriptionsAsync(); foreach (Transcription transcription in Transcriptionresult) { if (transcription.Status == "Succeeded") { log.LogInformation($"found succeeded transciprtions for file {transcription.RecordingsUrl}, saving transcipt back to storage"); foreach (string channel in transcription.ResultsUrls.Keys) { log.LogInformation(channel); CloudBlockBlob recording = new CloudBlockBlob(transcription.RecordingsUrl); string url = transcription.ResultsUrls[channel]; log.LogInformation(url); CloudBlockBlob sourceblob = new CloudBlockBlob(new Uri(url)); string filename = recording.Name.Remove(recording.Name.LastIndexOf('.')); string transcripturl = storageUrl + "/" + filename + channel + "-transcript.json" + SASToken; log.LogInformation(transcripturl); CloudBlockBlob targetblob = new CloudBlockBlob(new Uri(transcripturl)); var resutl = await targetblob.StartCopyAsync(sourceblob); log.LogInformation(resutl); while (targetblob.CopyState.Status == CopyStatus.Pending) { log.LogInformation($"copy status:{targetblob.CopyState.Status} sleeping for 1 second."); await Task.Delay(1000); await targetblob.FetchAttributesAsync(); } log.LogInformation($"copy status:{targetblob.CopyState.Status}"); } await client.DeleteTranscriptionAsync(transcription.Id); } else { log.LogWarning($"found transcription for file {transcription.RecordingsUrl} not in a succeeded state, dumping object"); log.LogInformation(Newtonsoft.Json.JsonConvert.SerializeObject(transcription)); } } return((ActionResult) new OkResult()); }
public static async void Run([TimerTrigger("0 */15 * * * *")] TimerInfo myTimer, ILogger log) { //TODO: this needs to be refactored to use a common function with http trigger and transcript complete code log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); log.LogInformation("Function started"); string SubscriptionKey = System.Environment.GetEnvironmentVariable("SubscriptionKey"); string storageUrl = System.Environment.GetEnvironmentVariable("TranscriptStorageContainerUrl"); string SASToken = System.Environment.GetEnvironmentVariable("SASToken"); log.LogInformation(SubscriptionKey); string HostName = string.Format(HostNameTempalte, System.Environment.GetEnvironmentVariable("Region")); log.LogInformation(HostName); var client = BatchClient.CreateApiV2Client(SubscriptionKey, HostName, Port); var Transcriptionresult = await client.GetTranscriptionsAsync(); foreach (Transcription transcription in Transcriptionresult) { if (transcription.Status == "Succeeded") { log.LogInformation($"found succeeded transciprtions for file {transcription.RecordingsUrl}, saving transcipt back to storage"); foreach (string channel in transcription.ResultsUrls.Keys) { log.LogInformation(channel); CloudBlockBlob recording = new CloudBlockBlob(transcription.RecordingsUrl); string url = transcription.ResultsUrls[channel]; log.LogInformation(url); CloudBlockBlob sourceblob = new CloudBlockBlob(new Uri(url)); string filename = recording.Name.Remove(recording.Name.LastIndexOf('.')); string transcripturl = storageUrl + "/" + filename + channel + "-transcript.json" + SASToken; log.LogInformation(transcripturl); CloudBlockBlob targetblob = new CloudBlockBlob(new Uri(transcripturl)); var resutl = await targetblob.StartCopyAsync(sourceblob); log.LogInformation(resutl); while (targetblob.CopyState.Status == CopyStatus.Pending) { log.LogInformation($"copy status:{targetblob.CopyState.Status} sleeping for 1 second."); await Task.Delay(1000); await targetblob.FetchAttributesAsync(); } log.LogInformation($"copy status:{targetblob.CopyState.Status}"); } await client.DeleteTranscriptionAsync(transcription.Id); } else { log.LogWarning($"found transcription for file {transcription.RecordingsUrl} not in a succeeded state, dumping object"); log.LogInformation(Newtonsoft.Json.JsonConvert.SerializeObject(transcription)); } } }
public static void NewAudioFileEventGridTrigger([EventGridTrigger] EventGridEvent eventGridEvent, ILogger log, ExecutionContext context) { string SubscriptionKey = System.Environment.GetEnvironmentVariable("SubscriptionKey"); string SASToken = System.Environment.GetEnvironmentVariable("SASToken"); string AddDiarizationString = System.Environment.GetEnvironmentVariable("AddDiarization"); bool AddDiarization = bool.Parse(AddDiarizationString); string HostName = string.Format(HostNameTempalte, System.Environment.GetEnvironmentVariable("Region")); log.LogInformation(eventGridEvent.Data.ToString()); var client = BatchClient.CreateApiV2Client(SubscriptionKey, HostName, Port, log); dynamic eventData = JObject.Parse(eventGridEvent.Data.ToString()); string url = eventData.url; log.LogInformation(url); Task <Uri> task = client.PostTranscriptionAsync(Name, Description, Locale, new Uri(url + SASToken), true); task.Wait(); Uri Location = task.Result; if (Location != null) { log.LogInformation(Location.AbsoluteUri); } }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("Function started"); if (req.Query.ContainsKey("Register") && req.Query["Register"] == "Yes") { log.LogInformation("Register query param found, attempting webhook registration"); try { string SubscriptionKey = System.Environment.GetEnvironmentVariable("SubscriptionKey"); var url = System.Environment.GetEnvironmentVariable("CallbackFunctionUrl"); log.LogInformation(SubscriptionKey); string HostName = string.Format(HostNameTempalte, System.Environment.GetEnvironmentVariable("Region")); log.LogInformation(HostName); var client = BatchClient.CreateApiV2Client(SubscriptionKey, HostName, Port, log, "2.1"); var result = await client.CreateWebHook(url, "<my_secret>"); if (result != null) { log.LogInformation(result.AbsoluteUri); } var template = @"{'$schema': 'https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#', 'contentVersion': '1.0.0.0', 'parameters': {}, 'variables': {}, 'resources': [],'outputs': {}}"; var contentResult = new ContentResult(); contentResult.Content = template; contentResult.ContentType = "applicaition/json"; return((ActionResult)contentResult); } catch (Exception e) { log.LogError(e.Message); log.LogError(e.StackTrace); return((ActionResult) new BadRequestResult()); } } else { var eventTypeHeader = req.Headers[EventTypeHeaderName]; var signature = req.Headers[SignatureHeaderName]; log.LogInformation("C# HTTP trigger function processed a request."); log.LogInformation("Validating request"); string body = string.Empty; try{ using (var streamReader = new StreamReader(req.Body)) { body = await streamReader.ReadToEndAsync().ConfigureAwait(false); log.LogInformation(body); var secretBytes = Encoding.UTF8.GetBytes("<my_secret>"); using (var hmacsha256 = new HMACSHA256(secretBytes)) { var contentBytes = Encoding.UTF8.GetBytes(body); var contentHash = hmacsha256.ComputeHash(contentBytes); var storedHash = Convert.FromBase64String(signature); var validated = contentHash.SequenceEqual(storedHash); if (!validated) { return((ActionResult) new BadRequestResult()); } } } }catch (Exception e) { log.LogError(e.Message); log.LogError(e.Message); return((ActionResult) new BadRequestResult()); } switch (eventTypeHeader) { case "Ping": // Do your ping event related stuff here (or ignore this event) log.LogInformation("ping happened"); break; case "TranscriptionCompletion": log.LogInformation("Transcript complete event happened"); log.LogInformation(body); dynamic eventData = JObject.Parse(body); string status = eventData.status; string id = eventData.id; if (status == "Succeeded") { string SubscriptionKey = System.Environment.GetEnvironmentVariable("SubscriptionKey"); string storageUrl = System.Environment.GetEnvironmentVariable("TranscriptStorageContainerUrl"); string SASToken = System.Environment.GetEnvironmentVariable("SASToken"); log.LogInformation(SubscriptionKey); string HostName = string.Format(HostNameTempalte, System.Environment.GetEnvironmentVariable("Region")); log.LogInformation(HostName); var client = BatchClient.CreateApiV2Client(SubscriptionKey, HostName, Port); var Transcriptionresult = await client.GetTranscriptionAsync(new Guid(id)); foreach (string channel in Transcriptionresult.ResultsUrls.Keys) { log.LogInformation(channel); CloudBlockBlob recording = new CloudBlockBlob(Transcriptionresult.RecordingsUrl); string url = Transcriptionresult.ResultsUrls[channel]; log.LogInformation(url); CloudBlockBlob sourceblob = new CloudBlockBlob(new Uri(url)); string filename = recording.Name.Remove(recording.Name.LastIndexOf('.')); string transcripturl = storageUrl + "/" + filename + channel + "-transcript.json" + SASToken; log.LogInformation(transcripturl); CloudBlockBlob targetblob = new CloudBlockBlob(new Uri(transcripturl)); var resutl = await targetblob.StartCopyAsync(sourceblob); log.LogInformation(resutl); } await client.DeleteTranscriptionAsync(new Guid(id)); } else { log.LogWarning("Transcription not succesful"); string statusMessage = eventData.statusMessage; log.LogWarning(statusMessage); } break; default: log.LogInformation(eventTypeHeader); log.LogInformation(body); break; } return((ActionResult) new OkResult()); } }