İstemci uygulamasına Özel Komutlar gönderme etkinliği
Önemli
Özel Komutlar 30 Nisan 2026'da kullanımdan kaldırılacaktır. 30 Ekim 2023 itibarıyla Speech Studio'da yeni Özel Komutlar uygulaması oluşturamazsınız. Bu değişiklikle ilgili olarak LUIS, 1 Ekim 2025'te kullanımdan kaldırılacaktır. 1 Nisan 2023 itibarıyla yeni LUIS kaynakları oluşturamazsınız.
Bu makalede, Özel Komutlar uygulamasından Konuşma SDK'sını çalıştıran bir istemci uygulamasına etkinlik göndermeyi öğreneceksiniz.
Aşağıdaki görevleri tamamlarsınız:
- Özel Komutlar uygulamanızdan özel JSON yükü tanımlama ve gönderme
- C# UWP Konuşma SDK'sı istemci uygulamasından özel JSON yükü içeriğini alma ve görselleştirme
Önkoşullar
- Visual Studio 2019 veya üzeri. Bu kılavuzda Visual Studio 2019 kullanılır
- Azure AI Konuşma kaynak anahtarı ve bölgesi: Azure portalında Konuşma kaynağı oluşturma. Daha fazla bilgi için bkz . Çok hizmetli kaynak oluşturma.
- Önceden oluşturulmuş Özel Komutlar uygulaması
- Konuşma SDK'sı özellikli bir istemci uygulaması: Nasıl yapılır: Konuşma SDK'sını kullanarak bir istemci uygulamasıyla tümleştirme
Kurulum İstemciye etkinlik gönderme
Daha önce oluşturduğunuz Özel Komutlar uygulamasını açın
TurnOnOff komutunu seçin, tamamlama kuralı altında ConfirmationResponse'u ve ardından Eylem ekle'yi seçin
Yeni Eylem Türü'nin altında Etkinliği istemciye gönder'i seçin
Aşağıdaki JSON dosyasını Etkinlik içeriğine kopyalayın
{ "type": "event", "name": "UpdateDeviceState", "value": { "state": "{OnOff}", "device": "{SubjectDevice}" } }
Kaydet'i seçerek Etkinlik Gönder eylemiyle yeni bir kural oluşturun, Değişikliği Eğitin ve Yayımlayın
İstemci uygulamasıyla tümleştirme
Nasıl yapılır: İstemci uygulamasını Konuşma SDK'sı (Önizleme) ile ayarlama bölümünde, gibi turn on the tv
turn off the fan
komutları işleyen Konuşma SDK'sı ile bir UWP istemci uygulaması oluşturdunuz. Bazı görseller eklendikten sonra bu komutların sonucunu görebilirsiniz.
Metni açık veya kapalı olarak gösteren etiketli kutular eklemek için aşağıdaki StackPanel XML bloğunu öğesine MainPage.xaml
ekleyin.
<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 ....../>
Başvuru kitaplıkları ekleme
Bir JSON yükü oluşturduğunuzdan, seri durumdan çıkarma işlemini işlemek için JSON.NET kitaplığına bir başvuru eklemeniz gerekir.
Çözümünüzü doğru istemciye ekleyin.
Çözüm için NuGet Paketlerini Yönet'i ve Gözat'ı seçin
Newtonsoft.json zaten yüklediyseniz sürümünün en az 12.0.3 olduğundan emin olun. Aksi takdirde Çözüm için NuGet Paketlerini Yönetme - Güncelleştirmeler gidin, güncelleştirmek için Newtonsoft.json arayın. Bu kılavuz 12.0.3 sürümünü kullanıyor.
Ayrıca, Microsoft.NETCore.UniversalWindowsPlatform NuGet paketinin en az 6.2.10 olduğundan emin olun. Bu kılavuz 6.2.10 sürümünü kullanıyor.
'MainPage.xaml.cs' içinde
using Newtonsoft.Json;
using Windows.ApplicationModel.Core;
using Windows.UI.Core;
Alınan yükü işleme
içinde InitializeDialogServiceConnector
, olay işleyicisini ActivityReceived
aşağıdaki kodla değiştirin. Değiştirilen ActivityReceived
olay işleyicisi etkinlikten yükü ayıklar ve sırasıyla tv veya fan görsel durumunu değiştirir.
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);
}
};
Deneyin
- Uygulamayı başlatma
- Mikrofonu etkinleştir'i seçin
- Konuş düğmesini seçin
turn on the tv
deyin- Tv'nin görsel durumu "açık" olarak değiştirilmelidir