Udostępnij za pośrednictwem


Wysyłanie działań poleceń niestandardowych do aplikacji klienckiej

Ważne

Polecenia niestandardowe zostaną wycofane 30 kwietnia 2026 r. Od 30 października 2023 r. nie można tworzyć nowych aplikacji poleceń niestandardowych w programie Speech Studio. W związku z tą zmianą usługa LUIS zostanie wycofana 1 października 2025 r. Od 1 kwietnia 2023 r. nie można tworzyć nowych zasobów usługi LUIS.

Z tego artykułu dowiesz się, jak wysyłać działanie z aplikacji Custom Commands do aplikacji klienckiej z uruchomionym zestawem Speech SDK.

Wykonasz następujące zadania:

  • Definiowanie i wysyłanie niestandardowego ładunku JSON z poziomu aplikacji Custom Commands
  • Odbieranie i wizualizowanie niestandardowej zawartości ładunku JSON z aplikacji klienckiej zestawu SPEECH SDK platformy UWP języka C#

Wymagania wstępne

Konfigurowanie działania Wyślij do klienta

  1. Otwórz utworzoną wcześniej aplikację Polecenia niestandardowe

  2. Wybierz polecenie TurnOnOff , wybierz pozycję ConfirmationResponse w obszarze reguła uzupełniania, a następnie wybierz pozycję Dodaj akcję

  3. W obszarze Nowy typ akcji wybierz pozycję Wyślij działanie do klienta

  4. Skopiuj poniższy kod JSON do zawartości Działania

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. Wybierz pozycję Zapisz , aby utworzyć nową regułę z akcją Wyślij działanie, Szkolenie i Publikowanie zmiany

    Send Activity completion rule

Integracja z aplikacją kliencką

W instrukcji: Konfigurowanie aplikacji klienckiej przy użyciu zestawu Speech SDK (wersja zapoznawcza) utworzono aplikację kliencką platformy UWP z zestawem SPEECH SDK obsługującym polecenia, takie jak turn on the tv, turn off the fan. Po dodaniu niektórych wizualizacji można zobaczyć wynik tych poleceń.

Aby dodać pola oznaczone etykietą z tekstem wskazującym lub wyłączonym, dodaj następujący blok XML stackPanel do elementu 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 ....../>

Dodawanie bibliotek referencyjnych

Ponieważ utworzono ładunek JSON, należy dodać odwołanie do biblioteki JSON.NET w celu obsługi deserializacji.

  1. Odpowiedni klient twojego rozwiązania.

  2. Wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania, wybierz pozycję Przeglądaj

  3. Jeśli zainstalowano już Newtonsoft.json, upewnij się, że jego wersja to co najmniej 12.0.3. Jeśli nie, przejdź do obszaru Zarządzanie pakietami NuGet dla rozwiązania — Aktualizacje wyszukaj Newtonsoft.json, aby go zaktualizować. W tym przewodniku jest używana wersja 12.0.3.

    Send Activity payload

  4. Upewnij się również, że pakiet NuGet Microsoft.NETCore.UniversalWindowsPlatform ma co najmniej 6.2.10. W tym przewodniku jest używana wersja 6.2.10.

W obszarze "MainPage.xaml.cs" dodaj

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

Obsługa odebranych ładunków

W InitializeDialogServiceConnectorpliku zastąp ActivityReceived program obsługi zdarzeń następującym kodem. Zmodyfikowany ActivityReceived program obsługi zdarzeń wyodrębnia ładunek z działania i zmienia odpowiednio stan wizualny telewizora lub wentylatora.

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);
    }
};

Czas to wypróbować

  1. Uruchamianie aplikacji
  2. Wybierz pozycję Włącz mikrofon
  3. Wybierz przycisk Mów
  4. Powiedz turn on the tv
  5. Stan wizualny telewizora powinien zmienić się na "włączony"

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

Następne kroki