Dela via


Skicka aktiviteten Anpassade kommandon till klientprogrammet

Viktigt!

Anpassade kommandon dras tillbaka den 30 april 2026. Från och med den 30 oktober 2023 kan du inte skapa nya program för anpassade kommandon i Speech Studio. I samband med den här ändringen dras LUIS tillbaka den 1 oktober 2025. Från och med den 1 april 2023 kan du inte skapa nya LUIS-resurser.

I den här artikeln får du lära dig hur du skickar aktivitet från ett program för anpassade kommandon till ett klientprogram som kör Speech SDK.

Du utför följande uppgifter:

  • Definiera och skicka en anpassad JSON-nyttolast från ditt program för anpassade kommandon
  • Ta emot och visualisera det anpassade JSON-nyttolastinnehållet från ett C#UWP Speech SDK-klientprogram

Förutsättningar

Konfigurera Skicka aktivitet till klient

  1. Öppna programmet Anpassade kommandon som du skapade tidigare

  2. Välj TurnOnOff-kommandot , välj ConfirmationResponse under slutföranderegel och välj sedan Lägg till en åtgärd

  3. Under Ny åtgärdstyp väljer du Skicka aktivitet till klient

  4. Kopiera JSON nedan till aktivitetsinnehåll

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. Välj Spara för att skapa en ny regel med en skicka aktivitet-åtgärd, träna och publicera ändringen

    Send Activity completion rule

Integrera med klientprogram

I Instruktioner: Konfigurera klientprogram med Speech SDK (förhandsversion) skapade du ett UWP-klientprogram med Speech SDK som hanterade kommandon som turn on the tv, turn off the fan. När vissa visuella objekt har lagts till kan du se resultatet av dessa kommandon.

Om du vill lägga till etiketterade rutor med text som anger eller av lägger du till följande XML-block i StackPanel i 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 ....../>

Lägga till referensbibliotek

Eftersom du har skapat en JSON-nyttolast måste du lägga till en referens till JSON.NET-biblioteket för att hantera deserialisering.

  1. Rätt klient för din lösning.

  2. Välj Hantera NuGet-paket för lösning, välj Bläddra

  3. Om du redan har installerat Newtonsoft.json kontrollerar du att dess version är minst 12.0.3. Annars går du till Hantera NuGet-paket för lösning – Uppdateringar söker du efter Newtonsoft.json för att uppdatera den. Den här guiden använder version 12.0.3.

    Send Activity payload

  4. Kontrollera också att NuGet-paketet Microsoft.NETCore.UniversalWindowsPlatform är minst 6.2.10. Den här guiden använder version 6.2.10.

I "MainPage.xaml.cs" lägger du till

using Newtonsoft.Json; 
using Windows.ApplicationModel.Core;
using Windows.UI.Core;

Hantera den mottagna nyttolasten

I InitializeDialogServiceConnectorersätter du ActivityReceived händelsehanteraren med följande kod. Den ändrade ActivityReceived händelsehanteraren extraherar nyttolasten från aktiviteten och ändrar tv:ns eller fläktens visuella tillstånd.

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 nu

  1. Starta programmet
  2. Välj Aktivera mikrofon
  3. Välj knappen Prata
  4. Säg turn on the tv
  5. Tv:ns visuella tillstånd bör ändras till "på"

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

Nästa steg