Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ŞUNLAR IÇIN GEÇERLIDIR: SDK v4
Ara yazılım veya bağlam nesnesi kullanmadan doğrudan depolama nesnenizi okuyabilir ve yazabilirsiniz. Bu, botunuzun bir konuşmayı korumak için kullandığı veriler veya botunuzun konuşma akışının dışındaki bir kaynaktan gelen veriler için uygun olabilir. Bu veri depolama modelinde veriler, durum yöneticisi kullanmak yerine doğrudan depolama alanından okunur. Bu makaledeki kod örneklerinde bellek, Cosmos DB, Azure Blob ve Azure Blob transkript depolama kullanarak depolamaya veri okuma ve yazma işlemleri gösterilmektedir.
Not
Yapay zeka hizmetleri, düzenleme ve bilgi seçiminizle aracılar oluşturmak için Microsoft 365 Aracıları SDK'sını kullanmayı göz önünde bulundurun. Aracılar SDK'sı C#, JavaScript veya Python desteğine sahiptir. SDK hakkında daha fazla bilgiyi aka.ms/agents adresinde bulabilirsiniz. SaaS tabanlı bir aracı platformu arıyorsanız Microsoft Copilot Studio'yu göz önünde bulundurun. Bot Framework SDK'sı ile oluşturulmuş mevcut bir botunuz varsa botunuzu Aracılar SDK'sına güncelleştirebilirsiniz. Bot Framework SDK'sını Aracılar SDK'sına geçirme kılavuzunda temel değişiklikleri ve güncelleştirmeleri gözden geçirebilirsiniz. Bot Framework SDK'sı için destek biletleri artık 31 Aralık 2025 itibarıyla hizmet verilmeyecektir.
Önkoşullar
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Yerel olarak bot oluşturma hakkında bilgi.
- Visual Studio (C#), Node.js veya Yeoman için Bot Framework SDK v4 şablonları.
Not
Şablonları Visual Studio'dan yükleyebilirsiniz.
- Menüde Uzantılar'ı ve ardından Uzantıları Yönet'i seçin.
- Uzantıları Yönet iletişim kutusunda Visual Studio için Bot Framework v4 SDK şablonlarını arayın ve yükleyin.
.NET botlarını Azure'a dağıtma hakkında bilgi için bkz . Bot sağlama ve yayımlama.
Bu örnek hakkında
Bu makaledeki örnek kod, temel bir yankı botunun yapısıyla başlar, ardından ek kod ekleyerek (aşağıda sağlanır) bu botun işlevselliğini genişletir. Bu genişletilmiş kod, alınan kullanıcı girişlerini korumak için bir liste oluşturur. Her dönüşte belleğe kaydedilen kullanıcı girişlerinin tam listesi kullanıcıya geri yankılanır. Bu giriş listesini içeren veri yapısı daha sonra depolama alanına kaydedilecek şekilde değiştirilir. Bu örnek koda ek işlevler eklendikçe çeşitli depolama türleri incelenir.
Önemli
Bu makale, depolamaya iç bağlantı için yapılandırma dosyalarında
Bellek depolama
Bot Framework SDK'sı, bellek içi depolama kullanarak kullanıcı girişlerini depolamanıza olanak tanır. Bot her yeniden başlatıldığında bellek içi depolama alanı temizlendiğinden, test amacıyla en uygun seçenektir ve üretim kullanımına yönelik değildir. Veritabanı depolaması gibi kalıcı depolama türleri, üretim botları için en iyisidir.
Temel bot oluşturma
Bu konunun geri kalanı bir Echo botuyla derlenir. Echo bot örnek kodu, bot oluşturma hızlı başlangıç yönergelerini izleyerek yerel olarak oluşturulabilir.
EchoBot.cs içindeki kodu aşağıdaki kodla değiştirin:
using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
// Represents a bot saves and echoes back user input.
public class EchoBot : ActivityHandler
{
// Create local Memory Storage.
private static readonly MemoryStorage _myStorage = new MemoryStorage();
// Create cancellation token (used by Async Write operation).
public CancellationToken cancellationToken { get; private set; }
// Class for storing a log of utterances (text of messages) as a list.
public class UtteranceLog : IStoreItem
{
// A list of things that users have said to the bot
public List<string> UtteranceList { get; } = new List<string>();
// The number of conversational turns that have occurred
public int TurnNumber { get; set; } = 0;
// Create concurrency control where this is used.
public string ETag { get; set; } = "*";
}
// Echo back user input.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// preserve user input.
var utterance = turnContext.Activity.Text;
// Make empty local log-items list.
UtteranceLog logItems = null;
// See if there are previous messages saved in storage.
try
{
string[] utteranceList = { "UtteranceLog" };
logItems = _myStorage.ReadAsync<UtteranceLog>(utteranceList).Result?.FirstOrDefault().Value;
}
catch
{
// Inform the user an error occurred.
await turnContext.SendActivityAsync("Sorry, something went wrong reading your stored messages!");
}
// If no stored messages were found, create and store a new entry.
if (logItems is null)
{
// Add the current utterance to a new object.
logItems = new UtteranceLog();
logItems.UtteranceList.Add(utterance);
// Set initial turn counter to 1.
logItems.TurnNumber++;
// Show user new user message.
await turnContext.SendActivityAsync($"{logItems.TurnNumber}: The list is now: {string.Join(", ", logItems.UtteranceList)}");
// Create dictionary object to hold received user messages.
var changes = new Dictionary<string, object>();
{
changes.Add("UtteranceLog", logItems);
}
try
{
// Save the user message to your Storage.
await _myStorage.WriteAsync(changes, cancellationToken);
}
catch
{
// Inform the user an error occurred.
await turnContext.SendActivityAsync("Sorry, something went wrong storing your message!");
}
}
// Else, our storage already contained saved user messages, add new one to the list.
else
{
// add new message to list of messages to display.
logItems.UtteranceList.Add(utterance);
// increment turn counter.
logItems.TurnNumber++;
// show user new list of saved messages.
await turnContext.SendActivityAsync($"{logItems.TurnNumber}: The list is now: {string.Join(", ", logItems.UtteranceList)}");
// Create Dictionary object to hold new list of messages.
var changes = new Dictionary<string, object>();
{
changes.Add("UtteranceLog", logItems);
};
try
{
// Save new list to your Storage.
await _myStorage.WriteAsync(changes,cancellationToken);
}
catch
{
// Inform the user an error occurred.
await turnContext.SendActivityAsync("Sorry, something went wrong storing your message!");
}
}
}
}
Botunuzu başlatma
Botunuzu yerel olarak çalıştırın.
Öykünücüyü başlatın ve botunuzu bağlayın
Bot Framework Emulator'ı yükleyin, Öykünücüyü başlatın ve ardından Öykünücü'de botunuza bağlanın:
- Öykünücüye Hoş Geldiniz sekmesinde Yeni bot yapılandırması oluştur bağlantısını seçin.
- Botunuzu başlattığınızda görüntülenen web sayfasındaki bilgiler göz önünde bulundurularak botunuza bağlanmak için alanları doldurun.
Botunuzla etkileşim kurma
Botunuza bir ileti gönderin. Bot aldığı iletileri listeler.
Bu makalenin geri kalanında botun iç belleği yerine kalıcı depolamaya nasıl kaydedileceği gösterilir.
Cosmos DB kullanma
Önemli
Cosmos DB depolama sınıfı kullanım dışı bırakıldı. Başlangıçta CosmosDbStorage ile oluşturulan kapsayıcıların bölüm anahtarı kümesi yoktu ve _/partitionKey varsayılan bölüm anahtarı verildi.
Cosmos DB depolama alanıyla oluşturulan kapsayıcılar Cosmos DB bölümlenmiş depolama alanı ile kullanılabilir. Daha fazla bilgi için Azure Cosmos DB'de Bölümleme bölümünü okuyun.
Ayrıca, eski Cosmos DB depolama alanının aksine, Cosmos DB bölümlenmiş depolamanın Cosmos DB hesabınızda otomatik olarak bir veritabanı oluşturmadığını unutmayın. El ile yeni bir veritabanı oluşturmanız gerekir, ancak CosmosDbPartitionedStorage kapsayıcıyı sizin için oluşturacağı için el ile kapsayıcı oluşturmayı atlayın.
Bellek depolamayı kullandığınıza göre kodu Azure Cosmos DB kullanacak şekilde güncelleştireceğiz. Cosmos DB, Microsoft'un genel olarak dağıtılmış, çok modelli veritabanıdır. Azure Cosmos DB, herhangi bir sayıda Azure coğrafi bölgesinde aktarım hızını ve depolamayı esnek ve bağımsız olarak ölçeklendirmenizi sağlar. Kapsamlı hizmet düzeyi sözleşmeleri (SLA) ile aktarım hızı, gecikme süresi, kullanılabilirlik ve tutarlılık garantileri sunar.
Cosmos DB kaynağı ayarlama
Botunuzda Cosmos DB kullanmak için koda girmeden önce bir veritabanı kaynağı oluşturmanız gerekir. Cosmos DB veritabanı ve uygulama oluşturma hakkında ayrıntılı bir açıklama için .NET, Node.js veya Python hızlı başlangıcına bakın.
Veritabanı hesabınızı oluşturma
Azure Cosmos DB hesabı oluşturmak için Azure portalına gidin. Azure Cosmos DB için arama yapın ve bunu seçin.
Azure Cosmos DB sayfasında Yeni'yi seçerek Azure Cosmos DB Hesabı Oluştur sayfasını açın.
Aşağıdaki alanlar için değerler sağlayın:
- Abonelik. Bu Azure Cosmos hesabı için kullanmak istediğiniz Azure aboneliğini seçin.
- Kaynak grubu. Mevcut bir kaynak grubunu seçin veya Yeni oluştur'u seçin ve yeni bir kaynak grubu için bir ad girin.
-
Hesap adı. Azure Cosmos hesabınızı tanımlayan bir ad girin. URI’nizi oluşturmak için sağladığınız ada documents.azure.com ekleneceği için benzersiz bir ad kullanın. Aşağıdaki yönergelere dikkat edin:
- Adın Azure genelinde benzersiz olması gerekir.
- Ad 3 ile 31 karakter uzunluğunda olmalıdır.
- Ad yalnızca küçük harf, sayı ve kısa çizgi (-) karakterini içerebilir.
- API. Çekirdek(SQL) öğesini seçin
- Konum. kullanıcılara verilere en hızlı erişimi vermek için kullanıcılarınıza en yakın konumu seçin.
Gözden geçir + Oluştur’u seçin.
Doğrulandıktan sonra Oluştur'u seçin.
Hesabın oluşturulması birkaç dakika sürer. Portalın Tebrikler! Azure Cosmos DB hesabınız oluşturuldu sayfası.
Veritabanı ekleyin
Not
Kapsayıcıyı kendiniz oluşturmayın. Botunuz, iç Cosmos DB istemcisini oluştururken bot durumunu depolamak için doğru yapılandırıldığından emin olarak bunu sizin için oluşturur.
Yeni oluşturduğunuz Cosmos DB hesabınızın Veri Gezgini sayfasına gidin, ardından Yeni Kapsayıcı açılan listesinden Yeni Veritabanı'nıseçin. Ardından pencerenin sağ tarafında yeni veritabanının ayrıntılarını girebileceğiniz bir panel açılır.
Yeni veritabanınız için bir kimlik girin ve isteğe bağlı olarak aktarım hızını ayarlayın (bunu daha sonra değiştirebilirsiniz) ve son olarak veritabanınızı oluşturmak için Tamam'ı seçin. Bu veritabanı kimliğini daha sonra botunuzu yapılandırırken kullanmak üzere not edin.
Artık bir Cosmos DB hesabı ve veritabanı oluşturduğunuza göre, yeni veritabanınızı botunuzla tümleştirmeye yönelik bazı değerlerin üzerine kopyalamanız gerekir. Bunları almak için Cosmos DB hesabınızın veritabanı ayarları bölümünde Anahtarlar sekmesine gidin. Bu sayfada URI'nize (Cosmos DB uç noktası) ve BİRİnCİl ANAHTAR (yetkilendirme anahtarı) gerekir.
Artık bir veritabanı ve bot ayarlarınızda kullanıma hazır aşağıdaki değerlere sahip bir Cosmos DB hesabınız olmalıdır.
- URI (Evrensel Kaynak Tanımlayıcısı)
- Birincil Anahtar
- Veritabanı Kimliği
Cosmos DB yapılandırma bilgilerini ekleme
Uç noktanızı, yetkilendirme anahtarınızı ve veritabanı kimliğinizi ayarlamak için bu makalenin önceki bölümünde not ettiğiniz ayrıntıları kullanın. Son olarak, bot durumunuzu depolamak için veritabanınızda oluşturulacak kapsayıcı için uygun bir ad seçmelisiniz. Aşağıdaki örnekte, oluşturulan Cosmos DB kapsayıcısı "bot-storage" olarak adlandırılacaktır.
Yapılandırma dosyanıza aşağıdaki bilgileri ekleyin.
appsettings.json
"CosmosDbEndpoint": "<your-CosmosDb-URI>",
"CosmosDbAuthKey": "<your-primary-key>",
"CosmosDbDatabaseId": "<your-database-id>",
"CosmosDbContainerId": "bot-storage"
Cosmos DB paketlerini yükleme
Cosmos DB için gerekli paketleri kullandığınızdan emin olun.
Microsoft.Bot.Builder.Azure NuGet paketini yükleyin. NuGet kullanma hakkında daha fazla bilgi için bkz. NuGet Paket Yöneticisi kullanarak Visual Studio'da paketleri yükleme ve yönetme.
Cosmos DB uygulaması
Not
Sürüm 4.6 yeni bir Cosmos DB depolama sağlayıcısı, Cosmos DB bölümlenmiş depolama sınıfını kullanıma sunar ve özgün Cosmos DB depolama sınıfı kullanım dışıdır. Cosmos DB depolama alanıyla oluşturulan kapsayıcılar Cosmos DB bölümlenmiş depolama alanı ile kullanılabilir. Daha fazla bilgi için Azure Cosmos DB'de Bölümleme bölümünü okuyun.
Eski Cosmos DB depolama alanının aksine, Cosmos DB bölümlenmiş depolama alanı Cosmos DB hesabınızda otomatik olarak bir veritabanı oluşturmaz. El ile yeni bir veritabanı oluşturmanız gerekir, ancak CosmosDbPartitionedStorage kapsayıcıyı sizin için oluşturacağı için el ile kapsayıcı oluşturmayı atlayın.
Aşağıdaki örnek kod, yukarıda belirtilen bellek depolama örneğiyle aynı bot kodu kullanılarak ve burada listelenen özel durumlar kullanılarak çalıştırılır. Aşağıdaki kod parçacıklarında yerel Bellek depolama alanının yerini alan 'myStorage' için Cosmos DB depolama uygulaması gösterilmektedir.
İlk olarak bot oluşturucusu Azure kitaplığına başvurmak için Startup.cs güncelleştirmeniz gerekir:
using Microsoft.Bot.Builder.Azure;
Ardından, ConfigureServices
Startup.cs'daki yönteminde CosmosDbPartitionedStorage
nesnesini oluşturun. Bu, bağımlılık ekleme yoluyla oluşturucuya EchoBot
geçirilir.
// Use partitioned CosmosDB for storage, instead of in-memory storage.
services.AddSingleton<IStorage>(
new CosmosDbPartitionedStorage(
new CosmosDbPartitionedStorageOptions
{
CosmosDbEndpoint = Configuration.GetValue<string>("CosmosDbEndpoint"),
AuthKey = Configuration.GetValue<string>("CosmosDbAuthKey"),
DatabaseId = Configuration.GetValue<string>("CosmosDbDatabaseId"),
ContainerId = Configuration.GetValue<string>("CosmosDbContainerId"),
CompatibilityMode = false,
}));
EchoBot.cs değişken bildirimini _myStorage
private static readonly MemoryStorage _myStorage = new MemoryStorage();
aşağıdaki şekilde değiştirin:
// variable used to save user input to CosmosDb Storage.
private readonly IStorage _myStorage;
Ardından nesnesini oluşturucuya IStorage
geçirinEchoBot
:
public EchoBot(IStorage storage)
{
if (storage is null) throw new ArgumentNullException();
_myStorage = storage;
}
Cosmos DB botunuzu başlatma
Botunuzu yerel olarak çalıştırın.
Bot Framework Öykünücüsü ile Cosmos DB botunuzu test edin
Şimdi Bot Framework Emulator'ı başlatın ve botunuza bağlanın:
- Öykünücüye Hoş Geldiniz sekmesinde yeni bot yapılandırması oluştur bağlantısını seçin.
- Botunuzu başlattığınızda görüntülenen web sayfasındaki bilgiler göz önünde bulundurularak botunuza bağlanmak için alanları doldurun.
Cosmos DB botunuzla etkileşim kurma
Botunuza bir ileti gönderdiğinizde bot aldığı iletileri listeler.
Cosmos DB verilerinizi görüntüleme
Botunuzu çalıştırdıktan ve bilgilerinizi kaydettikten sonra Azure portalında depolanan verileri Veri Gezgini sekmesinin altında görüntüleyebilirsiniz.
Blob depolamayı kullanma
Azure Blob depolama, Microsoft’un buluta yönelik nesne depolama çözümüdür. Blob depolama, metin veya ikili veri gibi çok miktarda yapılandırılmamış veriyi depolamak için iyileştirilmiştir. Bu bölümde Azure blob depolama hesabı ve kapsayıcısı oluşturma ve ardından botunuzdan blob depolama kapsayıcınıza başvurma açıklanmaktadır.
Blob Depolama hakkında daha fazla bilgi için bkz. Azure Blob depolama nedir?
Blob depolama hesabınızı oluşturma
Botunuzda Blob depolamayı kullanmak için koda girmeden önce birkaç ayarlama yapmanız gerekir.
Azure portaldaTüm hizmetler’i seçin.
Tüm hizmetler sayfasının Öne Çıkanlar bölümünde Depolama hesapları'nı seçin.
Depolama hesapları sayfasında Yeni'yi seçin.
Abonelik alanında, depolama hesabının oluşturulacağı aboneliği seçin.
Kaynak grubu alanında var olan bir kaynak grubunu seçin veya Yeni oluştur'u seçin ve yeni kaynak grubu için bir ad girin.
Depolama hesabı adı alanına hesap için bir ad girin. Aşağıdaki yönergelere dikkat edin:
- Adın Azure genelinde benzersiz olması gerekir.
- Ad 3 ila 24 karakter uzunluğunda olmalıdır.
- Ad yalnızca sayıları ve küçük harfleri içerebilir.
Konum alanında depolama hesabı için bir konum seçin veya varsayılan konumu kullanın.
Diğer ayarlar için aşağıdakileri yapılandırın:
- Performans: Standart. Performans hakkında daha fazla bilgi edinin.
- Hesap türü: BlobStorage. Depolama hesapları hakkında daha fazla bilgi edinin.
- Çoğaltma: Varsayılan ayarı değiştirmeyin. Yedeklilik hakkında daha fazla bilgi edinin.
Depolama hesabı oluştur sayfasının Proje ayrıntıları bölümünde abonelik ve Kaynak grubu için istenen değerleri seçin.
Depolama hesabı oluştur sayfasının Örnek ayrıntıları bölümünde Depolama hesabı adını girin, ardından Konum, Hesap türü ve Çoğaltma değerlerini seçin.
Depolama hesabı ayarlarını gözden geçirmek için Gözden Geçir + oluştur'u seçin.
Doğrulandıktan sonra Oluştur'u seçin.
Blob depolama kapsayıcısı oluşturma
Blob depolama hesabınız oluşturulduktan sonra açın ve ardından:
Depolama Gezgini (Önizleme) öğesini seçin.
Ardından BLOB KAPSAYICILAR'a sağ tıklayın
Açılan listeden Blob kapsayıcısı oluştur'u seçin.
Yeni kapsayıcı formuna bir ad girin. Blob depolama hesabınıza erişim sağlamak için "blob kapsayıcınızın adı" değeri için bu adı kullanacaksınız. Aşağıdaki yönergelere dikkat edin:
- Bu ad yalnızca küçük harf, sayı ve kısa çizgi içerebilir.
- Bu ad bir harf veya sayı ile başlamalıdır.
- Her kısa çizginin önüne ve ardından geçerli bir kısa çizgi olmayan karakter gelmelidir.
- Ad 3 ile 63 karakter uzunluğunda olmalıdır.
Blob depolama yapılandırma bilgileri ekleme
Yukarıda gösterildiği gibi botunuz için Blob depolamayı yapılandırmak için ihtiyacınız olan Blob depolama anahtarlarını bulun:
- Azure portalında Blob depolama hesabınızı açın ve Ayarlar bölümünde Erişim anahtarları'nıseçin.
- Botunuzu Blob depolama hesabınıza erişecek şekilde yapılandırmak için blob bağlantı dizesi değeri olarak Bağlantı dizesini kullanın.
Yapılandırma dosyanıza aşağıdaki bilgileri ekleyin.
appsettings.json
"BlobConnectionString": "<your-blob-connection-string>",
"BlobContainerName": "<your-blob-container-name>",
Blob depolama paketlerini yükleme
Daha önce yüklenmemişse aşağıdaki paketleri yükleyin.
Microsoft.Bot.Builder.Azure.Blobs NuGet paketini yükleyin. NuGet kullanma hakkında daha fazla bilgi için bkz. NuGet Paket Yöneticisi kullanarak Visual Studio'da paketleri yükleme ve yönetme.
Blob depolama uygulaması
Blob depolama , bot durumunu depolamak için kullanılır.
Not
Sürüm 4.10 itibariyle Microsoft.Bot.Builder.Azure.AzureBlobStorage
kullanım dışıdır. Yeniyi Microsoft.Bot.Builder.Azure.Blobs.BlobsStorage
yerine kullanın.
Aşağıdaki örnek kod, yukarıda belirtilen bellek depolama örneğiyle aynı bot kodu kullanılarak ve burada listelenen özel durumlar kullanılarak çalıştırılır.
Aşağıdaki kod parçacıklarında yerel Bellek depolamanın yerini alan 'myStorage' için Blob depolama uygulaması gösterilmektedir.
İlk olarak bot oluşturucusu Azure blobları kitaplığına başvurmak için Startup.cs güncelleştirmeniz gerekir:
Startup.cs
using Microsoft.Bot.Builder.Azure.Blobs;
Ardından, ConfigureServices
Startup.cs'dakinesnesini oluşturun ve içindeki değerleri BlobsStorage
geçirin. Bu, bağımlılık ekleme yoluyla oluşturucuya EchoBot
geçirilir.
//Use Azure Blob storage, instead of in-memory storage.
services.AddSingleton<IStorage>(
new BlobsStorage(
Configuration.GetValue<string>("BlobConnectionString"),
Configuration.GetValue<string>("BlobContainerName")
));
Şimdi ilk olarak bot oluşturucusu Azure blob kitaplığına başvurmak için EchoBot.cs güncelleştirmeniz gerekir:
EchoBot.cs
using Microsoft.Bot.Builder.Azure.Blobs;
Ardından, 'private static readonly MemoryStorage _myStorage = new MemoryStorage();' MemoryStorage değişkenini oluşturan kod satırını kaldırın veya açıklama satırı oluşturun ve kullanıcı girişini Blob Depolama'ya kaydetmek için kullanılacak yeni bir değişken oluşturun.
EchoBot.cs
// variable used to save user input to CosmosDb Storage.
private readonly IStorage _myStorage;
Ardından nesnesini oluşturucuya IStorage
geçirinEchoBot
:
public EchoBot(IStorage storage)
{
if (storage is null) throw new ArgumentNullException();
_myStorage = storage;
}
Depolama alanınız Blob Depolama hesabınıza işaret edecek şekilde ayarlandıktan sonra bot kodunuz blob depolamadan veri depolayıp alır.
Depolama alanınız Blob Depolama hesabınıza işaret edecek şekilde ayarlandıktan sonra bot kodunuz blob depolamadan veri depolayıp alır.
Blob depolama botunuzu başlatma
Botunuzu yerel olarak çalıştırın.
Öykünücüyü başlatma ve Blob depolama botunuzu bağlama
Ardından Öykünücü'yü başlatın ve ardından Öykünücü'de botunuza bağlanın:
- Öykünücü "Hoş Geldiniz" sekmesinde Yeni bot yapılandırması oluştur bağlantısını seçin.
- Botunuzu başlattığınızda görüntülenen web sayfasındaki bilgiler göz önünde bulundurularak botunuza bağlanmak için alanları doldurun.
Blob depolama botunuzla etkileşim kurma
Botunuza bir ileti gönderdiğinizde bot aldığı iletileri listeler.
Blob depolama verilerinizi görüntüleme
Botunuzu çalıştırdıktan ve bilgilerinizi kaydettikten sonra Azure portalındaki Depolama Gezgini sekmesinin altında görüntüleyebilirsiniz.
Blob transkript depolama
Azure blob transkript depolama, kayıtlı transkript biçiminde kullanıcı konuşmalarını kolayca kaydetmenize ve almanıza olanak tanıyan özel bir depolama seçeneği sağlar. Azure blob transkript depolaması, botunuzun performansında hata ayıklarken incelenmesi gereken kullanıcı girişlerini otomatik olarak yakalamak için kullanışlıdır.
Not
Python şu anda Azure Blob transkript depolamayı desteklemez. JavaScript Blob transkript depolamayı desteklese de, aşağıdaki yönergeler yalnızca C# için geçerlidir.
Blob transkript depolama kapsayıcısı ayarlama
Azure blob transkript depolaması, yukarıdaki "Blob depolama hesabınızı oluşturma" ve "Yapılandırma bilgileri ekleme" bölümlerinde ayrıntılı olarak belirtilen adımları izleyerek oluşturulan blob depolama hesabını kullanabilir. Şimdi transkriptlerimizi tutmak için bir kapsayıcı ekliyoruz
- Azure blob depolama hesabınızı açın.
- Depolama Gezgini'ı seçin.
- BLOB KAPSAYICILARI'ne sağ tıklayın ve Blob kapsayıcısı oluştur'u seçin.
- Transkript kapsayıcınız için bir ad girin ve Tamam'ı seçin. (mybottranscripts'e girdik)
Blob transkript depolama uygulaması
Aşağıdaki kod, transkript depolama işaretçisini _myTranscripts
yeni Azure blob transkript depolama hesabınıza bağlar. Bu bağlantıyı yeni bir kapsayıcı adı <olan your-blob-transcript-container-name> ile oluşturmak için Blob depolamada transkript dosyalarınızı tutacak yeni bir kapsayıcı oluşturur.
Blob transkript depolama , bot transkriptlerini depolamak için tasarlanmıştır.
Not
Sürüm 4.10 itibariyle Microsoft.Bot.Builder.Azure.AzureBlobTranscriptStore
kullanım dışıdır. Yeniyi Microsoft.Bot.Builder.Azure.Blobs.BlobsTranscriptStore
yerine kullanın.
echoBot.cs
using Microsoft.Bot.Builder.Azure.Blobs;
public class EchoBot : ActivityHandler
{
...
private readonly BlobsTranscriptStore _myTranscripts = new BlobsTranscriptStore("<your-azure-storage-connection-string>", "<your-blob-transcript-container-name>");
...
}
Kullanıcı konuşmalarını Azure blob transkriptlerinde depolama
Dökümleri depolamak için bir blob kapsayıcısı kullanılabilir olduktan sonra, kullanıcılarınızın botunuzla konuşmalarını korumaya başlayabilirsiniz. Bu konuşmalar daha sonra kullanıcıların botunuzla nasıl etkileşime geçtiğini görmek için bir hata ayıklama aracı olarak kullanılabilir. Her Öykünücü Yeniden Başlatma konuşması , yeni bir transkript konuşma listesi oluşturmayı başlatır. Aşağıdaki kod, depolanan transkript dosyası içindeki kullanıcı konuşma girişlerini korur.
- Geçerli transkript kullanılarak
LogActivityAsync
kaydedilir. - Kaydedilen transkriptler kullanılarak
ListTranscriptsAsync
alınır. Bu örnek kodda, depolanan her transkriptin kimliği "storedTranscripts" adlı bir listeye kaydedilir. Bu liste daha sonra sakladığımız depolanan blob transkriptlerinin sayısını yönetmek için kullanılır.
echoBot.cs
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
await _myTranscripts.LogActivityAsync(turnContext.Activity);
List<string> storedTranscripts = new List<string>();
PagedResult<Microsoft.Bot.Builder.TranscriptInfo> pagedResult = null;
var pageSize = 0;
do
{
pagedResult = await _myTranscripts.ListTranscriptsAsync("emulator", pagedResult?.ContinuationToken);
pageSize = pagedResult.Items.Count();
// transcript item contains ChannelId, Created, Id.
// save the channelIds found by "ListTranscriptsAsync" to a local list.
foreach (var item in pagedResult.Items)
{
storedTranscripts.Add(item.Id);
}
} while (pagedResult.ContinuationToken != null);
...
}
Depolanan blob transkriptlerini yönetme
Depolanan transkriptler hata ayıklama aracı olarak kullanılabilse de, zaman içinde depolanan transkriptlerin sayısı korumayı önemsediğinizden daha fazla artabilir. Aşağıda yer alan ek kod, blob transkript deponuzdan alınan son üç transkript öğesi dışında tüm öğeleri kaldırmak için kullanılır DeleteTranscriptAsync
.
echoBot.cs
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
await _myTranscripts.LogActivityAsync(turnContext.Activity);
List<string> storedTranscripts = new List<string>();
PagedResult<Microsoft.Bot.Builder.TranscriptInfo> pagedResult = null;
var pageSize = 0;
do
{
pagedResult = await _myTranscripts.ListTranscriptsAsync("emulator", pagedResult?.ContinuationToken);
pageSize = pagedResult.Items.Count();
// transcript item contains ChannelId, Created, Id.
// save the channelIds found by "ListTranscriptsAsync" to a local list.
foreach (var item in pagedResult.Items)
{
storedTranscripts.Add(item.Id);
}
} while (pagedResult.ContinuationToken != null);
// Manage the size of your transcript storage.
for (int i = 0; i < pageSize; i++)
{
// Remove older stored transcripts, save just the last three.
if (i < pageSize - 3)
{
string thisTranscriptId = storedTranscripts[i];
try
{
await _myTranscripts.DeleteTranscriptAsync("emulator", thisTranscriptId);
}
catch (System.Exception ex)
{
await turnContext.SendActivityAsync("Debug Out: DeleteTranscriptAsync had a problem!");
await turnContext.SendActivityAsync("exception: " + ex.Message);
}
}
}
...
}
Sınıfı hakkında daha fazla bilgi için bkz . Azure Blob Transkript Depolama.
Ek Bilgi
eTag'leri kullanarak eşzamanlılığı yönetme
Bot kodu örneğimizde her eTag
birinin özelliğini olarak IStoreItem
ayarlayacağız*
.
eTag
Depo nesnenizin (varlık etiketi) üyesi, eşzamanlılığı yönetmek için Cosmos DB içinde kullanılır. , eTag
botunuzun başka bir örneği botunuzun yazdığı depolama alanındaki nesneyi değiştirdiyse veritabanınıza ne yapacağını bildirir.
Son yazma kazançları - üzerine yazmalara izin ver
Yıldız eTag
işareti (*
) özellik değeri, son yazarın kazandığını gösterir. Yeni bir veri deposu oluştururken, daha önce yazdığınız verileri kaydetmemiş olduğunuzu veya son yazarın daha önce kaydedilmiş herhangi bir özelliğin üzerine yazmasını istediğinizi belirtmek için bir özellik eTag
ayarlayabilirsiniz*
. Eşzamanlılık botunuz için sorun değilse, yazmakta eTag
olduğunuz tüm veriler için özelliğini *
olarak ayarlamak üzerine yazmayı etkinleştirir.
Eşzamanlılığı koruma ve üzerine yazmaları önleme
Verilerinizi Cosmos DB'de depolarken, bir özelliğe eşzamanlı erişimi engellemek ve botun *
başka bir örneğindeki değişikliklerin üzerine yazılmasını önlemek istiyorsanız dışında bir değer eTag
kullanın. Bot, durum verilerini kaydetmeye çalıştığında iletiyle etag conflict key=
birlikte bir hata yanıtı alır ve eTag
değeri depolamadakiyle eTag
aynı değildir.
Varsayılan olarak, Cosmos DB deposu bir bot bu öğeye her yazdığında bir depolama nesnesinin özelliğini eşitlik açısından denetler eTag
ve her yazmadan sonra bunu yeni bir benzersiz değerle güncelleştirir. Yazma özelliğinin eTag
depolama alanındakiyle eşleşmemesi eTag
, başka bir bot veya iş parçacığının verileri değiştirdiği anlamına gelir.
Örneğin, botunuzun kaydedilmiş bir notu düzenlemesini istediğinizi ancak botunuzun başka bir bot örneğinin yaptığı değişikliklerin üzerine yazmasını istediğinizi varsayalım. Botun başka bir örneği düzenlemeler yaptıysa, kullanıcının sürümü en son güncelleştirmelerle düzenlemesini istersiniz.
İlk olarak, uygulayan IStoreItem
bir sınıf oluşturun.
EchoBot.cs
public class Note : IStoreItem
{
public string Name { get; set; }
public string Contents { get; set; }
public string ETag { get; set; }
}
Ardından, bir depolama nesnesi oluşturarak bir ilk not oluşturun ve nesneyi deponuza ekleyin.
EchoBot.cs
// create a note for the first time, with a non-null, non-* ETag.
var note = new Note { Name = "Shopping List", Contents = "eggs", ETag = "x" };
var changes = Dictionary<string, object>();
{
changes.Add("Note", note);
};
await NoteStore.WriteAsync(changes, cancellationToken);
Ardından, nota daha sonra erişip güncelleştirerek eTag
mağazadan okuduğunuz nota erişin.
EchoBot.cs
var note = NoteStore.ReadAsync<Note>("Note").Result?.FirstOrDefault().Value;
if (note != null)
{
note.Contents += ", bread";
var changes = new Dictionary<string, object>();
{
changes.Add("Note1", note);
};
await NoteStore.WriteAsync(changes, cancellationToken);
}
Değişikliklerinizi yazmadan önce not depoda güncelleştirildiyse çağrısı Write
bir özel durum oluşturur.
Eşzamanlılığı korumak için her zaman depolama alanından bir özelliği okuyun, ardından okuduğunuz özelliği değiştirin; böylece eTag
bu özellik korunur. Kullanıcı verilerini depodan okursanız yanıt eTag özelliğini içerir. Verileri değiştirir ve güncelleştirilmiş verileri depoya yazarsanız, isteğiniz daha önce okuduğunuzla aynı değeri belirten eTag özelliğini içermelidir. Ancak, öğesinin ayarlanmış eTag
olduğu *
bir nesne yazmak, yazma işleminin diğer değişikliklerin üzerine yazılmasını sağlar.
Sonraki adımlar
Artık doğrudan depolama alanından okuma ve yazma hakkında bilgi edindiğinize göre, bunu sizin için yapmak için durum yöneticisini nasıl kullanabileceğinize göz atalım.