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
- Visual Studio 2019 atau lebih tinggi. Panduan ini menggunakan Visual Studio 2019
- Kunci dan wilayah sumber daya Azure AI Speech: Buat sumber daya Ucapan di portal Azure. Untuk informasi selengkapnya, lihat Membuat sumber daya multi-layanan.
- Aplikasi Perintah Kustom yang dibuat sebelumnya
- Aplikasi klien yang diaktifkan SDK Ucapan: Cara Penggunaan: Integrasikan dengan aplikasi klien menggunakan SDK Ucapan
Penyiapan Kirim aktivitas ke klien
Buka aplikasi Perintah Kustom yang sebelumnya Anda buat
Pilih perintah TurnOnOff, pilih ConfirmationResponse di bawah aturan penyelesaian, lalu pilih Tambahkan tindakan
Di bawah Jenis Tindakan Baru, pilih Kirim aktivitas ke klien
Salin JSON di bawah ini ke Konten aktivitas
{ "type": "event", "name": "UpdateDeviceState", "value": { "state": "{OnOff}", "device": "{SubjectDevice}" } }
Pilih Simpan untuk membuat aturan baru dengan tindakan Kirim Aktivitas, Latih dan Terbitkan perubahan
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.
Klien yang tepat adalah solusi Anda.
Pilih Kelola Paket NuGet untuk Solusi, Pilih Telusuri
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.
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
- Mulai aplikasi
- Pilih Aktifkan mikrofon
- Pilih tombol Bicara
- Katakan
turn on the tv
- Status visual tv harus berubah menjadi "aktif"