Reunir entradas do usuário com a ação “Reconhecer”
Este guia ajuda você a começar a usar o reconhecimento da entrada DTMF fornecido pelos participantes por meio do SDK de Automação de Chamadas dos Serviços de Comunicação do Azure.
Pré-requisitos
- Conta do Azure com uma assinatura ativa, para obter detalhes, veja Criar uma conta gratuitamente..
- Recurso dos Serviços de Comunicação do Azure. Veja Criar um recurso dos Serviços de Comunicação do Azure. Observe a cadeia de conexão para esse recurso.
- Crie um aplicativo de serviço Web usando o SDK de Automação de Chamadas.
- A versão mais recente da biblioteca .NET para seu sistema operacional.
- O último pacote NuGet.
Para recursos de IA
- Crie e conecte os serviços de IA do Azure ao seu recurso dos Serviços de Comunicação do Azure.
- Crie um subdomínio personalizado para seu recurso de serviços de IA do Azure.
Especificações técnicas
Os seguintes parâmetros estão disponíveis para personalizar a função Recognize:
Parâmetro | Tipo | Padrão (se não especificado) | Descrição | Obrigatória ou opcional |
---|---|---|---|---|
Prompt (Para obter detalhes, consulte Personalizar comandos de voz para usuários com a ação de Executar) |
FileSource, TextSource | Não definido | A mensagem a ser reproduzida antes de reconhecer a entrada. | Opcional |
InterToneTimeout |
TimeSpan | 2 segundos Mínimo: 1 segundo Máximo: 60 segundos |
Limite em segundos que os Serviços de Comunicação do Azure esperam para que o chamador pressione outro dígito (tempo limite entre dígitos). | Opcional |
InitialSegmentationSilenceTimeoutInSeconds |
Inteiro | 0,5 segundo | Quanto tempo a ação de reconhecimento espera pela entrada antes de considerá-la um tempo limite. Consulte Como reconhecer a fala. | Opcional |
RecognizeInputsType |
Enum | dtmf | Tipo de entrada reconhecida. As opções são dtmf , choices , speech e speechordtmf . |
Obrigatório |
InitialSilenceTimeout |
TimeSpan | 5 segundos Mínimo: 0 segundo Máximo: 300 segundos (DTMF) Máximo: 20 segundos (Opções) Máximo: 20 segundos (Fala) |
OTempo limite de silêncio inicial ajusta a quantidade de áudio sem fala permitido antes que uma frase antes da tentativa de reconhecimento termine em um resultado "sem correspondência". Consulte Como reconhecer a fala. | Opcional |
MaxTonesToCollect |
Inteiro | Nenhum padrão Mínimo: 1 |
Número de dígitos que um desenvolvedor espera como entrada do participante. | Obrigatório |
StopTones |
IEnumeration<DtmfTone> | Não definido | Os participantes de dígito podem pressionar um dígito para sair de um evento DTMF em lote. | Opcional |
InterruptPrompt |
Bool | Verdadeiro | Se o participante tiver a capacidade de interromper a playMessage pressionando um dígito. | Opcional |
InterruptCallMediaOperation |
Bool | Verdadeiro | Se esse sinalizador for definido, ele interromperá a operação de mídia da chamada atual. Por exemplo, se algum áudio estiver sendo reproduzido, ele interromperá essa operação e iniciará o reconhecimento. | Opcional |
OperationContext |
String | Não definido | Cadeia de caracteres que os desenvolvedores podem transmitir no meio da ação. Útil para permitir que os desenvolvedores armazenem o contexto sobre os eventos recebidos. | Opcional |
Phrases |
String | Não definido | Lista de frases que associam ao rótulo. Ouvir qualquer uma dessas frases resulta em um reconhecimento bem-sucedido. | Obrigatório |
Tone |
String | Não definido | O tom a ser reconhecido se o usuário decidir pressionar um número em vez de usar a fala. | Opcional |
Label |
String | Não definido | O valor da chave para o reconhecimento. | Obrigatório |
Language |
String | En-us | O idioma usado para o reconhecimento de fala. | Opcional |
EndSilenceTimeout |
TimeSpan | 0,5 segundo | A pausa final do alto-falante usada para detectar o resultado final que é gerado como fala. | Opcional |
Observação
Em situações em que a DTMF e Fala estão no recognizeInputsType
, a ação de reconhecimento atua no primeiro tipo de entrada recebido. Por exemplo, se o usuário pressionar um número de teclado primeiro, a ação de reconhecimento considerará um evento de DTMF e continuará escutando tons da DTMF. Se o usuário falar primeiro, a ação de reconhecimento considerará isso um evento de reconhecimento de fala e ouvirá a entrada de voz.
Criar um aplicativo em C#
Na janela do console do sistema operacional, use o comando dotnet
para criar um aplicativo Web.
dotnet new web -n MyApplication
Instalar o pacote NuGet
Obter o pacote NuGet da Galeria do NuGet | Azure.Communication.CallAutomation. Siga as instruções para instalar o pacote.
Estabelecer uma chamada
A essa altura, é necessário estar familiarizado com as chamadas iniciais. Para obter mais informações sobre como fazer uma chamada, consulte Início Rápido: fazer e chamar de saída. Você também pode usar o trecho de código fornecido aqui para entender como atender a uma chamada.
var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");
var answerCallOptions = new AnswerCallOptions("<Incoming call context once call is connected>", new Uri("<https://sample-callback-uri>"))
{
CallIntelligenceOptions = new CallIntelligenceOptions() { CognitiveServicesEndpoint = new Uri("<Azure Cognitive Services Endpoint>") }
};
var answerCallResult = await callAutomationClient.AnswerCallAsync(answerCallOptions);
Chamar a ação de reconhecimento
Quando o seu aplicativo atende à chamada, você pode fornecer informações sobre como reconhecer a entrada do participante e reproduzir um prompt.
DTMF
var maxTonesToCollect = 3;
String textToPlay = "Welcome to Contoso, please enter 3 DTMF.";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeDtmfOptions(targetParticipant, maxTonesToCollect) {
InitialSilenceTimeout = TimeSpan.FromSeconds(30),
Prompt = playSource,
InterToneTimeout = TimeSpan.FromSeconds(5),
InterruptPrompt = true,
StopTones = new DtmfTone[] {
DtmfTone.Pound
},
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Para fluxos de conversão de fala em texto, a ação de reconhecimento da Automação de chamadas também dá suporte ao uso de modelos de Fala Personalizadas. Recursos como modelos de Fala Personalizadas podem ser úteis ao criar um aplicativo que precisa escutar palavras complexas as quais os modelos padrão de reconhecimento de fala podem não compreender. Um exemplo é quando você está criando um aplicativo para o setor da telemedicina e seu agente virtual precisa ter a habilidade de reconhecer termos médicos. Saiba mais em Criar um projeto de Fala Personalizada.
Opções de conversão de fala em texto
var choices = new List < RecognitionChoice > {
new RecognitionChoice("Confirm", new List < string > {
"Confirm",
"First",
"One"
}) {
Tone = DtmfTone.One
},
new RecognitionChoice("Cancel", new List < string > {
"Cancel",
"Second",
"Two"
}) {
Tone = DtmfTone.Two
}
};
String textToPlay = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeChoiceOptions(targetParticipant, choices) {
InterruptPrompt = true,
InitialSilenceTimeout = TimeSpan.FromSeconds(30),
Prompt = playSource,
OperationContext = "AppointmentReminderMenu",
//Only add the SpeechModelEndpointId if you have a custom speech model you would like to use
SpeechModelEndpointId = "YourCustomSpeechModelEndpointId"
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Conversão de Fala em Texto
String textToPlay = "Hi, how can I help you today?";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOptions(targetParticipant) {
Prompt = playSource,
EndSilenceTimeout = TimeSpan.FromMilliseconds(1000),
OperationContext = "OpenQuestionSpeech",
//Only add the SpeechModelEndpointId if you have a custom speech model you would like to use
SpeechModelEndpointId = "YourCustomSpeechModelEndpointId"
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Conversão de fala em texto ou DTMF
var maxTonesToCollect = 1;
String textToPlay = "Hi, how can I help you today, you can press 0 to speak to an agent?";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOrDtmfOptions(targetParticipant, maxTonesToCollect)
{
Prompt = playSource,
EndSilenceTimeout = TimeSpan.FromMilliseconds(1000),
InitialSilenceTimeout = TimeSpan.FromSeconds(30),
InterruptPrompt = true,
OperationContext = "OpenQuestionSpeechOrDtmf",
//Only add the SpeechModelEndpointId if you have a custom speech model you would like to use
SpeechModelEndpointId = "YourCustomSpeechModelEndpointId"
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Observação
Se os parâmetros não forem definidos, os padrões serão aplicados sempre que possível.
Como receber atualizações de eventos de reconhecimento
Os desenvolvedores podem se inscrever em eventos RecognizeCompleted
e RecognizeFailed
no retorno de chamada de webhook registrado. Use esse retorno de chamada com lógica de negócios em seu aplicativo para determinar as próximas etapas quando um dos eventos ocorrer.
Exemplo de como você pode desserializar o evento RecognizeCompleted:
if (acsEvent is RecognizeCompleted recognizeCompleted)
{
switch (recognizeCompleted.RecognizeResult)
{
case DtmfResult dtmfResult:
//Take action for Recognition through DTMF
var tones = dtmfResult.Tones;
logger.LogInformation("Recognize completed succesfully, tones={tones}", tones);
break;
case ChoiceResult choiceResult:
// Take action for Recognition through Choices
var labelDetected = choiceResult.Label;
var phraseDetected = choiceResult.RecognizedPhrase;
// If choice is detected by phrase, choiceResult.RecognizedPhrase will have the phrase detected,
// If choice is detected using dtmf tone, phrase will be null
logger.LogInformation("Recognize completed succesfully, labelDetected={labelDetected}, phraseDetected={phraseDetected}", labelDetected, phraseDetected);
break;
case SpeechResult speechResult:
// Take action for Recognition through Choices
var text = speechResult.Speech;
logger.LogInformation("Recognize completed succesfully, text={text}", text);
break;
default:
logger.LogInformation("Recognize completed succesfully, recognizeResult={recognizeResult}", recognizeCompleted.RecognizeResult);
break;
}
}
Exemplo de como você pode desserializar o evento RecognizeFailed:
if (acsEvent is RecognizeFailed recognizeFailed)
{
if (MediaEventReasonCode.RecognizeInitialSilenceTimedOut.Equals(recognizeFailed.ReasonCode))
{
// Take action for time out
logger.LogInformation("Recognition failed: initial silencev time out");
}
else if (MediaEventReasonCode.RecognizeSpeechOptionNotMatched.Equals(recognizeFailed.ReasonCode))
{
// Take action for option not matched
logger.LogInformation("Recognition failed: speech option not matched");
}
else if (MediaEventReasonCode.RecognizeIncorrectToneDetected.Equals(recognizeFailed.ReasonCode))
{
// Take action for incorrect tone
logger.LogInformation("Recognition failed: incorrect tone detected");
}
else
{
logger.LogInformation("Recognition failed, result={result}, context={context}", recognizeFailed.ResultInformation?.Message, recognizeFailed.OperationContext);
}
}
Exemplo de como você pode desserializar o evento RecognizeCanceled:
if (acsEvent is RecognizeCanceled { OperationContext: "AppointmentReminderMenu" })
{
logger.LogInformation($"RecognizeCanceled event received for call connection id: {@event.CallConnectionId}");
//Take action on recognize canceled operation
await callConnection.HangUpAsync(forEveryone: true);
}
Pré-requisitos
- Conta do Azure com uma assinatura ativa, para obter detalhes, veja Criar uma conta gratuitamente..
- Recurso dos Serviços de Comunicação do Azure. Veja Criar um recurso dos Serviços de Comunicação do Azure
- Crie um aplicativo de serviço Web usando o SDK de Automação de Chamadas.
- Java Development Kit versão 8 ou superior.
- Apache Maven.
Para recursos de IA
- Crie e conecte os serviços de IA do Azure ao seu recurso dos Serviços de Comunicação do Azure.
- Crie um subdomínio personalizado para seu recurso de serviços de IA do Azure.
Especificações técnicas
Os seguintes parâmetros estão disponíveis para personalizar a função Recognize:
Parâmetro | Tipo | Padrão (se não especificado) | Descrição | Obrigatória ou opcional |
---|---|---|---|---|
Prompt (Para obter detalhes, consulte Personalizar comandos de voz para usuários com a ação de Executar) |
FileSource, TextSource | Não definido | A mensagem a ser reproduzida antes de reconhecer a entrada. | Opcional |
InterToneTimeout |
TimeSpan | 2 segundos Mínimo: 1 segundo Máximo: 60 segundos |
Limite em segundos que os Serviços de Comunicação do Azure esperam para que o chamador pressione outro dígito (tempo limite entre dígitos). | Opcional |
InitialSegmentationSilenceTimeoutInSeconds |
Inteiro | 0,5 segundo | Quanto tempo a ação de reconhecimento espera pela entrada antes de considerá-la um tempo limite. Consulte Como reconhecer a fala. | Opcional |
RecognizeInputsType |
Enum | dtmf | Tipo de entrada reconhecida. As opções são dtmf , choices , speech e speechordtmf . |
Obrigatório |
InitialSilenceTimeout |
TimeSpan | 5 segundos Mínimo: 0 segundo Máximo: 300 segundos (DTMF) Máximo: 20 segundos (Opções) Máximo: 20 segundos (Fala) |
OTempo limite de silêncio inicial ajusta a quantidade de áudio sem fala permitido antes que uma frase antes da tentativa de reconhecimento termine em um resultado "sem correspondência". Consulte Como reconhecer a fala. | Opcional |
MaxTonesToCollect |
Inteiro | Nenhum padrão Mínimo: 1 |
Número de dígitos que um desenvolvedor espera como entrada do participante. | Obrigatório |
StopTones |
IEnumeration<DtmfTone> | Não definido | Os participantes de dígito podem pressionar um dígito para sair de um evento DTMF em lote. | Opcional |
InterruptPrompt |
Bool | Verdadeiro | Se o participante tiver a capacidade de interromper a playMessage pressionando um dígito. | Opcional |
InterruptCallMediaOperation |
Bool | Verdadeiro | Se esse sinalizador for definido, ele interromperá a operação de mídia da chamada atual. Por exemplo, se algum áudio estiver sendo reproduzido, ele interromperá essa operação e iniciará o reconhecimento. | Opcional |
OperationContext |
String | Não definido | Cadeia de caracteres que os desenvolvedores podem transmitir no meio da ação. Útil para permitir que os desenvolvedores armazenem o contexto sobre os eventos recebidos. | Opcional |
Phrases |
String | Não definido | Lista de frases que associam ao rótulo. Ouvir qualquer uma dessas frases resulta em um reconhecimento bem-sucedido. | Obrigatório |
Tone |
String | Não definido | O tom a ser reconhecido se o usuário decidir pressionar um número em vez de usar a fala. | Opcional |
Label |
String | Não definido | O valor da chave para o reconhecimento. | Obrigatório |
Language |
String | En-us | O idioma usado para o reconhecimento de fala. | Opcional |
EndSilenceTimeout |
TimeSpan | 0,5 segundo | A pausa final do alto-falante usada para detectar o resultado final que é gerado como fala. | Opcional |
Observação
Em situações em que a DTMF e Fala estão no recognizeInputsType
, a ação de reconhecimento atua no primeiro tipo de entrada recebido. Por exemplo, se o usuário pressionar um número de teclado primeiro, a ação de reconhecimento considerará um evento de DTMF e continuará escutando tons da DTMF. Se o usuário falar primeiro, a ação de reconhecimento considerará isso um evento de reconhecimento de fala e ouvirá a entrada de voz.
Criar um aplicativo Java
Em seu terminal ou janela de comando, navegue até o diretório no qual você deseja criar o seu aplicativo Java. Execute o comando mvn
para gerar o projeto Java a partir do modelo maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
O comando mvn
cria um diretório com o mesmo nome que o argumento artifactId
. O diretório src/main/java
contém o código-fonte do projeto. O diretório src/test/java
contém a origem do teste.
Observe que a etapa generate
criou um diretório com o mesmo nome que o artifactId
. O diretório src/main/java
contém o código-fonte. O diretório src/test/java
contém testes. O arquivo pom.xml
é o POM (Project Object Model) do projeto.
Atualize o arquivo POM dos seus aplicativos para usar o Java 8 ou superior.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Adicionar referências do pacote
No arquivo POM, adicione a referência a seguir ao projeto:
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Estabelecer uma chamada
A essa altura, é necessário estar familiarizado com as chamadas iniciais. Para obter mais informações sobre como fazer uma chamada, consulte Início Rápido: fazer e chamar de saída. Você também pode usar o trecho de código fornecido aqui para entender como atender a uma chamada.
CallIntelligenceOptions callIntelligenceOptions = new CallIntelligenceOptions().setCognitiveServicesEndpoint("https://sample-cognitive-service-resource.cognitiveservices.azure.com/");
answerCallOptions = new AnswerCallOptions("<Incoming call context>", "<https://sample-callback-uri>").setCallIntelligenceOptions(callIntelligenceOptions);
Response < AnswerCallResult > answerCallResult = callAutomationClient
.answerCallWithResponse(answerCallOptions)
.block();
Chamar a ação de reconhecimento
Quando o seu aplicativo atende à chamada, você pode fornecer informações sobre como reconhecer a entrada do participante e reproduzir um prompt.
DTMF
var maxTonesToCollect = 3;
String textToPlay = "Welcome to Contoso, please enter 3 DTMF.";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeDtmfOptions(targetParticipant, maxTonesToCollect)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setPlayPrompt(playSource)
.setInterToneTimeout(Duration.ofSeconds(5))
.setInterruptPrompt(true)
.setStopTones(Arrays.asList(DtmfTone.POUND));
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
log.info("Start recognizing result: " + recognizeResponse.getStatusCode());
Para fluxos de conversão de fala em texto, a ação de reconhecimento da Automação de chamadas também dá suporte ao uso de modelos de Fala Personalizadas. Recursos como modelos de Fala Personalizadas podem ser úteis ao criar um aplicativo que precisa escutar palavras complexas as quais os modelos padrão de reconhecimento de fala podem não compreender. Um exemplo é quando você está criando um aplicativo para o setor da telemedicina e seu agente virtual precisa ter a habilidade de reconhecer termos médicos. Saiba mais em Criar um projeto de Fala Personalizada.
Opções de conversão de fala em texto
var choices = Arrays.asList(
new RecognitionChoice()
.setLabel("Confirm")
.setPhrases(Arrays.asList("Confirm", "First", "One"))
.setTone(DtmfTone.ONE),
new RecognitionChoice()
.setLabel("Cancel")
.setPhrases(Arrays.asList("Cancel", "Second", "Two"))
.setTone(DtmfTone.TWO)
);
String textToPlay = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeChoiceOptions(targetParticipant, choices)
.setInterruptPrompt(true)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setPlayPrompt(playSource)
.setOperationContext("AppointmentReminderMenu")
//Only add the SpeechRecognitionModelEndpointId if you have a custom speech model you would like to use
.setSpeechRecognitionModelEndpointId("YourCustomSpeechModelEndpointID");
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
Conversão de Fala em Texto
String textToPlay = "Hi, how can I help you today?";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOptions(targetParticipant, Duration.ofMillis(1000))
.setPlayPrompt(playSource)
.setOperationContext("OpenQuestionSpeech")
//Only add the SpeechRecognitionModelEndpointId if you have a custom speech model you would like to use
.setSpeechRecognitionModelEndpointId("YourCustomSpeechModelEndpointID");
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
Conversão de fala em texto ou DTMF
var maxTonesToCollect = 1;
String textToPlay = "Hi, how can I help you today, you can press 0 to speak to an agent?";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOrDtmfOptions(targetParticipant, maxTonesToCollect, Duration.ofMillis(1000))
.setPlayPrompt(playSource)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setInterruptPrompt(true)
.setOperationContext("OpenQuestionSpeechOrDtmf")
//Only add the SpeechRecognitionModelEndpointId if you have a custom speech model you would like to use
.setSpeechRecognitionModelEndpointId("YourCustomSpeechModelEndpointID");
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
Observação
Se os parâmetros não forem definidos, os padrões serão aplicados sempre que possível.
Como receber atualizações de eventos de reconhecimento
Os desenvolvedores podem se inscrever em eventos RecognizeCompleted
e RecognizeFailed
no retorno de chamada de webhook registrado. Use esse retorno de chamada com lógica de negócios em seu aplicativo para determinar as próximas etapas quando um dos eventos ocorrer.
Exemplo de como você pode desserializar o evento RecognizeCompleted:
if (acsEvent instanceof RecognizeCompleted) {
RecognizeCompleted event = (RecognizeCompleted) acsEvent;
RecognizeResult recognizeResult = event.getRecognizeResult().get();
if (recognizeResult instanceof DtmfResult) {
// Take action on collect tones
DtmfResult dtmfResult = (DtmfResult) recognizeResult;
List<DtmfTone> tones = dtmfResult.getTones();
log.info("Recognition completed, tones=" + tones + ", context=" + event.getOperationContext());
} else if (recognizeResult instanceof ChoiceResult) {
ChoiceResult collectChoiceResult = (ChoiceResult) recognizeResult;
String labelDetected = collectChoiceResult.getLabel();
String phraseDetected = collectChoiceResult.getRecognizedPhrase();
log.info("Recognition completed, labelDetected=" + labelDetected + ", phraseDetected=" + phraseDetected + ", context=" + event.getOperationContext());
} else if (recognizeResult instanceof SpeechResult) {
SpeechResult speechResult = (SpeechResult) recognizeResult;
String text = speechResult.getSpeech();
log.info("Recognition completed, text=" + text + ", context=" + event.getOperationContext());
} else {
log.info("Recognition completed, result=" + recognizeResult + ", context=" + event.getOperationContext());
}
}
Exemplo de como você pode desserializar o evento RecognizeFailed:
if (acsEvent instanceof RecognizeFailed) {
RecognizeFailed event = (RecognizeFailed) acsEvent;
if (ReasonCode.Recognize.INITIAL_SILENCE_TIMEOUT.equals(event.getReasonCode())) {
// Take action for time out
log.info("Recognition failed: initial silence time out");
} else if (ReasonCode.Recognize.SPEECH_OPTION_NOT_MATCHED.equals(event.getReasonCode())) {
// Take action for option not matched
log.info("Recognition failed: speech option not matched");
} else if (ReasonCode.Recognize.DMTF_OPTION_MATCHED.equals(event.getReasonCode())) {
// Take action for incorrect tone
log.info("Recognition failed: incorrect tone detected");
} else {
log.info("Recognition failed, result=" + event.getResultInformation().getMessage() + ", context=" + event.getOperationContext());
}
}
Exemplo de como você pode desserializar o evento RecognizeCanceled:
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Pré-requisitos
- Conta do Azure com uma assinatura ativa, para obter detalhes, veja Criar uma conta gratuitamente.
- Recurso dos Serviços de Comunicação do Azure. Veja Criar um recurso dos Serviços de Comunicação do Azure. Observe a cadeia de conexão para esse recurso.
- Crie um aplicativo de serviço Web usando o SDK de Automação de Chamadas.
- Se o Node.js estiver instalado, poderá instalá-lo em seu site oficial.
Para recursos de IA
- Crie e conecte os serviços de IA do Azure ao seu recurso dos Serviços de Comunicação do Azure.
- Crie um subdomínio personalizado para seu recurso de serviços de IA do Azure.
Especificações técnicas
Os seguintes parâmetros estão disponíveis para personalizar a função Recognize:
Parâmetro | Tipo | Padrão (se não especificado) | Descrição | Obrigatória ou opcional |
---|---|---|---|---|
Prompt (Para obter detalhes, consulte Personalizar comandos de voz para usuários com a ação de Executar) |
FileSource, TextSource | Não definido | A mensagem a ser reproduzida antes de reconhecer a entrada. | Opcional |
InterToneTimeout |
TimeSpan | 2 segundos Mínimo: 1 segundo Máximo: 60 segundos |
Limite em segundos que os Serviços de Comunicação do Azure esperam para que o chamador pressione outro dígito (tempo limite entre dígitos). | Opcional |
InitialSegmentationSilenceTimeoutInSeconds |
Inteiro | 0,5 segundo | Quanto tempo a ação de reconhecimento espera pela entrada antes de considerá-la um tempo limite. Consulte Como reconhecer a fala. | Opcional |
RecognizeInputsType |
Enum | dtmf | Tipo de entrada reconhecida. As opções são dtmf , choices , speech e speechordtmf . |
Obrigatório |
InitialSilenceTimeout |
TimeSpan | 5 segundos Mínimo: 0 segundo Máximo: 300 segundos (DTMF) Máximo: 20 segundos (Opções) Máximo: 20 segundos (Fala) |
OTempo limite de silêncio inicial ajusta a quantidade de áudio sem fala permitido antes que uma frase antes da tentativa de reconhecimento termine em um resultado "sem correspondência". Consulte Como reconhecer a fala. | Opcional |
MaxTonesToCollect |
Inteiro | Nenhum padrão Mínimo: 1 |
Número de dígitos que um desenvolvedor espera como entrada do participante. | Obrigatório |
StopTones |
IEnumeration<DtmfTone> | Não definido | Os participantes de dígito podem pressionar um dígito para sair de um evento DTMF em lote. | Opcional |
InterruptPrompt |
Bool | Verdadeiro | Se o participante tiver a capacidade de interromper a playMessage pressionando um dígito. | Opcional |
InterruptCallMediaOperation |
Bool | Verdadeiro | Se esse sinalizador for definido, ele interromperá a operação de mídia da chamada atual. Por exemplo, se algum áudio estiver sendo reproduzido, ele interromperá essa operação e iniciará o reconhecimento. | Opcional |
OperationContext |
String | Não definido | Cadeia de caracteres que os desenvolvedores podem transmitir no meio da ação. Útil para permitir que os desenvolvedores armazenem o contexto sobre os eventos recebidos. | Opcional |
Phrases |
String | Não definido | Lista de frases que associam ao rótulo. Ouvir qualquer uma dessas frases resulta em um reconhecimento bem-sucedido. | Obrigatório |
Tone |
String | Não definido | O tom a ser reconhecido se o usuário decidir pressionar um número em vez de usar a fala. | Opcional |
Label |
String | Não definido | O valor da chave para o reconhecimento. | Obrigatório |
Language |
String | En-us | O idioma usado para o reconhecimento de fala. | Opcional |
EndSilenceTimeout |
TimeSpan | 0,5 segundo | A pausa final do alto-falante usada para detectar o resultado final que é gerado como fala. | Opcional |
Observação
Em situações em que a DTMF e Fala estão no recognizeInputsType
, a ação de reconhecimento atua no primeiro tipo de entrada recebido. Por exemplo, se o usuário pressionar um número de teclado primeiro, a ação de reconhecimento considerará um evento de DTMF e continuará escutando tons da DTMF. Se o usuário falar primeiro, a ação de reconhecimento considerará isso um evento de reconhecimento de fala e ouvirá a entrada de voz.
Criar um aplicativo JavaScript
Crie um novo aplicativo JavaScript no diretório do seu projeto. Inicialize um novo projeto Node.js com o comando a seguir. Isso cria um arquivo package.json para seu projeto, que gerencia as dependências do projeto.
npm init -y
Instale o pacote de Automação de Chamadas dos Serviços de Comunicação do Azure
npm install @azure/communication-call-automation
Crie um novo arquivo JavaScript no diretório do seu projeto, por exemplo, nomeie-o app.js
. Grave seu código JavaScript nesse arquivo.
Execute seu aplicativo usando o Node.js com o seguinte comando.
node app.js
Estabelecer uma chamada
A essa altura, é necessário estar familiarizado com as chamadas iniciais. Para obter mais informações sobre como fazer uma chamada, consulte Início Rápido: fazer e chamar de saída.
Chamar a ação de reconhecimento
Quando o seu aplicativo atende à chamada, você pode fornecer informações sobre como reconhecer a entrada do participante e reproduzir um prompt.
DTMF
const maxTonesToCollect = 3;
const textToPlay = "Welcome to Contoso, please enter 3 DTMF.";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeDtmfOptions = {
maxTonesToCollect: maxTonesToCollect,
initialSilenceTimeoutInSeconds: 30,
playPrompt: playSource,
interToneTimeoutInSeconds: 5,
interruptPrompt: true,
stopDtmfTones: [ DtmfTone.Pound ],
kind: "callMediaRecognizeDtmfOptions"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Para fluxos de conversão de fala em texto, a ação de reconhecimento da Automação de chamadas também dá suporte ao uso de modelos de Fala Personalizadas. Recursos como modelos de Fala Personalizadas podem ser úteis ao criar um aplicativo que precisa escutar palavras complexas as quais os modelos padrão de reconhecimento de fala podem não compreender. Um exemplo é quando você está criando um aplicativo para o setor da telemedicina e seu agente virtual precisa ter a habilidade de reconhecer termos médicos. Saiba mais em Criar um projeto de Fala Personalizada.
Opções de conversão de fala em texto
const choices = [
{
label: "Confirm",
phrases: [ "Confirm", "First", "One" ],
tone: DtmfTone.One
},
{
label: "Cancel",
phrases: [ "Cancel", "Second", "Two" ],
tone: DtmfTone.Two
}
];
const textToPlay = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeChoiceOptions = {
choices: choices,
interruptPrompt: true,
initialSilenceTimeoutInSeconds: 30,
playPrompt: playSource,
operationContext: "AppointmentReminderMenu",
kind: "callMediaRecognizeChoiceOptions",
//Only add the speechRecognitionModelEndpointId if you have a custom speech model you would like to use
speechRecognitionModelEndpointId: "YourCustomSpeechEndpointId"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Conversão de Fala em Texto
const textToPlay = "Hi, how can I help you today?";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeSpeechOptions = {
endSilenceTimeoutInSeconds: 1,
playPrompt: playSource,
operationContext: "OpenQuestionSpeech",
kind: "callMediaRecognizeSpeechOptions",
//Only add the speechRecognitionModelEndpointId if you have a custom speech model you would like to use
speechRecognitionModelEndpointId: "YourCustomSpeechEndpointId"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Conversão de fala em texto ou DTMF
const maxTonesToCollect = 1;
const textToPlay = "Hi, how can I help you today, you can press 0 to speak to an agent?";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeSpeechOrDtmfOptions = {
maxTonesToCollect: maxTonesToCollect,
endSilenceTimeoutInSeconds: 1,
playPrompt: playSource,
initialSilenceTimeoutInSeconds: 30,
interruptPrompt: true,
operationContext: "OpenQuestionSpeechOrDtmf",
kind: "callMediaRecognizeSpeechOrDtmfOptions",
//Only add the speechRecognitionModelEndpointId if you have a custom speech model you would like to use
speechRecognitionModelEndpointId: "YourCustomSpeechEndpointId"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Observação
Se os parâmetros não forem definidos, os padrões serão aplicados sempre que possível.
Como receber atualizações de eventos de reconhecimento
Os desenvolvedores podem se inscrever em eventos RecognizeCompleted
e RecognizeFailed
no retorno de chamada de webhook registrado. Use esse retorno de chamada com lógica de negócios em seu aplicativo para determinar as próximas etapas quando um dos eventos ocorrer.
Exemplo de como você pode desserializar o evento RecognizeCompleted:
if (event.type === "Microsoft.Communication.RecognizeCompleted") {
if (eventData.recognitionType === "dtmf") {
const tones = eventData.dtmfResult.tones;
console.log("Recognition completed, tones=%s, context=%s", tones, eventData.operationContext);
} else if (eventData.recognitionType === "choices") {
const labelDetected = eventData.choiceResult.label;
const phraseDetected = eventData.choiceResult.recognizedPhrase;
console.log("Recognition completed, labelDetected=%s, phraseDetected=%s, context=%s", labelDetected, phraseDetected, eventData.operationContext);
} else if (eventData.recognitionType === "speech") {
const text = eventData.speechResult.speech;
console.log("Recognition completed, text=%s, context=%s", text, eventData.operationContext);
} else {
console.log("Recognition completed: data=%s", JSON.stringify(eventData, null, 2));
}
}
Exemplo de como você pode desserializar o evento RecognizeFailed:
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Exemplo de como você pode desserializar o evento RecognizeCanceled:
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Pré-requisitos
- Conta do Azure com uma assinatura ativa, para obter detalhes, veja Criar uma conta gratuitamente.
- Recurso dos Serviços de Comunicação do Azure. Veja Criar um recurso dos Serviços de Comunicação do Azure. Observe a cadeia de conexão para esse recurso.
- Crie um aplicativo de serviço Web usando o SDK de Automação de Chamadas.
- Instale o Python do site Python.org.
Para recursos de IA
- Crie e conecte os serviços de IA do Azure ao seu recurso dos Serviços de Comunicação do Azure.
- Crie um subdomínio personalizado para seu recurso de serviços de IA do Azure.
Especificações técnicas
Os seguintes parâmetros estão disponíveis para personalizar a função Recognize:
Parâmetro | Tipo | Padrão (se não especificado) | Descrição | Obrigatória ou opcional |
---|---|---|---|---|
Prompt (Para obter detalhes, consulte Personalizar comandos de voz para usuários com a ação de Executar) |
FileSource, TextSource | Não definido | A mensagem a ser reproduzida antes de reconhecer a entrada. | Opcional |
InterToneTimeout |
TimeSpan | 2 segundos Mínimo: 1 segundo Máximo: 60 segundos |
Limite em segundos que os Serviços de Comunicação do Azure esperam para que o chamador pressione outro dígito (tempo limite entre dígitos). | Opcional |
InitialSegmentationSilenceTimeoutInSeconds |
Inteiro | 0,5 segundo | Quanto tempo a ação de reconhecimento espera pela entrada antes de considerá-la um tempo limite. Consulte Como reconhecer a fala. | Opcional |
RecognizeInputsType |
Enum | dtmf | Tipo de entrada reconhecida. As opções são dtmf , choices , speech e speechordtmf . |
Obrigatório |
InitialSilenceTimeout |
TimeSpan | 5 segundos Mínimo: 0 segundo Máximo: 300 segundos (DTMF) Máximo: 20 segundos (Opções) Máximo: 20 segundos (Fala) |
OTempo limite de silêncio inicial ajusta a quantidade de áudio sem fala permitido antes que uma frase antes da tentativa de reconhecimento termine em um resultado "sem correspondência". Consulte Como reconhecer a fala. | Opcional |
MaxTonesToCollect |
Inteiro | Nenhum padrão Mínimo: 1 |
Número de dígitos que um desenvolvedor espera como entrada do participante. | Obrigatório |
StopTones |
IEnumeration<DtmfTone> | Não definido | Os participantes de dígito podem pressionar um dígito para sair de um evento DTMF em lote. | Opcional |
InterruptPrompt |
Bool | Verdadeiro | Se o participante tiver a capacidade de interromper a playMessage pressionando um dígito. | Opcional |
InterruptCallMediaOperation |
Bool | Verdadeiro | Se esse sinalizador for definido, ele interromperá a operação de mídia da chamada atual. Por exemplo, se algum áudio estiver sendo reproduzido, ele interromperá essa operação e iniciará o reconhecimento. | Opcional |
OperationContext |
String | Não definido | Cadeia de caracteres que os desenvolvedores podem transmitir no meio da ação. Útil para permitir que os desenvolvedores armazenem o contexto sobre os eventos recebidos. | Opcional |
Phrases |
String | Não definido | Lista de frases que associam ao rótulo. Ouvir qualquer uma dessas frases resulta em um reconhecimento bem-sucedido. | Obrigatório |
Tone |
String | Não definido | O tom a ser reconhecido se o usuário decidir pressionar um número em vez de usar a fala. | Opcional |
Label |
String | Não definido | O valor da chave para o reconhecimento. | Obrigatório |
Language |
String | En-us | O idioma usado para o reconhecimento de fala. | Opcional |
EndSilenceTimeout |
TimeSpan | 0,5 segundo | A pausa final do alto-falante usada para detectar o resultado final que é gerado como fala. | Opcional |
Observação
Em situações em que a DTMF e Fala estão no recognizeInputsType
, a ação de reconhecimento atua no primeiro tipo de entrada recebido. Por exemplo, se o usuário pressionar um número de teclado primeiro, a ação de reconhecimento considerará um evento de DTMF e continuará escutando tons da DTMF. Se o usuário falar primeiro, a ação de reconhecimento considerará isso um evento de reconhecimento de fala e ouvirá a entrada de voz.
Criar um novo aplicativo Python
Configurar um ambiente virtual Python para seu projeto
python -m venv play-audio-app
Ativar seu ambiente virtual
No Windows, use o seguinte comando:
.\ play-audio-quickstart \Scripts\activate
No Unix, use o seguinte comando:
source play-audio-quickstart /bin/activate
Instale o pacote de Automação de Chamadas dos Serviços de Comunicação do Azure
pip install azure-communication-callautomation
Crie seu arquivo de aplicativo no diretório do projeto, por exemplo, nomeie-o app.py
. Grave seu código Python nesse arquivo.
Execute seu aplicativo usando Python com o seguinte comando.
python app.py
Estabelecer uma chamada
A essa altura, é necessário estar familiarizado com as chamadas iniciais. Para obter mais informações sobre como fazer uma chamada, consulte Início Rápido: fazer e chamar de saída.
Chamar a ação de reconhecimento
Quando o seu aplicativo atende à chamada, você pode fornecer informações sobre como reconhecer a entrada do participante e reproduzir um prompt.
DTMF
max_tones_to_collect = 3
text_to_play = "Welcome to Contoso, please enter 3 DTMF."
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
dtmf_max_tones_to_collect=max_tones_to_collect,
input_type=RecognizeInputType.DTMF,
target_participant=target_participant,
initial_silence_timeout=30,
play_prompt=play_source,
dtmf_inter_tone_timeout=5,
interrupt_prompt=True,
dtmf_stop_tones=[ DtmfTone.Pound ])
Para fluxos de conversão de fala em texto, a ação de reconhecimento da Automação de chamadas também dá suporte ao uso de modelos de Fala Personalizadas. Recursos como modelos de Fala Personalizadas podem ser úteis ao criar um aplicativo que precisa escutar palavras complexas as quais os modelos padrão de reconhecimento de fala podem não compreender. Um exemplo é quando você está criando um aplicativo para o setor da telemedicina e seu agente virtual precisa ter a habilidade de reconhecer termos médicos. Saiba mais em Criar um projeto de Fala Personalizada.
Opções de conversão de fala em texto
choices = [
RecognitionChoice(
label="Confirm",
phrases=[ "Confirm", "First", "One" ],
tone=DtmfTone.ONE
),
RecognitionChoice(
label="Cancel",
phrases=[ "Cancel", "Second", "Two" ],
tone=DtmfTone.TWO
)
]
text_to_play = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!"
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
input_type=RecognizeInputType.CHOICES,
target_participant=target_participant,
choices=choices,
interrupt_prompt=True,
initial_silence_timeout=30,
play_prompt=play_source,
operation_context="AppointmentReminderMenu",
# Only add the speech_recognition_model_endpoint_id if you have a custom speech model you would like to use
speech_recognition_model_endpoint_id="YourCustomSpeechModelEndpointId")
Conversão de Fala em Texto
text_to_play = "Hi, how can I help you today?"
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
input_type=RecognizeInputType.SPEECH,
target_participant=target_participant,
end_silence_timeout=1,
play_prompt=play_source,
operation_context="OpenQuestionSpeech",
# Only add the speech_recognition_model_endpoint_id if you have a custom speech model you would like to use
speech_recognition_model_endpoint_id="YourCustomSpeechModelEndpointId")
Conversão de fala em texto ou DTMF
max_tones_to_collect = 1
text_to_play = "Hi, how can I help you today, you can also press 0 to speak to an agent."
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
dtmf_max_tones_to_collect=max_tones_to_collect,
input_type=RecognizeInputType.SPEECH_OR_DTMF,
target_participant=target_participant,
end_silence_timeout=1,
play_prompt=play_source,
initial_silence_timeout=30,
interrupt_prompt=True,
operation_context="OpenQuestionSpeechOrDtmf",
# Only add the speech_recognition_model_endpoint_id if you have a custom speech model you would like to use
speech_recognition_model_endpoint_id="YourCustomSpeechModelEndpointId")
app.logger.info("Start recognizing")
Observação
Se os parâmetros não forem definidos, os padrões serão aplicados sempre que possível.
Como receber atualizações de eventos de reconhecimento
Os desenvolvedores podem se inscrever em eventos RecognizeCompleted
e RecognizeFailed
no retorno de chamada de webhook registrado. Use esse retorno de chamada com lógica de negócios em seu aplicativo para determinar as próximas etapas quando um dos eventos ocorrer.
Exemplo de como você pode desserializar o evento RecognizeCompleted:
if event.type == "Microsoft.Communication.RecognizeCompleted":
app.logger.info("Recognize completed: data=%s", event.data)
if event.data['recognitionType'] == "dtmf":
tones = event.data['dtmfResult']['tones']
app.logger.info("Recognition completed, tones=%s, context=%s", tones, event.data.get('operationContext'))
elif event.data['recognitionType'] == "choices":
labelDetected = event.data['choiceResult']['label'];
phraseDetected = event.data['choiceResult']['recognizedPhrase'];
app.logger.info("Recognition completed, labelDetected=%s, phraseDetected=%s, context=%s", labelDetected, phraseDetected, event.data.get('operationContext'));
elif event.data['recognitionType'] == "speech":
text = event.data['speechResult']['speech'];
app.logger.info("Recognition completed, text=%s, context=%s", text, event.data.get('operationContext'));
else:
app.logger.info("Recognition completed: data=%s", event.data);
Exemplo de como você pode desserializar o evento RecognizeFailed:
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Exemplo de como você pode desserializar o evento RecognizeCanceled:
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Códigos de evento
Status | Código | Subcódigo | Mensagem |
---|---|---|---|
RecognizeCompleted |
200 | 8531 | Ação concluída. Número máximo de dígitos recebidos. |
RecognizeCompleted |
200 | 8514 | Ação concluída, pois o tom de parada foi detectado. |
RecognizeCompleted |
400 | 8508 | Falha na ação, pois a operação foi cancelada. |
RecognizeCompleted |
400 | 8532 | Falha na ação. Tempo limite de silêncio entre dígitos atingido. |
RecognizeCanceled |
400 | 8508 | Falha na ação, pois a operação foi cancelada. |
RecognizeFailed |
400 | 8510 | Falha na ação, o tempo limite de silêncio inicial foi atingido. |
RecognizeFailed |
500 | 8511 | Falha na ação. Falha na tentativa de reproduzir o prompt. |
RecognizeFailed |
500 | 8512 | Erro interno desconhecido do servidor. |
RecognizeFailed |
400 | 8510 | Falha na ação. Tempo limite de silêncio inicial atingido |
RecognizeFailed |
400 | 8532 | Falha na ação. Tempo limite de silêncio entre dígitos atingido. |
RecognizeFailed |
400 | 8565 | Falha na ação, solicitação incorreta para os serviços de IA do Azure. Verifique os parâmetros de entrada. |
RecognizeFailed |
400 | 8565 | Falha na ação, solicitação incorreta para os serviços de IA do Azure. Não foi possível processar o payload fornecido, verifique a entrada de origem da reprodução. |
RecognizeFailed |
401 | 8565 | Falha na ação, erro de autenticação dos serviços de IA do Azure. |
RecognizeFailed |
403 | 8565 | Falha na ação, solicitação proibida para os serviços de IA do Azure, a assinatura gratuita usada pela solicitação esgotou a cota. |
RecognizeFailed |
429 | 8565 | Falha na ação, as solicitações excederam o número de solicitações simultâneas permitidas para a assinatura dos serviços de IA do Azure. |
RecognizeFailed |
408 | 8565 | Falha na ação, a solicitação para os serviços de IA do Azure atingiu o tempo limite. |
RecognizeFailed |
500 | 8511 | Falha na ação. Falha na tentativa de reproduzir o prompt. |
RecognizeFailed |
500 | 8512 | Erro interno desconhecido do servidor. |
Limitações conhecidas
- Não há suporte para a DTMF em banda. Em vez disso, use a DTMF RFC 2833.
- Os prompts de texto de Conversão de Texto em Fala dão suporte a no máximo 400 caracteres. Se o prompt for maior do que isso, sugerimos o uso de SSML para ações de reprodução baseadas em Conversão de Texto em Fala.
- Para cenários em que você excede o limite de cota do serviço de Fala, é possível solicitar o aumento desse limite seguindo as etapas descritas em Cotas e limites dos serviços de Fala.
Limpar os recursos
Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, exclua o recurso ou o grupo de recursos. Excluir o grupo de recursos também exclui todos os recursos associados a ele. Saiba mais sobre como limpar recursos.
Próximas etapas
- Saiba mais sobre como Coletar entrada de usuário
- Saiba mais sobre como Reproduzir áudio em chamada
- Saiba mais sobre a Automação de Chamadas