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

Configurare l'attività Send al client

  1. Aprire l'applicazione Comandi personalizzati creata in precedenza

  2. Selezionare Il comando TurnOnOff , selezionare ConfirmationResponse in regola di completamento, quindi selezionare Aggiungi un'azione

  3. In Nuovo tipo di azione selezionare Invia attività al client

  4. Copiare il codice JSON seguente nel contenuto dell'attività

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. Selezionare Salva per creare una nuova regola con un'azione Invia attività, Eseguire il training e pubblicare la modifica

    Send Activity completion rule

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.

  1. Right-client la soluzione.

  2. Scegliere Gestisci pacchetti NuGet per la soluzione, selezionare Sfoglia

  3. 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.

    Send Activity payload

  4. 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 InitializeDialogServiceConnectorsostituire 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

  1. Avviare l'applicazione
  2. Selezionare Abilita microfono
  3. Selezionare il pulsante Talk (Parla)
  4. Pronunciare la frase turn on the tv
  5. Lo stato visivo della tv deve cambiare in "on"

    Screenshot that shows that the visual state of the T V is now on.

Passaggi successivi