İ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

Kurulum İstemciye etkinlik gönderme

  1. Daha önce oluşturduğunuz Özel Komutlar uygulamasını açın

  2. TurnOnOff komutunu seçin, tamamlama kuralı altında ConfirmationResponse'u ve ardından Eylem ekle'yi seçin

  3. Yeni Eylem Türü'nin altında Etkinliği istemciye gönder'i seçin

  4. Aşağıdaki JSON dosyasını Etkinlik içeriğine kopyalayın

    {
       "type": "event",
       "name": "UpdateDeviceState",
       "value": {
         "state": "{OnOff}",
         "device": "{SubjectDevice}"
       }
     }
    
  5. Kaydet'i seçerek Etkinlik Gönder eylemiyle yeni bir kural oluşturun, Değişikliği Eğitin ve Yayımlayın

    Send Activity completion rule

İ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 tvturn off the fankomutları 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.xamlekleyin.

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

  1. Çözümünüzü doğru istemciye ekleyin.

  2. Çözüm için NuGet Paketlerini Yönet'i ve Gözat'ı seçin

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

    Send Activity payload

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

  1. Uygulamayı başlatma
  2. Mikrofonu etkinleştir'i seçin
  3. Konuş düğmesini seçin
  4. turn on the tv deyin
  5. Tv'nin görsel durumu "açık" olarak değiştirilmelidir

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

Sonraki adımlar