Inviare l'attività Comandi personalizzati all'applicazione client
Importante
I comandi personalizzati verranno ritirati il 30 aprile 2026. A partire dal 30 ottobre 2023 non è possibile creare nuove applicazioni comandi personalizzati in Speech Studio. In relazione a questa modifica, LUIS verrà ritirato il 1° ottobre 2025. A partire dal 1° aprile 2023 non è possibile creare nuove risorse LUIS.
Questo articolo illustra come inviare attività da un'applicazione Comandi personalizzati a un'applicazione client che esegue Speech SDK.
Completare le attività seguenti:
- Definire e inviare un payload JSON personalizzato dall'applicazione Comandi personalizzati
- Ricevere e visualizzare il contenuto del payload JSON personalizzato da un'applicazione client C# UWP Speech SDK
Prerequisiti
- Visual Studio 2019 o versione successiva. Questa guida usa Visual Studio 2019
- Chiave e area della risorsa Voce di Intelligenza artificiale di Azure: creare una risorsa Voce nel portale di Azure. Per altre informazioni, vedere Creare una risorsa multiservizio.
- Un'app di comandi personalizzati creata in precedenza
- Un'app client abilitata per Speech SDK: Procedura: Integrare con un'applicazione client con Speech SDK
Configurare l'attività Send al client
Aprire l'applicazione Comandi personalizzati creata in precedenza
Selezionare Il comando TurnOnOff , selezionare ConfirmationResponse in regola di completamento, quindi selezionare Aggiungi un'azione
In Nuovo tipo di azione selezionare Invia attività al client
Copiare il codice JSON seguente nel contenuto dell'attività
{ "type": "event", "name": "UpdateDeviceState", "value": { "state": "{OnOff}", "device": "{SubjectDevice}" } }
Selezionare Salva per creare una nuova regola con un'azione Invia attività, Eseguire il training e pubblicare la modifica
Integrazione con l'applicazione client
In Procedura: Configurare l'applicazione client con Speech SDK (anteprima) è stata creata un'applicazione client UWP con Speech SDK che ha gestito comandi come turn on the tv
, turn off the fan
. Con alcuni oggetti visivi aggiunti, è possibile visualizzare il risultato di questi comandi.
Per aggiungere caselle etichettate con testo che indica attivato o disattivato, aggiungere il blocco XML seguente di 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 ....../>
Aggiungere librerie di riferimento
Poiché è stato creato un payload JSON, è necessario aggiungere un riferimento alla libreria JSON.NET per gestire la deserializzazione.
Right-client la soluzione.
Scegliere Gestisci pacchetti NuGet per la soluzione, selezionare Sfoglia
Se è già stato installato Newtonsoft.json, assicurarsi che la versione sia almeno 12.0.3. In caso contrario, passare a Gestisci pacchetti NuGet per la soluzione - Aggiornamenti, cercare Newtonsoft.json per aggiornarlo. Questa guida usa la versione 12.0.3.
Assicurarsi anche che il pacchetto NuGet Microsoft.NETCore.UniversalWindowsPlatform sia almeno 6.2.10. Questa guida usa la versione 6.2.10.
In 'MainPage.xaml.cs', aggiungere
using Newtonsoft.Json;
using Windows.ApplicationModel.Core;
using Windows.UI.Core;
Gestire il payload ricevuto
In InitializeDialogServiceConnector
sostituire il ActivityReceived
gestore eventi con il codice seguente. Il gestore eventi modificato ActivityReceived
estrae il payload dall'attività e modifica rispettivamente lo stato visivo del televisore o della ventola.
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);
}
};
Prova
- Avviare l'applicazione
- Selezionare Abilita microfono
- Selezionare il pulsante Talk (Parla)
- Pronunciare la frase
turn on the tv
- Lo stato visivo della tv deve cambiare in "on"