The Bot Framework SDK supports the preservation of the user input as it is received. Here, we will store each transaction into the memory object. The same object will be saved to the storage at the end.
In this tutorial, you will learn the following.
- Setup a Cosmos DB.
- Create a basic bot.
- Setup configuration information to the Azure bot.
- Implement Cosmos DB storage to Azure bot.
- Build and test your bot with Emulator.
Below are the prerequisites.
The bot created in the previous article will be used here to help you understand how to build a basic bot.
Let's understand the information flow with respect to this article.

You can read and write directly to your storage object without using middleware or context object. This can be appropriate for data your bot uses to preserve a conversation or data that comes from a source outside your bot's conversation flow. In this data storage model, data is read directly from storage instead of using a state manager.
Step 1 - Set up Cosmos DB
- Sign in to the Azure portal with your Azure credentials.
- Click "Create a resource".
- Click “Azure Cosmos DB".

- Click Create a resource > Databases > Azure Cosmos DB
- On the New account page,
- provide Subscription,
- Resource group information.
- Create a unique name for your Account Name field - this eventually becomes part of your data access URL name.
- For API, select Core(SQL),
- Provide a nearby Location to improve data access times.
- Then click Review + Create.

- Once validation has been successful, click Create.

The account creation takes a few minutes and Your Azure Cosmos DB account created.
- Search for setting
- Click Settings
- Click the New Container.
- Add Container area is displayed on the far right.
- Fill new database id i.e. bot-cosmos-sql-db
- Container id i.e. bot-storage
- Partition key i.e. /id
- Click Ok to create.

Cosmos DB container created with name bot-cosmos-sql-db

Keys to access new database collection, "bot-cosmos-sql-db" with a container id of "bot-storage."

Step 2 - Create a basic bot
- Browse Visual Studio 2017.
- Select Bot Framework.
- Select Echo Bot (Bot Framework V4).
- Give the appropriate name and click ok to proceed.

Sample Echo Bot project will be created with basic functionality.
Step 3 - Setup configuration information to the Azure bot
- Firstly, install the NuGet package solution.

- Add Cosmos DB configuration to Visual Studio solution.
- private const string CosmosServiceEndpoint = "https://bot-cosmos-sql-db.documents.azure.com:443/";
- private const string CosmosDBKey = "vr1psMExluqGtp45XbIu4q1w2gmwfFksLr8GX4TDE5AkdRBiLE1fGmPsEoVpDXrM6qtOfLEGS25SzCO9G5XORg==";
- private const string CosmosDBDatabaseName = "bot-cosmos-sql-db";
- private const string CosmosDBCollectionName = "bot-storage";
- // Create Cosmos DB Storage.
- private static readonly CosmosDbStorage query = new CosmosDbStorage(new CosmosDbStorageOptions
- {
- AuthKey = CosmosDBKey,
- CollectionId = CosmosDBCollectionName,
- CosmosDBEndpoint = new Uri(CosmosServiceEndpoint),
- DatabaseId = CosmosDBDatabaseName,
- });

Step 4 - Implement Cosmos DB storage to azure bot
To preserve conversation to Azure Cosmos DB, I am going to create an object which will hold properties of the same conversation, it will concatenate and store all at one instance. To get started, Create one class with basic properties.
- Create UtteranceLog.cs file and below properties



Chloe FoxePosted Apr 10, 2020, 7:25 AM
How do you create a different Utterance log for each user in Cosmos DB? At the minute all the conversations are saving into one utterance log?
Rohan RaoPosted Dec 28, 2019, 12:02 AM
Hello sir, it is perfectly working now. Thanks. I want to ask that what if I want to store the Bot's statement as well? For example:in your case your bot says "Echo: You said hello".. so I want to store this as well in Cosmos DB.. How can I do that?
Rohan RaoPosted Dec 19, 2019, 10:59 PM
Hello sir. Nice article, but what if we want to create a new table and then store our conversation into it?