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
- Program Visual Studio 2019 lub nowszy. W tym przewodniku jest używany program Visual Studio 2019
- Klucz zasobu usługi Mowa azure AI i region: utwórz zasób usługi Mowa w witrynie Azure Portal. Aby uzyskać więcej informacji, zobacz Tworzenie zasobu z wieloma usługami.
- Utworzona wcześniej aplikacja Polecenia niestandardowe
- Aplikacja kliencka z obsługą zestawu SPEECH SDK: Instrukcje: integracja z aplikacją kliencką przy użyciu zestawu Speech SDK
Konfigurowanie działania Wyślij do klienta
Otwórz utworzoną wcześniej aplikację Polecenia niestandardowe
Wybierz polecenie TurnOnOff , wybierz pozycję ConfirmationResponse w obszarze reguła uzupełniania, a następnie wybierz pozycję Dodaj akcję
W obszarze Nowy typ akcji wybierz pozycję Wyślij działanie do klienta
Skopiuj poniższy kod JSON do zawartości Działania
{ "type": "event", "name": "UpdateDeviceState", "value": { "state": "{OnOff}", "device": "{SubjectDevice}" } }
Wybierz pozycję Zapisz , aby utworzyć nową regułę z akcją Wyślij działanie, Szkolenie i Publikowanie zmiany
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.
Odpowiedni klient twojego rozwiązania.
Wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania, wybierz pozycję Przeglądaj
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.
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 InitializeDialogServiceConnector
pliku 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ć
- Uruchamianie aplikacji
- Wybierz pozycję Włącz mikrofon
- Wybierz przycisk Mów
- Powiedz
turn on the tv
- Stan wizualny telewizora powinien zmienić się na "włączony"
Następne kroki
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla