{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "StorageAccount": { "type": "String", "metadata": { "description": "The name of the storage account. It must be unique across all existing storage account names in Azure, between 3 and 24 characters long, and can contain only lowercase letters and numbers." } }, "Locale": { "defaultValue": "en-US | English (United States)", "type": "String", "allowedValues": [ "ar-BH | Arabic (Bahrain)", "ar-EG | Arabic (Egypt)", "ar-SY | Arabic (Syria)", "ca-ES | Catalan", "da-DK | Danish (Denmark)", "de-DE | German (Germany)", "en-AU | English (Australia)", "en-CA | English (Canada)", "en-GB | English (United Kingdom)", "en-IN | English (India)", "en-NZ | English (New Zealand)", "en-US | English (United States)", "es-ES | Spanish (Spain)", "es-MX | Spanish (Mexico)", "fi-FI | Finnish (Finland)", "fr-CA | French (Canada)", "fr-FR | French (France)", "gu-IN | Gujarati (Indian)", "hi-IN | Hindi (India)", "it-IT | Italian (Italy)", "ja-JP | Japanese (Japan)", "ko-KR | Korean (Korea)", "mr-IN | Marathi (India)", "nb-NO | Norwegian (Bokmål)", "nl-NL | Dutch (Netherlands)", "pl-PL | Polish (Poland)", "pt-BR | Portuguese (Brazil)", "pt-PT | Portuguese (Portugal)", "ru-RU | Russian (Russia)", "sv-SE | Swedish (Sweden)", "ta-IN | Tamil (India)", "te-IN | Telugu (India)", "th-TH | Thai (Thailand)", "tr-TR | Turkish (Turkey)", "zh-CN | Chinese (Mandarin, simplified)", "zh-HK | Chinese (Cantonese, Traditional)", "zh-TW | Chinese (Taiwanese Mandarin)" ] }, "CustomModelId": { "defaultValue": "", "type": "String", "metadata": { "description": "The id of the custom model for transcription. If empty, the base model will be selected." } }, "AzureSpeechServicesKey": { "type": "SecureString", "metadata": { "description": "The key for the Azure Speech Services subscription." } }, "AzureSpeechServicesRegion": { "defaultValue": "westus", "type": "String", "allowedValues": [ "centralus", "eastus", "eastus2", "northcentralus", "southcentralus", "westcentralus", "westus", "westus2", "canadacentral", "brazilsouth", "eastasia", "southeastasia", "australiaeast", "centralindia", "japaneast", "japanwest", "koreacentral", "northeurope", "westeurope", "francecentral", "uksouth", "usgovarizona", "usgovvirginia" ], "metadata": { "description": "The region the Azure speech services subscription is associated with." } }, "CustomEndpoint": { "defaultValue": "", "type": "String", "metadata": { "description": "Enter the address of your private endpoint here (e.g. https://mycustomendpoint.cognitiveservices.azure.com/) if you are connecting with a private endpoint" } }, "ProfanityFilterMode": { "defaultValue": "None", "type": "String", "allowedValues": [ "None", "Removed", "Tags", "Masked" ], "metadata": { "description": "The requested profanity filter mode." } }, "PunctuationMode": { "defaultValue": "DictatedAndAutomatic", "type": "String", "allowedValues": [ "None", "Dictated", "Automatic", "DictatedAndAutomatic" ], "metadata": { "description": "The requested punctuation mode." } }, "AddDiarization": { "defaultValue": false, "type": "bool", "metadata": { "description": "A value indicating whether diarization (speaker separation) is requested." } }, "AddWordLevelTimestamps": { "defaultValue": false, "type": "bool", "metadata": { "description": "A value indicating whether word level timestamps are requested." } }, "TextAnalyticsKey": { "defaultValue": "", "type": "SecureString", "metadata": { "description": "The key for the Text Analytics subscription." } }, "TextAnalyticsEndpoint": { "defaultValue": "", "type": "String", "metadata": { "description": "The endpoint the Text Analytics subscription is associated with (format should be like https://{resourceName}.cognitiveservices.azure.com or https://{region}.api.cognitive.microsoft.com or similar). If empty, no text analysis will be performed." } }, "SentimentAnalysis": { "defaultValue": "None", "type": "String", "allowedValues": [ "None", "UtteranceLevel", "AudioLevel" ], "metadata": { "description": "A value indicating whether sentiment analysis is requested (either per utterance or per audio). Will only be performed if a Text Analytics Key and Region is provided." } }, "PiiRedaction": { "defaultValue": "None", "type": "String", "allowedValues": [ "None", "UtteranceAndAudioLevel" ], "metadata": { "description": "A value indicating whether personally identifiable information (PII) redaction is requested. Will only be performed if a Text Analytics Key and Region is provided." } }, "SqlAdministratorLogin": { "type": "string", "defaultValue": "", "metadata": { "description": "The administrator username of the SQL Server, which is used to gain insights of the audio with the provided PowerBI scripts. If it is left empty, no SQL server/database will be created." } }, "SqlAdministratorLoginPassword": { "type": "securestring", "defaultValue": "", "metadata": { "description": "The administrator password of the SQL Server. If it is left empty, no SQL server/database will be created." } }, "DeploymentId": { "type": "string", "defaultValue": "[utcNow()]", "metadata": { "description": "Id that will be suffixed to all created resources to identify resources of a certain deployment. Leave as is to use timestamp as deployment id." } } }, "variables": { "Version": "v2.0.12", "AudioInputContainer": "audio-input", "AudioProcessedContainer": "audio-processed", "ErrorFilesOutputContainer": "audio-failed", "JsonResultOutputContainer": "json-result-output", "HtmlResultOutputContainer": "html-result-output", "ErrorReportOutputContainer": "error-report", "ConsolidatedFilesOutputContainer": "consolidated-files", "CreateHtmlResultFile": false, "CreateConsolidatedOutputFiles": false, "TimerBasedExecution": true, "CreateAudioProcessedContainer": true, "IsByosEnabledSubscription": false, "MessagesPerFunctionExecution": 1000, "FilesPerTranscriptionJob": 100, "RetryLimit": 4, "InitialPollingDelayInMinutes": 2, "MaxPollingDelayInMinutes": 180, "InstanceId": "[parameters('DeploymentId')]", "StorageAccountName": "[parameters('StorageAccount')]", "UseSqlDatabase": "[and(not(equals(parameters('SqlAdministratorLogin'),'')), not(equals(parameters('SqlAdministratorLoginPassword'),'')))]", "SqlServerName": "[concat('sqlserver', toLower(variables('InstanceId')))]", "DatabaseName": "[concat('Database-', toLower(variables('InstanceId')))]", "ServiceBusName": "[concat('ServiceBus-', variables('InstanceId'))]", "AppInsightsName": "[concat('AppInsights-', variables('InstanceId'))]", "KeyVaultName": "[concat('KV-', variables('InstanceId'))]", "EventGridSystemTopicName": "[concat(variables('StorageAccountName'),'-',variables('InstanceId'))]", "StartTranscriptionFunctionName": "[take(concat('StartTranscriptionFunction-', variables('InstanceId')),60)]", "StartTranscriptionFunctionId": "[resourceId('Microsoft.Web/sites', variables('StartTranscriptionFunctionName'))]", "FetchTranscriptionFunctionName": "[take(concat('FetchTranscriptionFunction-', variables('InstanceId')),60)]", "FetchTranscriptionFunctionId": "[resourceId('Microsoft.Web/sites', variables('FetchTranscriptionFunctionName'))]", "AppServicePlanName": "[concat('AppServicePlan-', variables('InstanceId'))]", "AzureSpeechServicesKeySecretName": "AzureSpeechServicesKey", "TextAnalyticsKeySecretName": "TextAnalyticsKey", "DatabaseConnectionStringSecretName": "DatabaseConnectionString", "PiiCategories": "", "ConversationPiiCategories": "", "ConversationPiiRedaction": "None", "ConversationPiiInferenceSource": "text", "ConversationSummarizationOptions": "{\"Stratergy\":{\"Key\":\"Channel\",\"Mapping\":{\"0\":\"Agent\",\"1\":\"Customer\"},\"FallbackRole\":\"None\"},\"Aspects\":[\"Issue\",\"Resolution\",\"ChapterTitle\",\"Narrative\"],\"Enabled\":false,\"InputLengthLimit\":125000}", "IsAzureGovDeployment": "[or(equals(parameters('AzureSpeechServicesRegion'),'usgovarizona'), equals(parameters('AzureSpeechServicesRegion'),'usgovvirginia'))]", "AzureSpeechServicesEndpointUri": "[if(not(equals(parameters('CustomEndpoint'),'')), parameters('CustomEndpoint'), if(variables('IsAzureGovDeployment'), concat('https://', parameters('AzureSpeechServicesRegion') ,'.api.cognitive.microsoft.us/'), concat('https://', parameters('AzureSpeechServicesRegion') ,'.api.cognitive.microsoft.com/')))]", "EndpointSuffix": "[if(variables('IsAzureGovDeployment'),'core.usgovcloudapi.net','core.windows.net')]", "BinariesRoutePrefix": "https://github.com/Azure-Samples/cognitive-services-speech-sdk/releases/download/ingestion-", "StartTranscriptionByTimerBinary": "[concat(variables('BinariesRoutePrefix'), variables('Version'), '/StartTranscriptionByTimer.zip')]", "StartTranscriptionByServiceBusBinary": "[concat(variables('BinariesRoutePrefix'), variables('Version'), '/StartTranscriptionByServiceBus.zip')]", "FetchTranscriptionBinary": "[concat(variables('BinariesRoutePrefix'), variables('Version'), '/FetchTranscription.zip')]" }, "resources": [ { "type": "Microsoft.Insights/components", "apiVersion": "2020-02-02-preview", "name": "[variables('AppInsightsName')]", "location": "[resourceGroup().location]", "tags": { "applicationType": "web", "applicationName": "TranscriptionInsights" }, "kind": "web", "properties": { "Application_Type": "web" } }, { "type": "Microsoft.ServiceBus/namespaces", "apiVersion": "2018-01-01-preview", "name": "[variables('ServiceBusName')]", "location": "[resourceGroup().location]", "sku": { "name": "Standard", "tier": "Standard" }, "properties": { "zoneRedundant": false } }, { "type": "Microsoft.KeyVault/vaults", "name": "[variables('KeyVaultName')]", "apiVersion": "2019-09-01", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', variables('StartTranscriptionFunctionName'))]", "[resourceId('Microsoft.Web/sites', variables('FetchTranscriptionFunctionName'))]" ], "properties": { "enabledForDeployment": "true", "enabledForDiskEncryption": "false", "enabledForTemplateDeployment": "false", "tenantId": "[subscription().tenantId]", "accessPolicies": [ { "objectId": "[reference(resourceId('Microsoft.Web/sites', variables('StartTranscriptionFunctionName')), '2019-08-01', 'full').identity.principalId]", "tenantId": "[reference(resourceId('Microsoft.Web/sites', variables('StartTranscriptionFunctionName')), '2019-08-01', 'full').identity.tenantId]", "permissions": { "secrets": [ "get", "list" ] } }, { "objectId": "[reference(resourceId('Microsoft.Web/sites', variables('FetchTranscriptionFunctionName')), '2019-08-01', 'full').identity.principalId]", "tenantId": "[reference(resourceId('Microsoft.Web/sites', variables('FetchTranscriptionFunctionName')), '2019-08-01', 'full').identity.tenantId]", "permissions": { "secrets": [ "get", "list" ] } } ], "sku": { "name": "Standard", "family": "A" }, "networkAcls": { "defaultAction": "Allow", "bypass": "AzureServices" } } }, { "type": "Microsoft.KeyVault/vaults/secrets", "name": "[concat(variables('KeyVaultName'), '/', variables('AzureSpeechServicesKeySecretName'))]", "apiVersion": "2019-09-01", "location": "[resourceGroup().location]", "dependsOn": [ "[concat('Microsoft.KeyVault/vaults/', variables('KeyVaultName'))]" ], "properties": { "value": "[parameters('AzureSpeechServicesKey')]" } }, { "type": "Microsoft.KeyVault/vaults/secrets", "name": "[concat(variables('KeyVaultName'), '/', variables('TextAnalyticsKeySecretName'))]", "apiVersion": "2019-09-01", "location": "[resourceGroup().location]", "dependsOn": [ "[concat('Microsoft.KeyVault/vaults/', variables('KeyVaultName'))]" ], "properties": { "value": "[if(empty(parameters('TextAnalyticsKey')), 'NULL', parameters('TextAnalyticsKey'))]" } }, { "type": "Microsoft.KeyVault/vaults/secrets", "name": "[concat(variables('KeyVaultName'), '/', variables('DatabaseConnectionStringSecretName'))]", "apiVersion": "2019-09-01", "location": "[resourceGroup().location]", "dependsOn": [ "[concat('Microsoft.KeyVault/vaults/', variables('KeyVaultName'))]", "[variables('SqlServerName')]" ], "properties": { "value": "[if(variables('UseSqlDatabase'), concat('Server=tcp:',reference(variables('SqlServerName'), '2014-04-01-preview').fullyQualifiedDomainName,',1433;Initial Catalog=',variables('DatabaseName'),';Persist Security Info=False;User ID=',parameters('SqlAdministratorLogin'),';Password=',parameters('SqlAdministratorLoginPassword'),';MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;'), 'NULL')]" } }, { "name": "[variables('SqlServerName')]", "condition": "[variables('UseSqlDatabase')]", "type": "Microsoft.Sql/servers", "apiVersion": "2021-02-01-preview", "location": "[resourceGroup().location]", "tags": { "displayName": "SqlServer" }, "properties": { "administratorLogin": "[parameters('SqlAdministratorLogin')]", "administratorLoginPassword": "[parameters('SqlAdministratorLoginPassword')]", "version": "12.0" }, "resources": [ { "name": "[variables('DatabaseName')]", "condition": "[variables('UseSqlDatabase')]", "type": "databases", "apiVersion": "2015-01-01", "location": "[resourceGroup().location]", "tags": { "displayName": "Database" }, "properties": { "edition": "Basic", "collation": "SQL_Latin1_General_CP1_CI_AS", "requestedServiceObjectiveName": "Basic" }, "dependsOn": [ "[variables('SqlServerName')]" ], "resources": [ { "comments": "Transparent Data Encryption", "name": "current", "condition": "[variables('UseSqlDatabase')]", "type": "transparentDataEncryption", "apiVersion": "2014-04-01-preview", "location": "[resourceGroup().location]", "properties": { "status": "Enabled" }, "dependsOn": [ "[variables('DatabaseName')]" ] } ] }, { "apiVersion": "2017-03-01-preview", "type": "auditingSettings", "condition": "[variables('UseSqlDatabase')]", "name": "DefaultAuditingSettings", "dependsOn": [ "[variables('SqlServerName')]", "[variables('StorageAccountName')]" ], "properties": { "state": "Enabled", "storageEndpoint": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), '2018-03-01-preview').PrimaryEndpoints.Blob]", "storageAccountAccessKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), '2018-03-01-preview').keys[0].value]", "storageAccountSubscriptionId": "[subscription().subscriptionId]", "auditActionsAndGroups": null, "isStorageSecondaryKeyInUse": false } }, { "name": "AllowAllMicrosoftAzureIps", "condition": "[variables('UseSqlDatabase')]", "type": "firewallrules", "apiVersion": "2014-04-01", "location": "[resourceGroup().location]", "properties": { "endIpAddress": "0.0.0.0", "startIpAddress": "0.0.0.0" }, "dependsOn": [ "[variables('SqlServerName')]" ] } ] }, { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "name": "[variables('StorageAccountName')]", "location": "[resourceGroup().location]", "sku": { "name": "Standard_GRS", "tier": "Standard" }, "kind": "StorageV2", "properties": { "networkAcls": { "bypass": "AzureServices", "virtualNetworkRules": [], "ipRules": [], "defaultAction": "Allow" }, "supportsHttpsTrafficOnly": true, "encryption": { "services": { "file": { "keyType": "Account", "enabled": true }, "blob": { "keyType": "Account", "enabled": true } }, "keySource": "Microsoft.Storage" }, "accessTier": "Hot" } }, { "type": "Microsoft.ServiceBus/namespaces/authorizationRules", "apiVersion": "2017-04-01", "name": "[concat(variables('ServiceBusName'), '/RootManageSharedAccessKey')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.ServiceBus/namespaces', variables('ServiceBusName'))]" ], "properties": { "rights": [ "Listen", "Manage", "Send" ] } }, { "type": "Microsoft.ServiceBus/namespaces/queues", "apiVersion": "2017-04-01", "name": "[concat(variables('ServiceBusName'), '/start_transcription_queue')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.ServiceBus/namespaces', variables('ServiceBusName'))]" ], "properties": { "lockDuration": "PT4M", "maxSizeInMegabytes": 5120, "requiresDuplicateDetection": false, "requiresSession": false, "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S", "deadLetteringOnMessageExpiration": false, "enableBatchedOperations": false, "duplicateDetectionHistoryTimeWindow": "PT10M", "maxDeliveryCount": 1, "status": "Active", "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S", "enablePartitioning": false, "enableExpress": false } }, { "type": "Microsoft.ServiceBus/namespaces/queues", "apiVersion": "2017-04-01", "name": "[concat(variables('ServiceBusName'), '/fetch_transcription_queue')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.ServiceBus/namespaces', variables('ServiceBusName'))]" ], "properties": { "lockDuration": "PT5M", "maxSizeInMegabytes": 5120, "requiresDuplicateDetection": false, "requiresSession": false, "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S", "deadLetteringOnMessageExpiration": false, "enableBatchedOperations": false, "duplicateDetectionHistoryTimeWindow": "PT10M", "maxDeliveryCount": 5, "status": "Active", "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S", "enablePartitioning": false, "enableExpress": false } }, { "type": "Microsoft.Storage/storageAccounts/blobServices", "apiVersion": "2019-06-01", "location": "[resourceGroup().location]", "name": "[concat(variables('StorageAccountName'), '/default')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "sku": { "name": "Standard_GRS" }, "properties": { "cors": { "corsRules": [] }, "deleteRetentionPolicy": { "enabled": false } } }, { "type": "Microsoft.Storage/storageAccounts/fileServices", "apiVersion": "2019-06-01", "location": "[resourceGroup().location]", "name": "[concat(variables('StorageAccountName'), '/default')]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "sku": { "name": "Standard_GRS" }, "properties": { "cors": { "corsRules": [] } } }, { "type": "Microsoft.ServiceBus/namespaces/queues/authorizationRules", "apiVersion": "2017-04-01", "name": "[concat(variables('ServiceBusName'), '/fetch_transcription_queue/FetchTranscription')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.ServiceBus/namespaces/queues', variables('ServiceBusName'), 'fetch_transcription_queue')]", "[resourceId('Microsoft.ServiceBus/namespaces', variables('ServiceBusName'))]", "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('ServiceBusName'), 'RootManageSharedAccessKey')]" ], "properties": { "rights": [ "Listen", "Send" ] } }, { "type": "Microsoft.ServiceBus/namespaces/queues/authorizationRules", "apiVersion": "2017-04-01", "name": "[concat(variables('ServiceBusName'), '/start_transcription_queue/StartTranscription')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.ServiceBus/namespaces/queues', variables('ServiceBusName'), 'start_transcription_queue')]", "[resourceId('Microsoft.ServiceBus/namespaces', variables('ServiceBusName'))]", "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('ServiceBusName'), 'RootManageSharedAccessKey')]" ], "properties": { "rights": [ "Listen", "Send" ] } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('AudioInputContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('JsonResultOutputContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "condition": "[variables('CreateConsolidatedOutputFiles')]", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('ConsolidatedFilesOutputContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "condition": "[variables('CreateAudioProcessedContainer')]", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('AudioProcessedContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "condition": "[variables('CreateHtmlResultFile')]", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('HtmlResultOutputContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('ErrorReportOutputContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2019-06-01", "name": "[concat(variables('StorageAccountName'), '/default/', variables('ErrorFilesOutputContainer'))]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "publicAccess": "None" } }, { "name": "[variables('EventGridSystemTopicName')]", "type": "Microsoft.EventGrid/systemTopics", "apiVersion": "2020-04-01-preview", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]" ], "properties": { "source": "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]", "topicType": "Microsoft.Storage.StorageAccounts" } }, { "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions", "apiVersion": "2020-04-01-preview", "name": "[concat(variables('EventGridSystemTopicName'), '/BlobCreatedEvent')]", "dependsOn": [ "[resourceId('Microsoft.EventGrid/systemTopics', variables('EventGridSystemTopicName'))]", "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('StorageAccountName'), 'default')]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]", "[resourceId('Microsoft.ServiceBus/namespaces/queues', variables('ServiceBusName'), 'start_transcription_queue')]" ], "properties": { "destination": { "endpointType": "ServiceBusQueue", "properties": { "resourceId": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name,'/providers/Microsoft.ServiceBus/namespaces/', variables('ServiceBusName'),'/queues/start_transcription_queue')]" } }, "filter": { "includedEventTypes": [ "Microsoft.Storage.BlobCreated" ], "advancedFilters": [ { "operatorType": "StringBeginsWith", "key": "Subject", "values": [ "[concat('/blobServices/default/containers/', variables('AudioInputContainer'), '/blobs')]" ] }, { "operatorType": "StringContains", "key": "data.api", "values": [ "FlushWithClose", "PutBlob", "PutBlockList", "CopyBlob" ] } ] }, "labels": [], "eventDeliverySchema": "EventGridSchema" } }, { "apiVersion": "2018-02-01", "type": "Microsoft.Web/serverfarms", "kind": "app", "name": "[variables('AppServicePlanName')]", "location": "[resourceGroup().location]", "properties": {}, "dependsOn": [], "sku": { "name": "EP1" } }, { "type": "Microsoft.Web/sites", "apiVersion": "2020-09-01", "name": "[variables('StartTranscriptionFunctionName')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', variables('AppServicePlanName'))]" ], "kind": "functionapp", "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('AppServicePlanName'))]", "httpsOnly": "true" }, "identity": { "type": "SystemAssigned" } }, { "type": "Microsoft.Web/sites/config", "name": "[concat(variables('StartTranscriptionFunctionName'), '/AppSettings')]", "apiVersion": "2020-09-01", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Insights/components', variables('AppInsightsName'))]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]", "[concat('Microsoft.Web/sites/', variables('StartTranscriptionFunctionName'))]", "[resourceId('Microsoft.KeyVault/vaults', variables('KeyVaultName'))]", "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('KeyVaultName'), variables('AzureSpeechServicesKeySecretName'))]", "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('ServiceBusName'), 'RootManageSharedAccessKey')]", "[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'start_transcription_queue','StartTranscription')]", "[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'fetch_transcription_queue','FetchTranscription')]" ], "tags": { "displayName": "WebAppSettings" }, "properties": { "AddDiarization": "[parameters('AddDiarization')]", "AddWordLevelTimestamps": "[parameters('AddWordLevelTimestamps')]", "APPLICATIONINSIGHTS_CONNECTION_STRING": "[reference(resourceId('Microsoft.Insights/components', variables('AppInsightsName')), '2020-02-02-preview').ConnectionString]", "AudioInputContainer": "[variables('AudioInputContainer')]", "AzureServiceBus": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('ServiceBusName'), 'RootManageSharedAccessKey'), '2017-04-01').primaryConnectionString]", "AzureSpeechServicesKey": "[concat('@Microsoft.KeyVault(VaultName=', variables('KeyVaultName'), ';SecretName=', variables('AzureSpeechServicesKeySecretName'), ')')]", "AzureSpeechServicesRegion": "[parameters('AzureSpeechServicesRegion')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('StorageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value, ';EndpointSuffix=', variables('EndpointSuffix'))]", "AzureWebJobsDashboard": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('StorageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value, ';EndpointSuffix=', variables('EndpointSuffix'))]", "CustomModelId": "[parameters('CustomModelId')]", "ErrorFilesOutputContainer": "[variables('ErrorFilesOutputContainer')]", "ErrorReportOutputContainer": "[variables('ErrorReportOutputContainer')]", "FetchTranscriptionServiceBusConnectionString": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'fetch_transcription_queue','FetchTranscription'), '2017-04-01').primaryConnectionString]", "FilesPerTranscriptionJob": "[variables('FilesPerTranscriptionJob')]", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "AzureSpeechServicesEndpointUri": "[variables('AzureSpeechServicesEndpointUri')]", "InitialPollingDelayInMinutes": "[variables('InitialPollingDelayInMinutes')]", "IsAzureGovDeployment": "[variables('IsAzureGovDeployment')]", "IsByosEnabledSubscription": "[variables('IsByosEnabledSubscription')]", "MaxPollingDelayInMinutes": "[variables('MaxPollingDelayInMinutes')]", "Locale": "[parameters('Locale')]", "MessagesPerFunctionExecution": "[variables('MessagesPerFunctionExecution')]", "ProfanityFilterMode": "[parameters('ProfanityFilterMode')]", "PunctuationMode": "[parameters('PunctuationMode')]", "RetryLimit": "[variables('RetryLimit')]", "StartTranscriptionServiceBusConnectionString": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'start_transcription_queue','StartTranscription'), '2017-04-01').primaryConnectionString]", "WEBSITE_RUN_FROM_PACKAGE": "[if(variables('timerBasedExecution'), variables('StartTranscriptionByTimerBinary'), variables('StartTranscriptionByServiceBusBinary'))]" } }, { "type": "Microsoft.Web/sites", "apiVersion": "2020-09-01", "name": "[variables('FetchTranscriptionFunctionName')]", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', variables('AppServicePlanName'))]" ], "kind": "functionapp", "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('AppServicePlanName'))]", "httpsOnly": "true" }, "identity": { "type": "SystemAssigned" } }, { "type": "Microsoft.Web/sites/config", "name": "[concat(variables('FetchTranscriptionFunctionName'), '/AppSettings')]", "location": "[resourceGroup().location]", "apiVersion": "2020-09-01", "dependsOn": [ "[resourceId('Microsoft.Insights/components', variables('AppInsightsName'))]", "[resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName'))]", "[concat('Microsoft.Web/sites/', variables('FetchTranscriptionFunctionName'))]", "[resourceId('Microsoft.KeyVault/vaults', variables('KeyVaultName'))]", "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('KeyVaultName'), variables('AzureSpeechServicesKeySecretName'))]", "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('KeyVaultName'), variables('TextAnalyticsKeySecretName'))]", "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('ServiceBusName'), 'RootManageSharedAccessKey')]", "[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'start_transcription_queue','StartTranscription')]", "[resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'fetch_transcription_queue','FetchTranscription')]" ], "tags": { "displayName": "WebAppSettings" }, "properties": { "APPLICATIONINSIGHTS_CONNECTION_STRING": "[reference(resourceId('Microsoft.Insights/components', variables('AppInsightsName')), '2020-02-02-preview').ConnectionString]", "PiiRedactionSetting": "[parameters('PiiRedaction')]", "SentimentAnalysisSetting": "[parameters('SentimentAnalysis')]", "AudioInputContainer": "[variables('AudioInputContainer')]", "AzureServiceBus": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('ServiceBusName'), 'RootManageSharedAccessKey'), '2017-04-01').primaryConnectionString]", "AzureSpeechServicesKey": "[concat('@Microsoft.KeyVault(VaultName=', variables('KeyVaultName'), ';SecretName=', variables('AzureSpeechServicesKeySecretName'), ')')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('StorageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value, ';EndpointSuffix=', variables('EndpointSuffix'))]", "AzureWebJobsDashboard": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('StorageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value, ';EndpointSuffix=', variables('EndpointSuffix'))]", "CreateHtmlResultFile": "[variables('CreateHtmlResultFile')]", "DatabaseConnectionString": "[concat('@Microsoft.KeyVault(VaultName=', variables('KeyVaultName'), ';SecretName=', variables('DatabaseConnectionStringSecretName'), ')')]", "ErrorFilesOutputContainer": "[variables('ErrorFilesOutputContainer')]", "ErrorReportOutputContainer": "[variables('ErrorReportOutputContainer')]", "FetchTranscriptionServiceBusConnectionString": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'fetch_transcription_queue','FetchTranscription'), '2017-04-01').primaryConnectionString]", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "HtmlResultOutputContainer": "[variables('HtmlResultOutputContainer')]", "InitialPollingDelayInMinutes": "[variables('InitialPollingDelayInMinutes')]", "MaxPollingDelayInMinutes": "[variables('MaxPollingDelayInMinutes')]", "JsonResultOutputContainer": "[variables('JsonResultOutputContainer')]", "RetryLimit": "[variables('RetryLimit')]", "StartTranscriptionServiceBusConnectionString": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/queues/authorizationRules', variables('ServiceBusName'), 'start_transcription_queue','StartTranscription'), '2017-04-01').primaryConnectionString]", "TextAnalyticsKey": "[concat('@Microsoft.KeyVault(VaultName=', variables('KeyVaultName'), ';SecretName=', variables('TextAnalyticsKeySecretName'), ')')]", "TextAnalyticsEndpoint": "[parameters('TextAnalyticsEndpoint')]", "UseSqlDatabase": "[variables('UseSqlDatabase')]", "WEBSITE_RUN_FROM_PACKAGE": "[variables('FetchTranscriptionBinary')]", "CreateConsolidatedOutputFiles": "[variables('CreateConsolidatedOutputFiles')]", "ConsolidatedFilesOutputContainer": "[variables('ConsolidatedFilesOutputContainer')]", "CreateAudioProcessedContainer": "[variables('CreateAudioProcessedContainer')]", "AudioProcessedContainer": "[variables('AudioProcessedContainer')]", "PiiCategories": "[variables('PiiCategories')]", "ConversationPiiCategories": "[variables('ConversationPiiCategories')]", "ConversationPiiInferenceSource": "[variables('ConversationPiiInferenceSource')]", "ConversationPiiSetting": "[variables('ConversationPiiRedaction')]", "ConversationSummarizationOptions": "[variables('ConversationSummarizationOptions')]" } } ], "outputs": { "StartTranscriptionFunctionId": { "type": "string", "value": "[variables('StartTranscriptionFunctionId')]" }, "FetchTranscriptionFunctionId": { "type": "string", "value": "[variables('FetchTranscriptionFunctionId')]" } } }