API голосовой трансляции предоставляет возможности создания собственной модели (BYOM), что позволяет интегрировать пользовательские модели в рабочий процесс взаимодействия с голосовой связью. BYOM полезен для следующих сценариев:
- Настроенные модели: Используйте пользовательские модели Azure OpenAI или Azure Foundry.
-
Любая модель Foundry, не предварительно развернутая Voice Live: используйте модели из каталога Foundry, такие как Anthropic Claude, Grok, Fireworks с пользовательскими весами или развертывание модельного маршрутизатора
-
Подготовленная пропускная способность. Использование развертываний PTU (подготовленных единиц пропускной способности) для обеспечения согласованной производительности
-
Безопасность содержимого. Применение настраиваемых конфигураций безопасности содержимого с помощью LLM
Это важно
Вы можете интегрировать любую модель, развернутую в ресурсе Azure Foundry, с API голосовой трансляции. Для использования развертываний моделей из другого ресурса Foundry см. в разделе «Переопределения ресурсов».
Подсказка
При использовании собственного развертывания модели с голосовой трансляцией рекомендуется настроить фильтрацию содержимого на асинхронную фильтрацию, чтобы уменьшить задержку. Параметры фильтрации содержимого можно настроить на портале Microsoft Foundry.
Настройка проверки подлинности
При использовании проверки подлинности Microsoft Entra ID с Voice Live API в режиме byom-azure-openai-chat-completion или byom-foundry-anthropic-messages необходимо правильно настроить соответствующие разрешения для ресурса Foundry. Так как срок действия токенов истекает во время длительных сеансов, управляемая системой удостоверение ресурса Foundry требует доступа к развёртыванию моделей в этих режимах BYOM.
Выполните следующие команды Azure CLI, чтобы настроить необходимые разрешения:
export subscription_id=<your-subscription-id>
export resource_group=<your-resource-group>
export foundry_resource=<your-foundry-resource>
# Enable system-assigned managed identity for the foundry resource
az cognitiveservices account identity assign --name ${foundry_resource} --resource-group ${resource_group} --subscription ${subscription_id}
# Get the system-assigned managed identity object ID
identity_principal_id=$(az cognitiveservices account show --name ${foundry_resource} --resource-group ${resource_group} --subscription ${subscription_id} --query "identity.principalId" -o tsv)
# Assign the Azure AI User role to the system identity of the foundry resource
az role assignment create --assignee-object-id ${identity_principal_id} --role "Azure AI User" --scope /subscriptions/${subscription_id}/resourceGroups/${resource_group}/providers/Microsoft.CognitiveServices/accounts/${foundry_resource}
Аутентификация между ресурсами
При использовании переопределения ресурсов настройка проверки подлинности является обязательной вне зависимости от используемого метода проверки подлинности (ключ API или Microsoft Entra ID). Необходимо настроить разрешения как для ресурса Voice Live Foundry, так и для ресурса модели Foundry. Выполните следующие команды, чтобы настроить необходимые разрешения:
export subscription_id_for_model=<your-subscription-id-for-model-resource>
export resource_group_for_model=<your-resource-group-for-model-resource>
export foundry_resource_for_model=<your-foundry-resource-for-model>
export subscription_id_for_voice_live=<your-subscription-id-for-voice-live-resource>
export resource_group_for_voice_live=<your-resource-group-for-voice-live-resource>
export foundry_resource_for_voice_live=<your-foundry-resource-for-voice-live>
# Enable system-assigned managed identity for the Voice Live Foundry resource
az cognitiveservices account identity assign \
--name ${foundry_resource_for_voice_live} \
--resource-group ${resource_group_for_voice_live} \
--subscription ${subscription_id_for_voice_live}
# Get the system-assigned managed identity object ID
# for the Voice Live resource
identity_principal_id=$(az cognitiveservices account show \
--name ${foundry_resource_for_voice_live} \
--resource-group ${resource_group_for_voice_live} \
--subscription ${subscription_id_for_voice_live} \
--query "identity.principalId" -o tsv)
# Assign the Azure AI User role to the Voice Live resource's
# system identity on the model Foundry resource
az role assignment create \
--assignee-object-id ${identity_principal_id} \
--role "Azure AI User" \
--scope /subscriptions/${subscription_id_for_model}/resourceGroups/${resource_group_for_model}/providers/Microsoft.CognitiveServices/accounts/${foundry_resource_for_model}
Выбор режима интеграции BYOM
API Голосовой трансляции поддерживает три режима интеграции BYOM:
| Mode |
Description |
Примеры моделей |
byom-azure-openai-realtime |
Azure модели OpenAI в режиме реального времени для потоковой передачи голосовых взаимодействий |
gpt-realtime, gpt-realtime-mini |
byom-azure-openai-chat-completion |
Модели завершения диалога для взаимодействия на основе текста из Azure OpenAI. Также применяется к другим моделям Foundry |
gpt-5.4
gpt-5.3-chat
grok-4
|
byom-foundry-anthropic-messages |
Модели Anthropic Claude, развернутые в Azure Foundry, с помощью API сообщений (предварительная версия) |
claude-sonnet-4.6, claude-haiku-4.5 |
Замечание
В byom-foundry-anthropic-messages настоящее время режим находится в режиме предварительной версии. Предварительные версии функций могут изменяться и могут иметь ограниченную доступность.
Интегрировать BYOM
Обновите URL-адрес конечной точки в вызове API, чтобы включить конфигурацию BYOM:
wss://<your-foundry-resource>.cognitiveservices.azure.com/voice-live/realtime?api-version=2025-10-01&profile=<your-byom-mode>&model=<your-model-deployment>
Получите значение <your-model-deployment> на портале Foundry. Это соответствует имени, заданному вами модели во время развертывания.
Например, чтобы использовать модель Anthropic Claude, развернутую в Azure Foundry:
wss://<your-foundry-resource>.cognitiveservices.azure.com/voice-live/realtime?api-version=2025-10-01&profile=byom-foundry-anthropic-messages&model=<your-claude-deployment-name>
Чтобы использовать развертывание модели из другого ресурса Foundry, добавьте параметр foundry-resource-override.
wss://<your-foundry-resource>.cognitiveservices.azure.com/voice-live/realtime?api-version=2025-10-01&profile=<your-byom-mode>&model=<your-model-deployment>&foundry-resource-override=<foundry-resource>
Значением <foundry-resource> является имя ресурса без суффикса домена. Например, если конечная точка ресурса Foundry имеет значение https://my-foundry-resource.services.ai.azure.com, используйте my-foundry-resource.
документация Справочная документация | Пакет (PyPi) | Дополнительные примеры на GitHub
Используйте код краткого руководства по пакету SDK Python для запуска голосовой беседы и внесите следующие изменения, чтобы включить BYOM:
parse_arguments() В функции добавьте новый аргумент для типа профиля BYOM:
parser.add_argument(
"--byom",
help="BYOM (Bring Your Own Model) profile type",
type=str,
choices=["byom-azure-openai-realtime", "byom-azure-openai-chat-completion", "byom-foundry-anthropic-messages"],
default=os.environ.get("VOICELIVE_BYOM_MODE", "byom-azure-openai-chat-completion"),
)
parser.add_argument(
"--foundry-resource-override",
help="Override the Foundry resource for cross-resource BYOM",
type=str,
default=os.environ.get("VOICELIVE_FOUNDRY_RESOURCE_OVERRIDE"),
)
В функции main() добавьте поле byom при создании голосового помощника.
# Create and start voice assistant
assistant = BasicVoiceAssistant(
...
byom=args.byom,
foundry_resource_override=args.foundry_resource_override,
...
)
Добавьте поля BasicVoiceAssistant и byom в классе foundry_resource_override.
class BasicVoiceAssistant:
"""Basic voice assistant implementing the VoiceLive SDK patterns."""
def __init__(
self,
endpoint: str,
credential: Union[AzureKeyCredential, TokenCredential],
model: str,
voice: str,
instructions: str,
byom: Literal["byom-azure-openai-realtime", "byom-azure-openai-chat-completion", "byom-foundry-anthropic-messages"] | None = None,
foundry_resource_override: str | None = None
):
self.endpoint = endpoint
self.credential = credential
self.model = model
self.voice = voice
self.instructions = instructions
self.connection: Optional["VoiceLiveConnection"] = None
self.audio_processor: Optional[AudioProcessor] = None
self.session_ready = False
self.conversation_started = False
self.byom = byom
self.foundry_resource_override = foundry_resource_override
async def start(self):
"""Start the voice assistant session."""
try:
logger.info(f"Connecting to VoiceLive API with model {self.model}")
# Connect to VoiceLive WebSocket API
query_params = {"profile": self.byom} if self.byom else None
if query_params and self.foundry_resource_override:
query_params["foundry-resource-override"] = self.foundry_resource_override
async with connect(
endpoint=self.endpoint,
credential=self.credential,
model=self.model,
query=query_params
) as connection:
...
При запуске кода укажите --byom аргумент вместе с аргументом --model , чтобы указать профиль BYOM и развертывание модели, которое вы хотите использовать. Рассмотрим пример.
python voice-live-quickstart.py --byom "byom-azure-openai-chat-completion" --model "your-model-name"
Для использования модели Anthropic Claude:
python voice-live-quickstart.py --byom "byom-foundry-anthropic-messages" --model "your-claude-deployment-name"
Чтобы использовать модель из другого ресурса Foundry, добавьте --foundry-resource-override аргумент:
python voice-live-quickstart.py --byom "byom-azure-openai-chat-completion" --model "your-model-name" --foundry-resource-override "my-foundry-resource"
Референс-документация | Пакет (NuGet) | Дополнительные примеры на GitHub
Используйте код быстрого старта VoiceLive SDK для C#, чтобы начать голосовую беседу, и внесите следующие изменения, чтобы включить BYOM:
Добавьте System.Web и System.Runtime.InteropServices директивы using в верхней части файла.
using System.Web;
using System.Runtime.InteropServices;
CreateRootCommand В функции замените код следующим, чтобы добавить "byomOption":
private static RootCommand CreateRootCommand()
{
var rootCommand = new RootCommand("Basic Voice Assistant using Azure VoiceLive SDK");
var apiKeyOption = new Option<string?>(
"--api-key",
"Azure VoiceLive API key. If not provided, will use AZURE_VOICELIVE_API_KEY environment variable.");
var endpointOption = new Option<string>(
"--endpoint",
() => "wss://api.voicelive.com/v1",
"Azure VoiceLive endpoint");
var modelOption = new Option<string>(
"--model",
() => "gpt-4o",
"VoiceLive model to use");
var byomOption = new Option<string>(
"--byom",
() => "byom-azure-openai-chat-completion",
"BYOM integration mode. Supported modes: byom-azure-openai-realtime, byom-azure-openai-chat-completion, byom-foundry-anthropic-messages");
var foundryResourceOverrideOption = new Option<string?>(
"--foundry-resource-override",
"Override the Foundry resource for cross-resource BYOM");
var voiceOption = new Option<string>(
"--voice",
() => "en-US-AvaNeural",
"Voice to use for the assistant");
var instructionsOption = new Option<string>(
"--instructions",
() => "You are a helpful AI assistant. Respond naturally and conversationally. Keep your responses concise but engaging. Always start the conversation in English.",
"System instructions for the AI assistant");
var useTokenCredentialOption = new Option<bool>(
"--use-token-credential",
"Use Azure token credential instead of API key");
var verboseOption = new Option<bool>(
"--verbose",
"Enable verbose logging");
rootCommand.AddOption(apiKeyOption);
rootCommand.AddOption(endpointOption);
rootCommand.AddOption(modelOption);
rootCommand.AddOption(byomOption);
rootCommand.AddOption(foundryResourceOverrideOption);
rootCommand.AddOption(voiceOption);
rootCommand.AddOption(instructionsOption);
rootCommand.AddOption(useTokenCredentialOption);
rootCommand.AddOption(verboseOption);
rootCommand.SetHandler(async (
string? apiKey,
string endpoint,
string model,
string byom,
string? foundryResourceOverride,
string voice,
string instructions,
bool useTokenCredential,
bool verbose) =>
{
await RunVoiceAssistantAsync(apiKey, endpoint, model, byom, foundryResourceOverride, voice, instructions, useTokenCredential, verbose).ConfigureAwait(false);
},
apiKeyOption,
endpointOption,
modelOption,
byomOption,
foundryResourceOverrideOption,
voiceOption,
instructionsOption,
useTokenCredentialOption,
verboseOption);
return rootCommand;
}
В функции RunVoiceAssistantAsyncдобавьте параметр byom и настройку конфигурации:
private static async Task RunVoiceAssistantAsync(
string? apiKey,
string endpoint,
string model,
string byom,
string? foundryResourceOverride,
string voice,
string instructions,
bool useTokenCredential,
bool verbose)
{
// Setup configuration
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true)
.AddEnvironmentVariables()
.Build();
// Override with command line values if provided
apiKey ??= configuration["VoiceLive:ApiKey"] ?? Environment.GetEnvironmentVariable("AZURE_VOICELIVE_API_KEY");
endpoint = configuration["VoiceLive:Endpoint"] ?? endpoint;
model = configuration["VoiceLive:Model"] ?? model;
byom = configuration["VoiceLive:Byom"] ?? byom;
foundryResourceOverride ??= configuration["VoiceLive:FoundryResourceOverride"];
voice = configuration["VoiceLive:Voice"] ?? voice;
instructions = configuration["VoiceLive:Instructions"] ?? instructions;
...
В функции RunVoiceAssistantAsync добавьте параметр профиля BYOM к URL-адресу конечной точки перед созданием клиента:
try
{
// Append BYOM profile parameter to the endpoint URL if provided
if (!string.IsNullOrEmpty(byom))
{
var uriBuilder = new UriBuilder(endpoint);
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
query["profile"] = byom;
if (!string.IsNullOrEmpty(foundryResourceOverride))
{
query["foundry-resource-override"] = foundryResourceOverride;
}
uriBuilder.Query = query.ToString();
endpoint = uriBuilder.ToString();
logger.LogInformation("BYOM profile parameter added to endpoint: profile={Profile}", byom);
}
// Create client with appropriate credential
VoiceLiveClient client;
var endpointUri = new Uri(endpoint);
if (useTokenCredential)
{
var tokenCredential = new DefaultAzureCredential();
client = new VoiceLiveClient(endpointUri, tokenCredential, new VoiceLiveClientOptions());
logger.LogInformation("Using Azure token credential");
}
else
{
var keyCredential = new Azure.AzureKeyCredential(apiKey!);
client = new VoiceLiveClient(endpointUri, keyCredential, new VoiceLiveClientOptions());
logger.LogInformation("Using API key credential");
}
...
В функции RunVoiceAssistantAsyncдобавьте "byom" в настройку голосового помощника:
...
// Create and start voice assistant
using var assistant = new BasicVoiceAssistant(
client,
model,
byom,
voice,
instructions,
loggerFactory);
...
В классе BasicVoiceAssistantдобавьте _byom поле и обновите конструктор:
public class BasicVoiceAssistant : IDisposable
{
private readonly VoiceLiveClient _client;
private readonly string _model;
private readonly string _byom;
private readonly string _voice;
private readonly string _instructions;
...
public BasicVoiceAssistant(
VoiceLiveClient client,
string model,
string byom,
string voice,
string instructions,
ILoggerFactory loggerFactory)
{
_client = client ?? throw new ArgumentNullException(nameof(client));
_model = model ?? throw new ArgumentNullException(nameof(model));
_byom = byom ?? throw new ArgumentNullException(nameof(byom));
_voice = voice ?? throw new ArgumentNullException(nameof(voice));
_instructions = instructions ?? throw new ArgumentNullException(nameof(instructions));
_loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
_logger = loggerFactory.CreateLogger<BasicVoiceAssistant>();
}
...
В функции StartAsync обновите вызовы логирования и запуска сеанса (профиль BYOM уже находится в конечной точке):
public async Task StartAsync(CancellationToken cancellationToken = default)
{
try
{
_logger.LogInformation("Connecting to VoiceLive API with model {Model} and BYOM mode {Byom}", _model, _byom);
// Start VoiceLive session (BYOM profile is already in the client endpoint)
_session = await _client.StartSessionAsync(_model, cancellationToken).ConfigureAwait(false);
...
При запуске кода укажите --byom аргумент вместе с аргументом --model , чтобы указать профиль BYOM и развертывание модели, которое вы хотите использовать. Рассмотрим пример.
dotnet run --byom "byom-azure-openai-chat-completion" --model "your-model-name"
Для использования модели Anthropic Claude:
dotnet run --byom "byom-foundry-anthropic-messages" --model "your-claude-deployment-name"
Чтобы использовать модель из другого ресурса Foundry, добавьте --foundry-resource-override аргумент:
dotnet run --byom "byom-azure-openai-chat-completion" --model "your-model-name" --foundry-resource-override "my-foundry-resource"
Справочная документация | Package (Maven) | Дополнительные примеры на GitHub
Используйте код краткого запуска пакета SDK Java для запуска голосовой беседы и внесите следующие изменения, чтобы включить BYOM:
java.net.URI и java.net.URISyntaxException добавьте инструкции импорта в начало файла:
import java.net.URI;
import java.net.URISyntaxException;
Config В классе добавьте byom поле и выполните синтаксический анализ аргумента командной --byom строки:
private static class Config {
String endpoint;
String apiKey;
String model = DEFAULT_MODEL;
String voice = DEFAULT_VOICE;
String instructions = DEFAULT_INSTRUCTIONS;
String byom = null;
boolean useTokenCredential = false;
static Config load(String[] args) {
Config config = new Config();
// 1. Load from application.properties first
Properties props = loadProperties();
if (props != null) {
config.endpoint = props.getProperty("azure.voicelive.endpoint");
config.apiKey = props.getProperty("azure.voicelive.api-key");
config.model = props.getProperty("azure.voicelive.model", DEFAULT_MODEL);
config.voice = props.getProperty("azure.voicelive.voice", DEFAULT_VOICE);
config.instructions = props.getProperty("azure.voicelive.instructions", DEFAULT_INSTRUCTIONS);
config.byom = props.getProperty("azure.voicelive.byom");
}
// 2. Override with environment variables if present
if (System.getenv(ENV_ENDPOINT) != null) {
config.endpoint = System.getenv(ENV_ENDPOINT);
}
if (System.getenv(ENV_API_KEY) != null) {
config.apiKey = System.getenv(ENV_API_KEY);
}
if (System.getenv("AZURE_VOICELIVE_MODEL") != null) {
config.model = System.getenv("AZURE_VOICELIVE_MODEL");
}
if (System.getenv("AZURE_VOICELIVE_VOICE") != null) {
config.voice = System.getenv("AZURE_VOICELIVE_VOICE");
}
if (System.getenv("AZURE_VOICELIVE_INSTRUCTIONS") != null) {
config.instructions = System.getenv("AZURE_VOICELIVE_INSTRUCTIONS");
}
if (System.getenv("VOICELIVE_BYOM_MODE") != null) {
config.byom = System.getenv("VOICELIVE_BYOM_MODE");
}
// 3. Parse command line arguments (highest priority)
for (int i = 0; i < args.length; i++) {
switch (args[i]) {
case "--endpoint":
if (i + 1 < args.length) config.endpoint = args[++i];
break;
case "--api-key":
if (i + 1 < args.length) config.apiKey = args[++i];
break;
case "--model":
if (i + 1 < args.length) config.model = args[++i];
break;
case "--voice":
if (i + 1 < args.length) config.voice = args[++i];
break;
case "--instructions":
if (i + 1 < args.length) config.instructions = args[++i];
break;
case "--byom":
if (i + 1 < args.length) config.byom = args[++i];
break;
case "--use-token-credential":
config.useTokenCredential = true;
break;
}
}
return config;
}
}
В методе runVoiceAssistantWithClient добавьте параметр запроса профиля BYOM к URL-адресу конечной точки перед созданием клиента. Замените две runVoiceAssistant перегрузки версиями, обрабатывающими изменение конечной точки:
private static void runVoiceAssistant(Config config, KeyCredential credential) {
String endpoint = appendByomProfile(config.endpoint, config.byom);
System.out.println("Initializing VoiceLive client:");
System.out.println(" Endpoint: " + endpoint);
if (config.byom != null) {
System.out.println(" BYOM profile: " + config.byom);
}
VoiceLiveAsyncClient client = new VoiceLiveClientBuilder()
.endpoint(endpoint)
.credential(credential)
.serviceVersion(VoiceLiveServiceVersion.V2025_10_01)
.buildAsyncClient();
runVoiceAssistantWithClient(client, config);
}
private static void runVoiceAssistant(Config config, TokenCredential credential) {
String endpoint = appendByomProfile(config.endpoint, config.byom);
System.out.println("Initializing VoiceLive client:");
System.out.println(" Endpoint: " + endpoint);
if (config.byom != null) {
System.out.println(" BYOM profile: " + config.byom);
}
VoiceLiveAsyncClient client = new VoiceLiveClientBuilder()
.endpoint(endpoint)
.credential(credential)
.serviceVersion(VoiceLiveServiceVersion.V2025_10_01)
.buildAsyncClient();
runVoiceAssistantWithClient(client, config);
}
Добавьте вспомогательный appendByomProfile метод, добавляющий профиль BYOM в качестве параметра запроса к URL-адресу конечной точки:
private static String appendByomProfile(String endpoint, String byom) {
if (byom == null || byom.isEmpty()) {
return endpoint;
}
try {
URI uri = new URI(endpoint);
String existingQuery = uri.getQuery();
String newQuery = (existingQuery != null && !existingQuery.isEmpty())
? existingQuery + "&profile=" + byom
: "profile=" + byom;
URI newUri = new URI(
uri.getScheme(), uri.getAuthority(), uri.getPath(),
newQuery, uri.getFragment());
return newUri.toString();
} catch (URISyntaxException e) {
System.err.println("Failed to append BYOM profile to endpoint: "
+ e.getMessage());
return endpoint;
}
}
При запуске кода укажите --byom аргумент вместе с аргументом --model , чтобы указать профиль BYOM и развертывание модели, которое вы хотите использовать. Рассмотрим пример.
mvn exec:java -Dexec.args="--byom byom-azure-openai-chat-completion --model your-model-name"
Справочная документация | Пакет (npm) | Дополнительные примеры на GitHub
Используйте код краткого руководства по пакету SDK для JavaScript для запуска голосовой беседы и внесите следующие изменения, чтобы включить BYOM:
parseArguments() В функции добавьте новый --byom аргумент:
const parsed = {
...
byom: process.env.VOICELIVE_BYOM_MODE ?? undefined,
...
};
for (let i = 0; i < argv.length; i++) {
const arg = argv[i];
switch (arg) {
...
case "--byom":
parsed.byom = argv[++i];
break;
...
}
}
В функции main(), передайте значение byom при создании голосового помощника.
const assistant = new BasicModelVoiceAssistant({
...
byom: args.byom,
...
});
В классе BasicModelVoiceAssistant добавьте поле byom в конструкторе:
class BasicModelVoiceAssistant {
constructor(options) {
...
this.byom = options.byom;
...
}
...
В методе start() добавьте параметр запроса профиля BYOM к URL-адресу конечной точки перед созданием клиента:
async start() {
let endpoint = this.endpoint;
// Append BYOM profile query parameter if provided
if (this.byom) {
const url = new URL(endpoint);
url.searchParams.set("profile", this.byom);
endpoint = url.toString();
console.log(`[init] BYOM profile added to endpoint: profile=${this.byom}`);
}
const client = new VoiceLiveClient(endpoint, this.credential);
const session = client.createSession({ model: this.model });
this._session = session;
...
При запуске кода укажите --byom аргумент вместе с аргументом --model , чтобы указать профиль BYOM и развертывание модели, которое вы хотите использовать. Рассмотрим пример.
node model-quickstart.js --byom "byom-azure-openai-chat-completion" --model "your-model-name"
Замечание
При использовании режима byom-foundry-anthropic-messages поле usage в событиях response.done содержит только использование аудио токенов, применяемых для распознавания речи и преобразования текста в речь. Использование маркера LLM из модели Anthropic сообщается отдельно в метаданных ответа.
Переопределения ресурсов
По умолчанию Voice Live API использует развертывания LLM в том же ресурсе Foundry, что и служба Voice Live. Если развертывания модели находятся в другом ресурсе Foundry, укажите foundry-resource-override параметр запроса для перенаправления API в правильный ресурс. Это поддерживает сценарии между регионами, в которых служба Voice Live и развертывания модели находятся в разных регионах.
Значением foundry-resource-override является имя ресурса без суффикса домена. Например, если конечная точка ресурса Foundry имеет значение https://my-foundry-resource.services.ai.azure.com, используйте my-foundry-resource.
Дополнительные сведения о реализации см. на каждой вкладке в разделе "Интеграция BYOM ".
Это важно
При использовании переопределений ресурсов необходимо настроить проверку подлинности cross-resource authentication независимо от метода проверки подлинности (ключ API или Microsoft Entra ID).
Связанный контент