Sdílet prostřednictvím


Odeslání aktivity vlastních příkazů do klientské aplikace

Důležité

Vlastní příkazy budou vyřazeny 30. dubna 2026. Od 30. října 2023 nemůžete v sadě Speech Studio vytvářet nové aplikace Vlastních příkazů. V souvislosti s touto změnou bude služba LUIS vyřazena 1. října 2025. Od 1. dubna 2023 nemůžete vytvářet nové prostředky LUIS.

V tomto článku se dozvíte, jak odesílat aktivitu z aplikace Vlastní příkazy do klientské aplikace se sadou Speech SDK.

Provedete následující úkoly:

  • Definování a odeslání vlastní datové části JSON z aplikace Vlastních příkazů
  • Příjem a vizualizace vlastního obsahu datové části JSON z klientské aplikace sady SPEECH SDK pro UPW v jazyce C#

Požadavky

Nastavení aktivity Odesílání do klienta

  1. Otevření aplikace Vlastní příkazy, kterou jste vytvořili dříve

  2. Vyberte příkaz TurnOnOff , v pravidle dokončení vyberte ConfirmationResponse a pak vyberte Přidat akci.

  3. V části Nový typ akce vyberte Odeslat aktivitu klientovi.

  4. Zkopírujte následující KÓD JSON do obsahu aktivity.

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. Výběrem možnosti Uložit vytvořte nové pravidlo s akcí Odeslat aktivitu, trénujte a publikujte změnu.

    Send Activity completion rule

Integrace s klientskou aplikací

V tématu Postupy: Nastavení klientské aplikace pomocí sady Speech SDK (Preview) jste vytvořili klientskou aplikaci UPW pomocí sady Speech SDK, která zpracovávala příkazy, jako turn on the tvje například , turn off the fan. Když přidáte některé vizuály, uvidíte výsledek těchto příkazů.

Chcete-li přidat označená pole s textem označujícím zapnuto nebo vypnuto, přidejte do souboru MainPage.xamlStackPanel následující blok XML .

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

Přidání referenčních knihoven

Vzhledem k tomu, že jste vytvořili datovou část JSON, musíte přidat odkaz na knihovnu JSON.NET pro zpracování deserializace.

  1. Řešení se chytá správně.

  2. Zvolte Spravovat balíčky NuGet pro řešení, vyberte Procházet.

  3. Pokud jste už nainstalovali Newtonsoft.json, ujistěte se, že jeho verze je minimálně 12.0.3. Pokud ne, přejděte na Spravovat balíčky NuGet pro řešení – Aktualizace, vyhledejte Newtonsoft.json, které chcete aktualizovat. Tato příručka používá verzi 12.0.3.

    Send Activity payload

  4. Ujistěte se také, že balíček NuGet Microsoft.NETCore.UniversalWindowsPlatform je alespoň 6.2.10. Tato příručka používá verzi 6.2.10.

Do MainPage.xaml.cs přidejte

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

Zpracování přijaté datové části

Nahraďte InitializeDialogServiceConnectorobslužnou rutinu ActivityReceived události následujícím kódem. Upravená obslužná ActivityReceived rutina události extrahuje datovou část z aktivity a změní vizuální stav televizoru nebo ventilátoru.

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

Vyzkoušejte si to.

  1. Spuštění aplikace
  2. Select Enable microphone (Povolit mikrofon).
  3. Vyberte tlačítko pro hlasové ovládání.
  4. Vyslovte turn on the tv.
  5. Vizuální stav televizoru by se měl změnit na zapnuto.

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

Další kroky