Ara yazılım
ŞUNLAR IÇIN GEÇERLIDIR: SDK v4
Ara yazılım, bağdaştırıcı ile bot mantığınız arasında duran ve başlatma sırasında bağdaştırıcınızın ara yazılım koleksiyonuna eklenen bir sınıftır. SDK kendi ara yazılımınızı yazmanıza veya başkaları tarafından oluşturulan ara yazılımı eklemenize olanak tanır. Botunuza gelen veya botunuzdan giden her etkinlik ara yazılımınız üzerinden akıtılır.
Bağdaştırıcı, bot ara yazılım işlem hattı aracılığıyla gelen etkinlikleri işleyip botunuzun mantığına yönlendirir ve ardından yeniden geri gider. Bota gelen ve bottan giden her etkinlik akışında, ara yazılımın her parçası bot mantığı çalıştırılmadan önce ve çalıştırıldıktan sonra etkinliği inceleyebilir ve etkinlik üzerinde işlem yapabilir.
Ara yazılıma geçmeden önce botları genel olarak anlamak ve etkinlikleri nasıl işlediklerini anlamak önemlidir.
Ara yazılım için kullanımlar
Şu soru sık sık ortaya çıkar: "Eylemleri ne zaman ara yazılım olarak uygulamalı ve normal bot mantığımı kullanmalıyım?" Ara yazılım, konuşmanın her dönüşü işlenmeden önce ve sonrasında kullanıcılarınızın konuşma akışıyla etkileşime geçmek için size ek fırsatlar sağlar. Ara yazılım ayrıca konuşmayla ilgili bilgileri depolamanıza ve almanıza ve gerektiğinde ek işlem mantığını çağırmanıza olanak tanır. Ara yazılımların yararlı olabileceği bazı yaygın senaryolar aşağıdadır.
Her etkinliğe bakma veya etkinlik üzerinde hareket etme
Botunuzun her etkinlikte veya belirli bir türdeki her etkinlikte bir şeyler yapması gereken birçok durum vardır. Örneğin, botunuzun aldığı her ileti etkinliğini günlüğe kaydetmek veya bot bu dönüşte başka bir yanıt oluşturmadıysa bir geri dönüş yanıtı sağlamak isteyebilirsiniz. Ara yazılım, bot mantığının geri kalanı yürütülmeden önce ve sonra işlem yapabilme özelliğiyle bu tür işlemler için harika bir yerdir.
Dönüş bağlamını değiştirme veya geliştirme
Bot etkinlikte sağlanandan daha fazla bilgiye sahipse bazı konuşmalar çok daha verimli olabilir. Bu durumda ara yazılım, şimdiye kadar sahip olduğu konuşma durumu bilgilerine bakabilir, bir dış veri kaynağını sorgulayabilir ve yürütmeyi bot mantığına geçirmeden önce bunu bağlam nesnesine ekler.
SDK, gelen ve giden etkinlikleri kaydedebilen günlüğe kaydetme ara yazılımını tanımlar, ancak kendi ara yazılımınızı da tanımlayabilirsiniz.
Bot ara yazılım işlem hattı
Her etkinlik için bağdaştırıcı ara yazılımı eklediğiniz sırayla çağırır. Bağdaştırıcı, dönüş ve sonraki temsilci için bağlam nesnesine geçer ve ara yazılım, denetimi işlem hattındaki bir sonraki ara yazılıma geçirmek için temsilciyi çağırır. Ara yazılım, yöntemi tamamlamadan önce bir sonraki temsilci döndükten sonra da bir şeyler yapma fırsatına sahiptir. Her ara yazılım nesnesinin işlem hattında onu izleyen ara yazılım nesneleriyle ilgili olarak işlem yapmak için ilk ve son şansı olduğu gibi düşünebilirsiniz.
Örnek:
- İlk ara yazılım nesnesinin dönüş işleyicisi , sonrakini çağırmadan önce kodu yürütür.
- İkinci ara yazılım nesnesinin dönüş işleyicisi , sonrakini çağırmadan önce kodu yürütür.
- Bot'un dönüş işleyicisi yürütülür ve döndürülür.
- İkinci ara yazılım nesnesinin dönüş işleyicisi, geri dönmeden önce kalan tüm kodları yürütür.
- İkinci ara yazılım nesnesinin dönüş işleyicisi , sonrakini çağırmadan önce kodu yürütür.
- birinci ara yazılım nesnesinin dönüş işleyicisi, geri dönmeden önce kalan tüm kodları yürütür.
Ara yazılım bir sonraki temsilciyi çağırmazsa, bağdaştırıcı sonraki ara yazılım veya bot dönüş işleyicilerini ve işlem hattı kısa devrelerini çağırmaz.
Bot ara yazılım işlem hattı tamamlandıktan sonra dönüş sona erer ve dönüş bağlamı kapsam dışına çıkar.
Ara yazılım veya bot yanıt oluşturabilir ve yanıt olay işleyicilerini kaydedebilir, ancak yanıtların ayrı işlemlerde işlendiğini unutmayın.
Ara yazılım sırası
Ara yazılımların eklenme sırası, ara yazılımların bir etkinliği işleme sırasını belirlediğinden, ara yazılımı ekleme sırasına karar vermek önemlidir.
Not
Bu, size çoğu bot için uygun olan ortak bir desen sağlamak içindir, ancak her ara yazılım parçasının sizin durumunuz için diğerleriyle nasıl etkileşim kuracağını göz önünde bulundurduğunuzdan emin olun.
Her bota ilk olarak ara yazılım işlem hattınıza eklenmesi gereken en düşük düzey görevleri üstlenen ara yazılım. Günlüğe kaydetme, özel durum işleme ve çeviri örnekleri verilebilir. Gelen iletinin önce çevrilmesini isteyip istemediğiniz, iletiler depolanmadan önce çevrilmesini isteyip istemediğiniz veya önce ileti depolamanın gerçekleşmesi gerekip gerekmediği gibi, depolanmış iletilerin çevrilmeyeceği anlamına gelen gereksinimlerinize bağlı olarak bunları sıralayın.
Botunuza gönderilen her iletide bazı işlemler yapmak için uyguladığınız ara yazılım işlem hattınıza bota özgü ara yazılım eklenmelidir. Ara yazılımınız bot bağlamında ayarlanan durum bilgilerini veya diğer bilgileri kullanıyorsa, durumu veya bağlamı değiştiren ara yazılımdan sonra ara yazılım işlem hattına ekleyin.
Kısa devre
Ara yazılım ve yanıt işleyicileri hakkında önemli bir fikir kısa devredir. Yürütme, onu izleyen katmanlarda devam etmekse, bir sonraki temsilcisini çağırarak yürütmeyi geçirmek için ara yazılım (veya yanıt işleyicisi) gerekir. Bir sonraki temsilci bu ara yazılımda (veya yanıt işleyicisinde) çağrılmazsa, ilişkili işlem hattı kısa devreleri ve sonraki katmanlar yürütülemez. Bu, tüm bot mantığının ve işlem hattı boyunca daha fazla ara yazılımların atlandığı anlamına gelir. Ara yazılımınız ile yanıt işleyiciniz arasında kısa devre oluşturma arasında küçük bir fark vardır.
Ara yazılım kısa devreleri bir dönüş gerçekleştirdiğinde bot dönüş işleyiciniz çağrılmayacak, ancak işlem hattında bu noktadan önce yürütülen tüm ara yazılım kodları tamamlanmaya devam edecektir.
Olay işleyicileri için sonrakini çağırmak, olayın iptal edileceği anlamına gelir ve bu durum ara yazılım atlama mantığını atlamaktan çok farklıdır. Olayın geri kalanını işlemediği için bağdaştırıcı bunu hiçbir zaman göndermez.
İpucu
gibi SendActivities
bir yanıt olayının kısa devresini yapıyorsanız, bunun istediğiniz davranış olduğundan emin olun. Aksi takdirde hataların düzeltilmesi zor olabilir.
Yanıt olayı işleyicileri
Uygulama ve ara yazılım mantığına ek olarak, yanıt işleyicileri (bazen olay işleyicileri veya etkinlik olay işleyicileri olarak da adlandırılır) bağlam nesnesine eklenebilir. Bu işleyiciler, gerçek yanıt yürütülmeden önce geçerli bağlam nesnesinde ilişkili yanıt gerçekleştiğinde çağrılır. Bu işleyiciler, geçerli yanıtın geri kalanı için bu türdeki her etkinlik için gerçek olaydan önce veya sonra bir şey yapmak istediğinizi bildiğinizde yararlıdır.
Uyarı
Bir etkinlik yanıt yöntemini ilgili yanıt olay işleyicisinin içinden çağırmamaya dikkat edin, örneğin, gönderme etkinliği işleyicisinin içinden gönderme etkinliği yöntemini çağırma. Bunu yapmak sonsuz bir döngü oluşturabilir.
Unutmayın, her yeni etkinlik üzerinde yürütülecek yeni bir iş parçacığı alır. Etkinliği işlemek için iş parçacığı oluşturulduğunda, bu etkinliğin işleyicilerinin listesi bu yeni iş parçacığına kopyalanır. Bu noktadan sonra eklenen hiçbir işleyici söz konusu etkinlik olayı için yürütülmeyecek. Bağlam nesnesine kaydedilen işleyiciler, bağdaştırıcının ara yazılım işlem hattını yönetme şekline benzer şekilde işlenir. Yani, işleyiciler eklendikleri sırayla çağrılır ve bir sonraki temsilci çağrılır denetimi bir sonraki kayıtlı olay işleyicisine geçirir. İşleyici bir sonraki temsilciyi çağırmazsa, izleyen olay işleyicilerinden hiçbiri çağrılmazsa, olay kısa devreleri ve bağdaştırıcı yanıtı kanala göndermez.
Ara yazılımda durumu işleme
Durumu kaydetmenin yaygın yöntemlerinden biri, dönüş işleyicisinin sonunda save changes yöntemini çağırmaktır. İşte aramaya odaklanan bir diyagram.
Bu yaklaşımdaki sorun, botunun dönüş işleyicisi döndürdükten sonra bazı özel ara yazılımlardan yapılan durum güncelleştirmelerinin dayanıklı depolamaya kaydedilmeyeceğidir. Çözüm, ara yazılım yığınının başına veya en azından durumu güncelleştirebilecek ara yazılımdan önce otomatik kaydetme değişiklikleri ara yazılımının bir örneğini ekleyerek özel ara yazılım tamamlandıktan sonra değişiklikleri kaydetme yöntemine çağrıyı taşımaktır. Yürütme aşağıda gösterilmiştir.
Güncelleştirilmesi gereken durum yönetimi nesnelerini bir bot durum kümesi nesnesine ekleyin ve otomatik kaydetme değişiklikleri ara yazılımınızı oluştururken bunu kullanın.
Ek kaynaklar
[C# | JS] Bot Framework SDK'sında uygulandığı gibi döküm günlükçü ara yazılımına göz atabilirsiniz.