Recopilación de entradas de usuario con la acción Reconocer
Esta guía le ayudará a empezar a reconocer la entrada DTMF proporcionada por los participantes a través del SDK de Automatización de llamadas de Azure Communication Services.
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services. Anote la cadena de conexión de este recurso.
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- La biblioteca de .NET más reciente para el sistema operativo.
- Consigue el último paquete NuGet.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Especificaciones técnicas
Los parámetros siguientes están disponibles para personalizar la función Recognize:
Parámetro | Tipo | Valor predeterminado (si no se especifica) | Descripción | Requerido u Opcional |
---|---|---|---|---|
Prompt (para obtener más información sobre la acción Reproducir, consulte esta guía paso a paso) |
FileSource, TextSource | Sin establecer | Este es el mensaje que quieres reproducir antes de reconocer la entrada. | Opcionales |
InterToneTimeout | TimeSpan | 2 segundos Min: 1 segundo Máximo: 60 segundos |
Limite en segundos que Azure Communication Services espera a que el autor de la llamada presione otro dígito (tiempo de espera entre dígitos). | Opcionales |
InitialSegmentationSilenceTimeoutInSeconds | Entero | 0.5 segundos | Cuánto tiempo espera la acción de reconocimiento para la entrada antes de considerarlo un tiempo de espera. Puede obtener más información aquí. | Opcionales |
RecognizeInputsType | Enum | dtmf | Tipo de entrada que se reconoce. Las opciones son dtmf, opciones, voz y speechordtmf. | Obligatorio |
InitialSilenceTimeout | TimeSpan | 5 segundos Min: 0 segundos Máximo: 300 segundos (DTMF) Máximo: 20 segundos (opciones) Máximo: 20 segundos (voz) |
El tiempo de espera de silencio inicial ajusta la cantidad de audio que no es de voz permitida antes de una frase antes de que el intento de reconocimiento termine en un resultado "sin coincidencia". Puede obtener más información aquí. | Opcionales |
MaxTonesToCollect | Entero | Sin valor predeterminado Min: 1 |
Número de dígitos que un desarrollador espera como entrada del participante. | Obligatorio |
StopTones | IEnumeration<DtmfTone> | Sin establecer | Los participantes de dígitos pueden presionar para escapar de un evento DTMF por lotes. | Opcionales |
InterruptPrompt | Booleano | True | Si el participante tiene la capacidad de interrumpir el playMessage presionando un dígito. | Opcionales |
InterruptCallMediaOperation | Booleano | True | Si se establece esta marca, se interrumpe la operación multimedia de llamada actual. Por ejemplo, si se reproduce algún audio, se interrumpe esa operación y se inicia el reconocimiento. | Opcionales |
OperationContext | Cadena | Sin establecer | Cadena que los desarrolladores pueden pasar la acción intermedia, útil para permitir que los desarrolladores almacenen contexto sobre los eventos que reciben. | Opcionales |
Frases | Cadena | Sin establecer | Lista de frases que se asocian a la etiqueta, si alguna de estas se escucha, se considera un reconocimiento correcto. | Obligatorio |
Tono | Cadena | Sin establecer | Tono que se debe reconocer si el usuario decide presionar un número en lugar de usar la voz. | Opcionales |
Etiqueta | Cadena | Sin establecer | Valor clave para el reconocimiento. | Obligatorio |
Lenguaje | Cadena | En-us | Idioma que se usa para el reconocimiento de la voz. | Opcionales |
EndSilenceTimeout | TimeSpan | 0.5 segundos | La pausa final del hablante usada para detectar el resultado final que se genera como voz. | Opcionales |
Nota:
En situaciones en las que tanto dtmf como voz se encuentran en recognizeInputsType, la acción de reconocimiento actuará sobre el primer tipo de entrada recibido, es decir, si el usuario presiona un número de teclado primero, la acción de reconocimiento la considerará un evento dtmf y continuará escuchando los tonos dtmf. Si el usuario habla primero, la acción reconocerá que es un reconocimiento de voz y escuchará la entrada de voz.
Creación de una aplicación de C#
En la ventana de consola del sistema operativo, use el comando dotnet
para crear una aplicación web.
dotnet new web -n MyApplication
Instalación del paquete NuGet.
El paquete NuGet se puede obtener desde aquí, si aún no lo has hecho.
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. También puedes usar el fragmento de código proporcionado aquí para comprender cómo responder a una llamada.
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);
Llamada a la acción de reconocimiento
Cuando la aplicación responde a la llamada, puede proporcionar información sobre cómo reconocer la entrada del participante y reproducir un mensaje.
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);
En el caso de los flujos de conversión de voz a texto, la acción de reconocimiento de automatización de llamadas también admite el uso de modelos de voz personalizados. Las características como los modelos de voz personalizados pueden ser útiles cuando se crea una aplicación que necesita escuchar palabras complejas que los modelos predeterminados de conversión de voz a texto pueden no ser capaces de entender, un buen ejemplo de esto puede ser cuando se crea una aplicación para el sector telemédico y el agente virtual debe ser capaz de reconocer términos médicos. Puedes obtener más información sobre cómo crear e implementar modelos de voz personalizados aquí.
Opciones de conversión de voz en 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);
Speech-to-Text
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);
Conversión de voz en texto o 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);
Nota:
Si no se establecen parámetros, los valores predeterminados se aplican siempre que sea posible.
Recepción de actualizaciones de eventos de reconocimiento
Los desarrolladores pueden suscribirse a los eventos RecognizeCompleted y RecognizeFailed en la devolución de llamada de webhook que registraron para la llamada para crear lógica de negocios en su aplicación para determinar los pasos siguientes cuando se produce uno de los eventos mencionados anteriormente.
Ejemplo de cómo se puede deserializar el 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;
}
}
Ejemplo de cómo se puede deserializar el 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);
}
}
Ejemplo de cómo se puede deserializar el 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);
}
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- Kit de desarrollo de Java, versión 8 o posterior.
- Apache Maven.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Especificaciones técnicas
Los parámetros siguientes están disponibles para personalizar la función Recognize:
Parámetro | Tipo | Valor predeterminado (si no se especifica) | Descripción | Requerido u Opcional |
---|---|---|---|---|
Prompt (para obtener más información sobre la acción Reproducir, consulte esta guía paso a paso) |
FileSource, TextSource | Sin establecer | Este es el mensaje que quieres reproducir antes de reconocer la entrada. | Opcionales |
InterToneTimeout | TimeSpan | 2 segundos Min: 1 segundo Máximo: 60 segundos |
Limite en segundos que Azure Communication Services espera a que el autor de la llamada presione otro dígito (tiempo de espera entre dígitos). | Opcionales |
InitialSegmentationSilenceTimeoutInSeconds | Entero | 0.5 segundos | Cuánto tiempo espera la acción de reconocimiento para la entrada antes de considerarlo un tiempo de espera. Puede obtener más información aquí. | Opcionales |
RecognizeInputsType | Enum | dtmf | Tipo de entrada que se reconoce. Las opciones son dtmf, opciones, voz y speechordtmf. | Obligatorio |
InitialSilenceTimeout | TimeSpan | 5 segundos Min: 0 segundos Máximo: 300 segundos (DTMF) Máximo: 20 segundos (opciones) Máximo: 20 segundos (voz) |
El tiempo de espera de silencio inicial ajusta la cantidad de audio que no es de voz permitida antes de una frase antes de que el intento de reconocimiento termine en un resultado "sin coincidencia". Puede obtener más información aquí. | Opcionales |
MaxTonesToCollect | Entero | Sin valor predeterminado Min: 1 |
Número de dígitos que un desarrollador espera como entrada del participante. | Obligatorio |
StopTones | IEnumeration<DtmfTone> | Sin establecer | Los participantes de dígitos pueden presionar para escapar de un evento DTMF por lotes. | Opcionales |
InterruptPrompt | Booleano | True | Si el participante tiene la capacidad de interrumpir el playMessage presionando un dígito. | Opcionales |
InterruptCallMediaOperation | Booleano | True | Si se establece esta marca, se interrumpe la operación multimedia de llamada actual. Por ejemplo, si se reproduce algún audio, se interrumpe esa operación y se inicia el reconocimiento. | Opcionales |
OperationContext | Cadena | Sin establecer | Cadena que los desarrolladores pueden pasar la acción intermedia, útil para permitir que los desarrolladores almacenen contexto sobre los eventos que reciben. | Opcionales |
Frases | Cadena | Sin establecer | Lista de frases que se asocian a la etiqueta, si alguna de estas se escucha, se considera un reconocimiento correcto. | Obligatorio |
Tono | Cadena | Sin establecer | Tono que se debe reconocer si el usuario decide presionar un número en lugar de usar la voz. | Opcionales |
Etiqueta | Cadena | Sin establecer | Valor clave para el reconocimiento. | Obligatorio |
Lenguaje | Cadena | En-us | Idioma que se usa para el reconocimiento de la voz. | Opcionales |
EndSilenceTimeout | TimeSpan | 0.5 segundos | La pausa final del hablante usada para detectar el resultado final que se genera como voz. | Opcionales |
Nota:
En situaciones en las que tanto dtmf como voz se encuentran en recognizeInputsType, la acción de reconocimiento actuará sobre el primer tipo de entrada recibido, es decir, si el usuario presiona un número de teclado primero, la acción de reconocimiento la considerará un evento dtmf y continuará escuchando los tonos dtmf. Si el usuario habla primero, la acción reconocerá que es un reconocimiento de voz y escuchará la entrada de voz.
Creación de una aplicación Java
En la ventana de terminal o de comandos, navegue hasta el directorio en el que quiere crear la aplicación de Java. Ejecuta el comando mvn
para generar el proyecto de Java a partir de la plantilla maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
El comando mvn
crea un directorio con el mismo nombre que el argumento artifactId
. En este directorio, el directorio src/main/java
contiene el código fuente del proyecto, el directorio src/test/java
contiene el origen de prueba.
Verás que el paso ‘generar’ creó un directorio con el mismo nombre que el objeto artifactId. En este directorio, el directorio src/main/java
contiene el código fuente, el directorio src/test/java
contiene pruebas, y el archivo pom.xml
es el modelo de objetos del proyecto o POM.
Actualice el archivo POM de la aplicación para usar Java 8 o posterior.
<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>
Incorporación de referencias de paquete
En el archivo POM, agregue la siguiente referencia para el proyecto
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. También puedes usar el fragmento de código proporcionado aquí para comprender cómo responder a una llamada.
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();
Llamada a la acción de reconocimiento
Cuando la aplicación responde a la llamada, puede proporcionar información sobre cómo reconocer la entrada del participante y reproducir un mensaje.
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());
En el caso de los flujos de conversión de voz a texto, la acción de reconocimiento de automatización de llamadas también admite el uso de modelos de voz personalizados. Las características como los modelos de voz personalizados pueden ser útiles cuando se crea una aplicación que necesita escuchar palabras complejas que los modelos predeterminados de conversión de voz a texto pueden no ser capaces de entender, un buen ejemplo de esto puede ser cuando se crea una aplicación para el sector telemédico y el agente virtual debe ser capaz de reconocer términos médicos. Puedes obtener más información sobre cómo crear e implementar modelos de voz personalizados aquí.
Opciones de conversión de voz en 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();
Speech-to-Text
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();
Conversión de voz en texto o 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();
Nota:
Si no se establecen parámetros, los valores predeterminados se aplican siempre que sea posible.
Recepción de actualizaciones de eventos de reconocimiento
Los desarrolladores pueden suscribirse a eventos RecognizeCompleted y RecognizeFailed en la devolución de llamada de webhook registrada. Esta devolución de llamada se puede usar con lógica de negocios en la aplicación para determinar los pasos siguientes cuando se produce uno de los eventos.
Ejemplo de cómo se puede deserializar el 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());
}
}
Ejemplo de cómo se puede deserializar el 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());
}
}
Ejemplo de cómo se puede deserializar el evento RecognizeCanceled:
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services. Anote la cadena de conexión de este recurso.
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- Tener Node.js instalado, puedes instalarlo desde su sitio web oficial.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Especificaciones técnicas
Los parámetros siguientes están disponibles para personalizar la función Recognize:
Parámetro | Tipo | Valor predeterminado (si no se especifica) | Descripción | Requerido u Opcional |
---|---|---|---|---|
Prompt (para obtener más información sobre la acción Reproducir, consulte esta guía paso a paso) |
FileSource, TextSource | Sin establecer | Este es el mensaje que quieres reproducir antes de reconocer la entrada. | Opcionales |
InterToneTimeout | TimeSpan | 2 segundos Min: 1 segundo Máximo: 60 segundos |
Limite en segundos que Azure Communication Services espera a que el autor de la llamada presione otro dígito (tiempo de espera entre dígitos). | Opcionales |
InitialSegmentationSilenceTimeoutInSeconds | Entero | 0.5 segundos | Cuánto tiempo espera la acción de reconocimiento para la entrada antes de considerarlo un tiempo de espera. Puede obtener más información aquí. | Opcionales |
RecognizeInputsType | Enum | dtmf | Tipo de entrada que se reconoce. Las opciones son dtmf, opciones, voz y speechordtmf. | Obligatorio |
InitialSilenceTimeout | TimeSpan | 5 segundos Min: 0 segundos Máximo: 300 segundos (DTMF) Máximo: 20 segundos (opciones) Máximo: 20 segundos (voz) |
El tiempo de espera de silencio inicial ajusta la cantidad de audio que no es de voz permitida antes de una frase antes de que el intento de reconocimiento termine en un resultado "sin coincidencia". Puede obtener más información aquí. | Opcionales |
MaxTonesToCollect | Entero | Sin valor predeterminado Min: 1 |
Número de dígitos que un desarrollador espera como entrada del participante. | Obligatorio |
StopTones | IEnumeration<DtmfTone> | Sin establecer | Los participantes de dígitos pueden presionar para escapar de un evento DTMF por lotes. | Opcionales |
InterruptPrompt | Booleano | True | Si el participante tiene la capacidad de interrumpir el playMessage presionando un dígito. | Opcionales |
InterruptCallMediaOperation | Booleano | True | Si se establece esta marca, se interrumpe la operación multimedia de llamada actual. Por ejemplo, si se reproduce algún audio, se interrumpe esa operación y se inicia el reconocimiento. | Opcionales |
OperationContext | Cadena | Sin establecer | Cadena que los desarrolladores pueden pasar la acción intermedia, útil para permitir que los desarrolladores almacenen contexto sobre los eventos que reciben. | Opcionales |
Frases | Cadena | Sin establecer | Lista de frases que se asocian a la etiqueta, si alguna de estas se escucha, se considera un reconocimiento correcto. | Obligatorio |
Tono | Cadena | Sin establecer | Tono que se debe reconocer si el usuario decide presionar un número en lugar de usar la voz. | Opcionales |
Etiqueta | Cadena | Sin establecer | Valor clave para el reconocimiento. | Obligatorio |
Lenguaje | Cadena | En-us | Idioma que se usa para el reconocimiento de la voz. | Opcionales |
EndSilenceTimeout | TimeSpan | 0.5 segundos | La pausa final del hablante usada para detectar el resultado final que se genera como voz. | Opcionales |
Nota:
En situaciones en las que tanto dtmf como voz se encuentran en recognizeInputsType, la acción de reconocimiento actuará sobre el primer tipo de entrada recibido, es decir, si el usuario presiona un número de teclado primero, la acción de reconocimiento la considerará un evento dtmf y continuará escuchando los tonos dtmf. Si el usuario habla primero, la acción reconocerá que es un reconocimiento de voz y escuchará la entrada de voz.
Creación de una aplicación de JavaScript
Crea una nueva aplicación de JavaScript en el directorio del proyecto. Inicia un nuevo proyecto de Node.js con el siguiente comando. Esto crea un archivo package.json para el proyecto, que se usa para administrar las dependencias del proyecto.
npm init -y
Instalación del paquete de Automatización de llamadas de Azure Communication Services
npm install @azure/communication-call-automation
Crea un nuevo archivo JavaScript en el directorio del proyecto, por ejemplo, asígnale el nombre app.js. Escribe el código JavaScript en este archivo. Ejecuta la aplicación mediante Node.js con el comando siguiente. Esto ejecuta el código JavaScript que has escrito.
node app.js
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. En este inicio rápido, creamos una llamada saliente.
Llamada a la acción de reconocimiento
Cuando la aplicación responde a la llamada, puede proporcionar información sobre cómo reconocer la entrada del participante y reproducir un mensaje.
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);
En el caso de los flujos de conversión de voz a texto, la acción de reconocimiento de automatización de llamadas también admite el uso de modelos de voz personalizados. Las características como los modelos de voz personalizados pueden ser útiles cuando se crea una aplicación que necesita escuchar palabras complejas que los modelos predeterminados de conversión de voz a texto pueden no ser capaces de entender, un buen ejemplo de esto puede ser cuando se crea una aplicación para el sector telemédico y el agente virtual debe ser capaz de reconocer términos médicos. Puedes obtener más información sobre cómo crear e implementar modelos de voz personalizados aquí.
Opciones de conversión de voz en 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);
Speech-to-Text
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);
Conversión de voz en texto o 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);
Nota:
Si no se establecen parámetros, los valores predeterminados se aplican siempre que sea posible.
Recepción de actualizaciones de eventos de reconocimiento
Los desarrolladores pueden suscribirse a los eventos RecognizeCompleted y RecognizeFailed en la devolución de llamada de webhook que registraron para la llamada para crear lógica de negocios en su aplicación para determinar los pasos siguientes cuando se produce uno de los eventos mencionados anteriormente.
Ejemplo de cómo se puede deserializar el 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));
}
}
Ejemplo de cómo se puede deserializar el evento RecognizeFailed:
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Ejemplo de cómo se puede deserializar el evento RecognizeCanceled:
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services. Anote la cadena de conexión de este recurso.
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- Tener Instalado Python, puedes instalar desde el sitio oficial.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Especificaciones técnicas
Los parámetros siguientes están disponibles para personalizar la función Recognize:
Parámetro | Tipo | Valor predeterminado (si no se especifica) | Descripción | Requerido u Opcional |
---|---|---|---|---|
Prompt (para obtener más información sobre la acción Reproducir, consulte esta guía paso a paso) |
FileSource, TextSource | Sin establecer | Este es el mensaje que quieres reproducir antes de reconocer la entrada. | Opcionales |
InterToneTimeout | TimeSpan | 2 segundos Min: 1 segundo Máximo: 60 segundos |
Limite en segundos que Azure Communication Services espera a que el autor de la llamada presione otro dígito (tiempo de espera entre dígitos). | Opcionales |
InitialSegmentationSilenceTimeoutInSeconds | Entero | 0.5 segundos | Cuánto tiempo espera la acción de reconocimiento para la entrada antes de considerarlo un tiempo de espera. Puede obtener más información aquí. | Opcionales |
RecognizeInputsType | Enum | dtmf | Tipo de entrada que se reconoce. Las opciones son dtmf, opciones, voz y speechordtmf. | Obligatorio |
InitialSilenceTimeout | TimeSpan | 5 segundos Min: 0 segundos Máximo: 300 segundos (DTMF) Máximo: 20 segundos (opciones) Máximo: 20 segundos (voz) |
El tiempo de espera de silencio inicial ajusta la cantidad de audio que no es de voz permitida antes de una frase antes de que el intento de reconocimiento termine en un resultado "sin coincidencia". Puede obtener más información aquí. | Opcionales |
MaxTonesToCollect | Entero | Sin valor predeterminado Min: 1 |
Número de dígitos que un desarrollador espera como entrada del participante. | Obligatorio |
StopTones | IEnumeration<DtmfTone> | Sin establecer | Los participantes de dígitos pueden presionar para escapar de un evento DTMF por lotes. | Opcionales |
InterruptPrompt | Booleano | True | Si el participante tiene la capacidad de interrumpir el playMessage presionando un dígito. | Opcionales |
InterruptCallMediaOperation | Booleano | True | Si se establece esta marca, se interrumpe la operación multimedia de llamada actual. Por ejemplo, si se reproduce algún audio, se interrumpe esa operación y se inicia el reconocimiento. | Opcionales |
OperationContext | Cadena | Sin establecer | Cadena que los desarrolladores pueden pasar la acción intermedia, útil para permitir que los desarrolladores almacenen contexto sobre los eventos que reciben. | Opcionales |
Frases | Cadena | Sin establecer | Lista de frases que se asocian a la etiqueta, si alguna de estas se escucha, se considera un reconocimiento correcto. | Obligatorio |
Tono | Cadena | Sin establecer | Tono que se debe reconocer si el usuario decide presionar un número en lugar de usar la voz. | Opcionales |
Etiqueta | Cadena | Sin establecer | Valor clave para el reconocimiento. | Obligatorio |
Lenguaje | Cadena | En-us | Idioma que se usa para el reconocimiento de la voz. | Opcionales |
EndSilenceTimeout | TimeSpan | 0.5 segundos | La pausa final del hablante usada para detectar el resultado final que se genera como voz. | Opcionales |
Nota:
En situaciones en las que tanto dtmf como voz se encuentran en recognizeInputsType, la acción de reconocimiento actuará sobre el primer tipo de entrada recibido, es decir, si el usuario presiona un número de teclado primero, la acción de reconocimiento la considerará un evento dtmf y continuará escuchando los tonos dtmf. Si el usuario habla primero, la acción reconocerá que es un reconocimiento de voz y escuchará la entrada de voz.
Creación de una nueva aplicación de Python
Configuración de un entorno virtual de Python para el proyecto
python -m venv play-audio-app
Activación del entorno virtual
En Windows, usa el siguiente comando:
.\ play-audio-quickstart \Scripts\activate
En Unix, usa el comando siguiente:
source play-audio-quickstart /bin/activate
Instalación del paquete de Automatización de llamadas de Azure Communication Services
pip install azure-communication-callautomation
Crea el archivo de aplicación en el directorio del proyecto, por ejemplo, asígnale el nombre app.py. Escribe el código de Python en este archivo.
Ejecuta la aplicación mediante Python con el comando siguiente. Esto ejecuta el código de Python que has escrito.
python app.py
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. En este inicio rápido, creamos una llamada saliente.
Llamada a la acción de reconocimiento
Cuando la aplicación responde a la llamada, puede proporcionar información sobre cómo reconocer la entrada del participante y reproducir un mensaje.
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 ])
En el caso de los flujos de conversión de voz a texto, la acción de reconocimiento de automatización de llamadas también admite el uso de modelos de voz personalizados. Las características como los modelos de voz personalizados pueden ser útiles cuando se crea una aplicación que necesita escuchar palabras complejas que los modelos predeterminados de conversión de voz a texto pueden no ser capaces de entender, un buen ejemplo de esto puede ser cuando se crea una aplicación para el sector telemédico y el agente virtual debe ser capaz de reconocer términos médicos. Puedes obtener más información sobre cómo crear e implementar modelos de voz personalizados aquí.
Opciones de conversión de voz en 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")
Speech-to-Text
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")
Conversión de voz en texto o 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")
Nota:
Si no se establecen parámetros, los valores predeterminados se aplican siempre que sea posible.
Recepción de actualizaciones de eventos de reconocimiento
Los desarrolladores pueden suscribirse a los eventos RecognizeCompleted y RecognizeFailed en la devolución de llamada de webhook que registraron para la llamada para crear lógica de negocios en su aplicación para determinar los pasos siguientes cuando se produce uno de los eventos mencionados anteriormente.
Ejemplo de cómo se puede deserializar el 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);
Ejemplo de cómo se puede deserializar el evento RecognizeFailed:
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Ejemplo de cómo se puede deserializar el evento RecognizeCanceled:
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Códigos de evento
Estado | Código | SubCode | Mensaje |
---|---|---|---|
RecognizeCompleted | 200 | 8531 | Acción completada, número máximo de dígitos recibidos. |
RecognizeCompleted | 200 | 8514 | Acción completada a medida que se detectó el tono de detención. |
RecognizeCompleted | 400 | 8508 | Error de acción, se canceló la operación. |
RecognizeCompleted | 400 | 8532 | Error de acción: se alcanzó el tiempo de espera de silencio entre dígitos. |
RecognizeCanceled | 400 | 8508 | Error de acción, se canceló la operación. |
RecognizeFailed | 400 | 8510 | Ha habido un error, se ha alcanzado el tiempo de espera de silencio inicial. |
RecognizeFailed | 500 | 8511 | Error de acción al intentar reproducir el símbolo del sistema. |
RecognizeFailed | 500 | 8512 | Error interno desconocido del servidor. |
RecognizeFailed | 400 | 8510 | Error de acción, se alcanzó el tiempo de espera de silencio inicial |
RecognizeFailed | 400 | 8532 | Error de acción: se alcanzó el tiempo de espera de silencio entre dígitos. |
RecognizeFailed | 400 | 8565 | Ha habido un error, solicitud incorrecta a los servicios de Azure AI. Compruebe los parámetros de entrada. |
Error de reconocimiento | 400 | 8565 | Ha habido un error, solicitud incorrecta a los servicios de Azure AI. No se puede procesar la carga proporcionada, comprueba la entrada de origen de reproducción. |
RecognizeFailed | 401 | 8565 | Ha habido un error, error de autenticación de los servicios de Azure AI. |
RecognizeFailed | 403 | 8565 | Ha habido un error, solicitud prohibida a los servicios de Azure AI, la suscripción gratuita usada por la solicitud ha agotado la cuota. |
RecognizeFailed | 429 | 8565 | Ha habido un error, las solicitudes superaron el número de solicitudes simultáneas permitidas para la suscripción de servicios de Azure AI. |
RecognizeFailed | 408 | 8565 | Ha habido un error, se agota el tiempo de espera de la solicitud a los servicios de Azure AI. |
RecognizeFailed | 500 | 8511 | Error de acción al intentar reproducir el símbolo del sistema. |
RecognizeFailed | 500 | 8512 | Error interno desconocido del servidor. |
Limitaciones conocidas
- DTMF en banda no se admite, use RFC 2833 DTMF en su lugar.
- Los mensajes de texto a voz admiten un máximo de 400 caracteres, si el mensaje es mayor que este se recomienda usar SSML para acciones de reproducción basadas en texto a voz.
- En escenarios en los que se supera el límite de cuota del servicio de voz, puedes solicitar aumentar este limite siguiendo los pasos descritos aquí.
Limpieza de recursos
Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. Obtenga más información sobre la limpieza de recursos.
Pasos siguientes
- Más información sobre la Recopilación de entradas de usuario
- Más información sobre la Reproducción de audio en la llamada
- Más información sobre la automatización de llamadas
Comentaris
https://aka.ms/ContentUserFeedback.
Properament: al llarg del 2024 eliminarem gradualment GitHub Issues com a mecanisme de retroalimentació del contingut i el substituirem per un nou sistema de retroalimentació. Per obtenir més informació, consulteu:Envieu i consulteu els comentaris de