Aracılığıyla paylaş


İletişim kutusu karmaşıklığını yönetme

ŞUNLAR IÇIN GEÇERLIDIR: SDK v4

Bileşen iletişim kutularıyla, belirli senaryoları işlemek için bağımsız iletişim kutuları oluşturabilir ve büyük bir iletişim kutusu kümesini daha yönetilebilir parçalara ayırabilirsiniz. Bu parçaların her birinin kendi iletişim kutusu kümesi vardır ve dışındaki iletişim kutusu kümeleriyle ad çakışmalarını önler. Bileşen iletişim kutuları şu şekilde yeniden kullanılabilir:

  • Başka bir ComponentDialog bota veya DialogSet botunuza eklendi.
  • Bir paketin parçası olarak dışarı aktarılır.
  • Diğer botlarda kullanılır.

Not

Bot Framework JavaScript, C# ve Python SDK'ları desteklenmeye devam edecektir, ancak Java SDK'sı son uzun vadeli destek Kasım 2023'te sona erecek şekilde kullanımdan kaldırılacaktır.

Java SDK ile oluşturulan mevcut botlar çalışmaya devam edecektir.

Yeni bot derlemesi için Power Virtual Agents'ı kullanmayı göz önünde bulundurun ve doğru sohbet botu çözümünü seçme hakkında bilgi edinin.

Daha fazla bilgi için bkz . Bot oluşturmanın geleceği.

Önkoşullar

Örnek hakkında

Çok aşamalı istem örneğinde, kullanıcıya bir dizi soru soran bir etkileşim oluşturmak için bir şelale iletişim kutusu, birkaç istem ve bir bileşen iletişim kutusu kullanırız. Kod, şu adımlar arasında geçiş yapmak için bir iletişim kutusu kullanır:

Adımlar İstem türü
Kullanıcıdan taşıma modunu isteyin Seçim istemi
Kullanıcıdan adını isteyin Metin istemi
Kullanıcıya yaşını sağlamak isteyip istemediğini sorun İstemi onayla
Evet yanıtı verdilerse, yaşını sorun Yalnızca 0'dan büyük ve 150'den küçük yaşları kabul etmek için doğrulamaya sahip sayı istemi.
Toplanan bilgilerin "tamam" olup olmadığını sorun Onayla istemini yeniden kullan

Son olarak evet yanıtı verdiyseniz toplanan bilgileri görüntüleyin; aksi takdirde, kullanıcıya bilgilerinin saklanmayacağını söyleyin.

Bileşen iletişim kutunuzu uygulama

Çok aşamalı istem örneğinde, kullanıcıya bir dizi soru soran bir etkileşim oluşturmak için bir şelale iletişim kutusu, birkaç istem ve bir bileşen iletişim kutusu kullanırız.

Bileşen iletişim kutusu bir veya daha fazla iletişim kutusunu kapsüller. Bileşen iletişim kutusunda bir iç iletişim kutusu kümesi vardır ve bu iç iletişim kutusu kümesine eklediğiniz iletişim kutuları ve istemler, yalnızca bileşen iletişim kutusunun içinden görünen kendi kimliklerine sahiptir.

İletişim kutularını kullanmak için Microsoft.Bot.Builder.Dialogs NuGet paketini yükleyin.

İletişim Kutuları\UserProfileDialog.cs

UserProfileDialog Burada sınıfı sınıfından ComponentDialog türetilir.

public class UserProfileDialog : ComponentDialog

Oluşturucunun içinde yöntemi, AddDialog bileşen iletişim kutusuna iletişim kutuları ve istemler ekler. Bu yöntemle eklediğiniz ilk öğe, ilk iletişim kutusu olarak ayarlanır. özelliğini açıkça ayarlayarak InitialDialogId ilk iletişim kutusunu değiştirebilirsiniz. Bir bileşen iletişim kutusunu başlattığınızda, ilk iletişim kutusu başlatılır.

public UserProfileDialog(UserState userState)
    : base(nameof(UserProfileDialog))
{
    _userProfileAccessor = userState.CreateProperty<UserProfile>("UserProfile");

    // This array defines how the Waterfall will execute.
    var waterfallSteps = new WaterfallStep[]
    {
        TransportStepAsync,
        NameStepAsync,
        NameConfirmStepAsync,
        AgeStepAsync,
        PictureStepAsync,
        SummaryStepAsync,
        ConfirmStepAsync,
    };

    // Add named dialogs to the DialogSet. These names are saved in the dialog state.
    AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps));
    AddDialog(new TextPrompt(nameof(TextPrompt)));
    AddDialog(new NumberPrompt<int>(nameof(NumberPrompt<int>), AgePromptValidatorAsync));
    AddDialog(new ChoicePrompt(nameof(ChoicePrompt)));
    AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt)));
    AddDialog(new AttachmentPrompt(nameof(AttachmentPrompt), PicturePromptValidatorAsync));

    // The initial child Dialog to run.
    InitialDialogId = nameof(WaterfallDialog);
}

Aşağıdaki kod şelale iletişim kutusunun ilk adımını temsil eder.

private static async Task<DialogTurnResult> NameStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    stepContext.Values["transport"] = ((FoundChoice)stepContext.Result).Value;

    return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = MessageFactory.Text("Please enter your name.") }, cancellationToken);
}

Şelale iletişim kutularını uygulama hakkında daha fazla bilgi için bkz. Sıralı konuşma akışını uygulama.

Çalışma zamanında, bileşen iletişim kutusu kendi iletişim kutusu yığınını korur. Bileşen iletişim kutusu başlatıldığında:

  • Bir örnek oluşturulur ve dış iletişim kutusu yığınına eklenir
  • Durumuna eklediği bir iç iletişim kutusu yığını oluşturur
  • İlk iletişim kutusunu başlatır ve bunu iç iletişim kutusu yığınına ekler.

Üst bağlam, bileşeni etkin iletişim kutusu olarak görür. Ancak, bileşenin içindeki bağlama göre, ilk iletişim kutusu etkin iletişim kutusu gibi görünür.

Botunuzdan iletişim kutusunu arama

Bileşen iletişim kutusunu eklediğiniz dış iletişim kutusu kümesinde, bileşen iletişim kutusunda oluşturduğunuz kimlik bulunur. Dış kümede bileşen, istemlerin olduğu gibi tek bir iletişim kutusu gibi görünür.

Bileşen iletişim kutusunu kullanmak için botun iletişim kutusu kümesine bunun bir örneğini ekleyin.

Botlar\DialogBot.cs

Örnekte bu işlem bot OnMessageActivityAsync yönteminden RunAsync çağrılan yöntem kullanılarak gerçekleştirilir.

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Message Activity.");

    // Run the Dialog with the new message Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

Botunuzu test etme

  1. Henüz yapmadıysanız Bot Framework Öykünücüsü'ni yükleyin.
  2. Örneği makinenizde yerel olarak çalıştırın.
  3. Emulator'ı başlatın, botunuza bağlanın ve aşağıda gösterildiği gibi ileti gönderin.

Çok aşamalı istem iletişim kutusundan örnek transkript.

Ek bilgi

bileşen iletişim kutuları için iptal nasıl çalışır?

Bileşen iletişim kutusunun bağlamındaki tüm iletişim kutularını iptal et çağrısı yaparsanız, bileşen iletişim kutusu iç yığınındaki tüm iletişim kutularını iptal eder ve ardından denetimi dış yığındaki bir sonraki iletişim kutusuna döndürerek sonlanır.

Dış bağlamdaki tüm iletişim kutularını iptal et çağrısı yaparsanız bileşen, dış bağlamdaki iletişim kutularının geri kalanıyla birlikte iptal edilir.

Sonraki adımlar

Dallanıp döngüye alınabilen karmaşık konuşmalar oluşturmayı öğrenin.