Kirim aktivitas Perintah Kustom ke aplikasi klien

Penting

Perintah Kustom akan dihentikan pada 30 April 2026. Mulai 30 Oktober 2023 Anda tidak dapat membuat aplikasi Perintah Kustom baru di Speech Studio. Terkait perubahan ini, LUIS akan dihentikan pada 1 Oktober 2025. Mulai 1 April 2023 Anda tidak dapat membuat sumber daya LUIS baru.

Dalam artikel ini, Anda mempelajari cara mengirim aktivitas dari aplikasi Perintah Kustom ke aplikasi klien yang menjalankan SDK Ucapan.

Kemudian, selesaikan tugas-tugas berikut:

  • Tentukan dan kirim payload JSON kustom dari aplikasi Perintah Kustom Anda
  • Menerima dan memvisualisasikan konten payload JSON kustom dari aplikasi klien C# UWP Speech SDK

Prasyarat

Penyiapan Kirim aktivitas ke klien

  1. Buka aplikasi Perintah Kustom yang sebelumnya Anda buat

  2. Pilih perintah TurnOnOff, pilih ConfirmationResponse di bawah aturan penyelesaian, lalu pilih Tambahkan tindakan

  3. Di bawah Jenis Tindakan Baru, pilih Kirim aktivitas ke klien

  4. Salin JSON di bawah ini ke Konten aktivitas

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. Pilih Simpan untuk membuat aturan baru dengan tindakan Kirim Aktivitas, Latih dan Terbitkan perubahan

    Send Activity completion rule

Mengintegrasikan dengan aplikasi klien

Dalam Cara Penggunaan: Menyiapkan aplikasi klien dengan SDK Ucapan (Pratinjau), Anda membuat aplikasi klien UWP dengan SDK Ucapan yang menangani perintah seperti turn on the tv, turn off the fan . Dengan menambahkan beberapa visual, Anda dapat melihat hasil dari perintah tersebut.

Untuk Menambahkan kotak berlabel dengan teks yang menunjukkan aktif atau tidak aktif, tambahkan blok XML berikut dari StackPanel ke 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 ....../>

Menambahkan pustaka referensi

Karena Anda telah membuat payload JSON, Anda perlu menambahkan referensi ke pustaka JSON.NET untuk menangani deserialisasi.

  1. Klien yang tepat adalah solusi Anda.

  2. Pilih Kelola Paket NuGet untuk Solusi, Pilih Telusuri

  3. Jika Anda sudah memasang Newtonsoft.json, pastikan versinya minimal 12.0.3. Jika tidak, buka Kelola Paket NuGet untuk Solusi - Pembaruan, cari Newtonsoft.json untuk memperbaruinya. Panduan ini menggunakan versi 12.0.3.

    Send Activity payload

  4. Selain itu, pastikan versi paket NuGet Microsoft.NETCore.UniversalWindowsPlatform minimal adalah 6.2.10. Panduan ini menggunakan versi 6.2.10.

Di 'MainPage.xaml.cs', tambahkan

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

Menangani payload yang diterima

Di InitializeDialogServiceConnector , ganti penanganan aktivitas ActivityReceived dengan kode berikut. Penanganan aktivitas yang dimodifikasi ActivityReceived mengekstrak payload dari aktivitas dan mengubah status visual tv atau kipas masing-masing.

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

Cobalah

  1. Mulai aplikasi
  2. Pilih Aktifkan mikrofon
  3. Pilih tombol Bicara
  4. Katakan turn on the tv
  5. Status visual tv harus berubah menjadi "aktif"

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

Langkah berikutnya