Share via


Egyéni parancsok küldése tevékenység az ügyfélalkalmazásba

Fontos

Az egyéni parancsok 2026. április 30-án megszűnnek. 2023. október 30-ától nem hozhat létre új Egyéni parancsokat a Speech Studióban. A módosítással kapcsolatban a LUIS 2025. október 1-jén megszűnik. 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat.

Ebből a cikkből megtudhatja, hogyan küldhet tevékenységeket egyéni parancsok alkalmazásból a Speech SDK-t futtató ügyfélalkalmazásnak.

A következő feladatokat hajtja végre:

  • Egyéni JSON-hasznos adatok definiálása és küldése az Egyéni parancsok alkalmazásból
  • Az egyéni JSON hasznos adattartalom fogadása és vizualizációja egy C# UWP Speech SDK-ügyfélalkalmazásból

Előfeltételek

Tevékenység küldése az ügyfélnek beállítás

  1. A korábban létrehozott Egyéni parancsok alkalmazás megnyitása

  2. Válassza a TurnOnOff parancsot, válassza a ConfirmationResponse lehetőséget a befejezési szabály alatt, majd válassza a Művelet hozzáadása lehetőséget

  3. Az Új művelettípus csoportban válassza a Tevékenység küldése az ügyfélnek lehetőséget

  4. Másolja az alábbi JSON-t tevékenységtartalmakba

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. A Mentés gombra kattintva új szabályt hozhat létre a Tevékenység küldése művelettel, betanítsa és közzétegye a módosítást

    Send Activity completion rule

Integrálás ügyfélalkalmazással

Útmutató : Ügyfélalkalmazás beállítása a Speech SDK-val (előzetes verzió) egy UWP-ügyfélalkalmazást hozott létre a Speech SDK-val, amely olyan parancsokat kezelt, mint a turn on the tv, turn off the fan. Néhány vizualizáció hozzáadásával láthatja a parancsok eredményét.

Ha be- vagy kikapcsoltszöveget tartalmazó címkézett mezőket szeretne hozzáadni, adja hozzá a StackPanel MainPage.xamlkövetkező XML-blokkját.

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

Referenciatárak hozzáadása

Mivel létrehozott egy hasznos JSON-adatot, a deszerializálás kezeléséhez hozzá kell adnia egy hivatkozást a JSON.NET kódtárhoz.

  1. A megoldás jobb ügyfélalkalmazása.

  2. Válassza a Megoldáshoz készült NuGet-csomagok kezelése lehetőséget, válassza a Tallózás lehetőséget

  3. Ha már telepítette Newtonsoft.json, győződjön meg arról, hogy annak verziója legalább 12.0.3. Ha nem, nyissa meg a Megoldás NuGet-csomagjainak kezelését – Frissítések, keresse meg a Newtonsoft.json a frissítéséhez. Ez az útmutató a 12.0.3-at használja.

    Send Activity payload

  4. Emellett győződjön meg arról, hogy a NuGet-csomag Microsoft.NETCore.UniversalWindowsPlatform értéke legalább 6.2.10. Ez az útmutató a 6.2.10-es verziót használja.

A "MainPage.xaml.cs"-ban adja hozzá a

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

A kapott hasznos adatok kezelése

Ebben InitializeDialogServiceConnectoraz esetben cserélje le az ActivityReceived eseménykezelőt a következő kódra. A módosított ActivityReceived eseménykezelő kinyeri a hasznos adatokat a tevékenységből, és módosítja a tv vagy a ventilátor vizuális állapotát.

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

Próba

  1. Az alkalmazás elindítása
  2. Válassza a Mikrofon engedélyezése lehetőséget
  3. Válassza a Beszéd gombot
  4. Mondja a következőt: turn on the tv
  5. A tv vizualizációs állapotának "be" értékre kell változnia

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

Következő lépések