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
- Visual Studio 2019 eller senare. Den här guiden använder Visual Studio 2019
- En Azure AI Speech-resursnyckel och -region: Skapa en Speech-resurs på Azure-portalen. Mer information finns i Skapa en resurs med flera tjänster.
- En tidigare skapad app för Anpassade kommandon
- En Speech SDK-aktiverad klientapp: Instruktioner: Integrera med ett klientprogram med Speech SDK
Konfigurera Skicka aktivitet till klient
Öppna programmet Anpassade kommandon som du skapade tidigare
Välj TurnOnOff-kommandot , välj ConfirmationResponse under slutföranderegel och välj sedan Lägg till en åtgärd
Under Ny åtgärdstyp väljer du Skicka aktivitet till klient
Kopiera JSON nedan till aktivitetsinnehåll
{ "type": "event", "name": "UpdateDeviceState", "value": { "state": "{OnOff}", "device": "{SubjectDevice}" } }
Välj Spara för att skapa en ny regel med en skicka aktivitet-åtgärd, träna och publicera ändringen
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 på 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.
Rätt klient för din lösning.
Välj Hantera NuGet-paket för lösning, välj Bläddra
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.
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 InitializeDialogServiceConnector
ersä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
- Starta programmet
- Välj Aktivera mikrofon
- Välj knappen Prata
- Säg
turn on the tv
- Tv:ns visuella tillstånd bör ändras till "på"
Nästa steg
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för