Envío de actividad de Comandos personalizados a una aplicación cliente
Importante
Comandos personalizados se retirará el 30 de abril de 2026. Desde el 30 de octubre de 2023 no se puede crear nuevas aplicaciones de Comandos personalizados en Speech Studio. En relación con este cambio, LUIS se retirará el 1 de octubre de 2025. Desde el 1 de abril de 2023, no se pueden crear nuevos recursos de LUIS.
En este artículo, aprenderá a enviar actividades desde una aplicación de Comandos personalizados a una aplicación cliente que ejecute el SDK de Voz.
Debe realizar las siguientes tareas:
- Definir y enviar una carga JSON personalizada desde la aplicación de comandos personalizados.
- Recibir y visualizar el contenido de la carga JSON personalizada desde una aplicación cliente del SDK de Voz en C# de UWP.
Requisitos previos
- Visual Studio 2019 o cualquier versión posterior. Esta guía usa Visual Studio 2019
- Una clave y región de recursos de Voz de Azure AI: creación de un recurso de Voz en Azure Portal. Para más información, consulte Crear un recurso multiservicio.
- Una aplicación de Comandos personalizados creada previamente.
- Una aplicación cliente habilitada para el SDK de Voz: Procedimiento: Integración con una aplicación cliente mediante el SDK de Voz
Configuración del envío de actividad a un cliente
Abra la aplicación de Comandos personalizados que creó anteriormente.
Seleccione el comando TurnOnOff, seleccione ConfirmationResponse en regla de finalización y, a continuación, seleccione Agregar una acción.
En Nuevo tipo de acción, seleccione Send activity to client (enviar una actividad al cliente).
Copie el código JSON siguiente en Activity content (Contenido de la actividad).
{ "type": "event", "name": "UpdateDeviceState", "value": { "state": "{OnOff}", "device": "{SubjectDevice}" } }
Seleccione Guardar para crear una nueva regla con una acción Enviar actividad, Entrenar y Publicar el cambio
Integración con la aplicación cliente
En Procedimiento: Configuración de una aplicación de comandos personalizados con el SDK de Voz (versión preliminar) creó una aplicación cliente de UWP con el SDK de Voz que administraba comandos como turn on the tv
, turn off the fan
. Después de agregar algunos objetos visuales, puede ver el resultado de esos comandos.
Para agregar cuadros etiquetados con texto que indique encendido o apagado, agregue el siguiente bloque XML de StackPanel a MainPage.xaml
.
<StackPanel Orientation="Vertical" H......>
......
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="20">
<Grid x:Name="Grid_TV" Margin="50, 0" Width="100" Height="100" Background="LightBlue">
<StackPanel>
<TextBlock Text="TV" Margin="0, 10" TextAlignment="Center"/>
<TextBlock x:Name="State_TV" Text="off" TextAlignment="Center"/>
</StackPanel>
</Grid>
<Grid x:Name="Grid_Fan" Margin="50, 0" Width="100" Height="100" Background="LightBlue">
<StackPanel>
<TextBlock Text="Fan" Margin="0, 10" TextAlignment="Center"/>
<TextBlock x:Name="State_Fan" Text="off" TextAlignment="Center"/>
</StackPanel>
</Grid>
</StackPanel>
<MediaElement ....../>
Adición de bibliotecas de referencia
Dado que ha creado una carga JSON, ahora necesita agregar una referencia a la biblioteca JSON.NET para controlar la deserialización.
Haga clic con el botón derecho en la solución.
Elija Administrar paquetes NuGet para la Solución, Seleccionar Examinar
Si ya instaló Newtonsoft.json, asegúrese de que su versión sea como mínimo 12.0.3. Si no es así, vaya a Administrar paquetes NuGet para la Solución-Actualizaciones y busque Newtonsoft.json para actualizarlo. Esta guía usa la versión 12.0.3.
Además, asegúrese de que el paquete NuGet Microsoft. NETCore. UniversalWindowsPlatform sea al menos 6.2.10. Esta guía usa la versión 6.2.10.
En "MainPage.xaml.cs", agregue
using Newtonsoft.Json;
using Windows.ApplicationModel.Core;
using Windows.UI.Core;
Control de la carga recibida
En InitializeDialogServiceConnector
, reemplace el controlador de eventos ActivityReceived
por el código siguiente. El controlador de eventos ActivityReceived
modificado extrae la carga de la actividad y cambia el estado visual del televisor o el ventilador, respectivamente.
connector.ActivityReceived += async (sender, activityReceivedEventArgs) =>
{
NotifyUser($"Activity received, hasAudio={activityReceivedEventArgs.HasAudio} activity={activityReceivedEventArgs.Activity}");
dynamic activity = JsonConvert.DeserializeObject(activityReceivedEventArgs.Activity);
var name = activity?.name != null ? activity.name.ToString() : string.Empty;
if (name.Equals("UpdateDeviceState"))
{
Debug.WriteLine("Here");
var state = activity?.value?.state != null ? activity.value.state.ToString() : string.Empty;
var device = activity?.value?.device != null ? activity.value.device.ToString() : string.Empty;
if (state.Equals("on") || state.Equals("off"))
{
switch (device)
{
case "tv":
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal, () => { State_TV.Text = state; });
break;
case "fan":
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal, () => { State_Fan.Text = state; });
break;
default:
NotifyUser($"Received request to set unsupported device {device} to {state}");
break;
}
}
else {
NotifyUser($"Received request to set unsupported state {state}");
}
}
if (activityReceivedEventArgs.HasAudio)
{
SynchronouslyPlayActivityAudio(activityReceivedEventArgs.Audio);
}
};
Prueba
- Inicio de la aplicación
- Seleccione Habilitar micrófono.
- Seleccionar el botón Hablar.
- Diga
turn on the tv
. - El estado visual del televisor debe cambiar a "Encendido".