我想使用 azure bot 服务创建一个面试机器人,并且想使用 cosmos db 来解决面试问题,这可能吗?需要帮助和建议。
问问题
334 次
1 回答
0
目前尚不清楚您的架构是什么让 bot 实际工作以及是否有任何限制,但我假设您使用 C# 作为您的语言并将 Bot 托管在 C# Web 应用程序中。
可以将本文用作Azure Cosmos DB 的基本 Bot 对话历史记录。
它不仅展示了如何存储 UserData,还展示了如何在 Cosmos DB 中存储 State(这实际上更好,因为您可以获得 Cosmos DB 的性能优势,并且还超过了Bot Framework State的 32Kb 限制)。
在那篇文章之后,您将在 Cosmos DB 中存储:
用户数据存储:存储特定于用户的数据。
对话存储:存储特定于对话的数据。
私人对话存储:在对话中存储特定于用户的数据
如果要存储聊天行,Bot Framework 默认不这样做。您必须创建一个实现IActivityLogger
并让用户知道您正在存储聊天的类。
public class CosmosDBActivityLogger : IActivityLogger
{
private readonly DocumentClient _client;
private readonly string _collectionUri;
public ServiceBusActivityLogger(DocumentClient client, string databaseName, string collectionName)
{
this._client = DocumentClient;
// This is the collection where you want to store the chat
this._collectionUri = UriFactory.CreateDocumentCollectionUri(databaseName, collectionName);
}
public async Task LogAsync(IActivity activity)
{
var message = activity.AsMessageActivity();
// At this point you might want to handle your own Activity schema or leave the default
// Not handling errors for simplicity's sake, but you should
this._client.CreateDocumentAsync(this._collectionUri, message);
}
}
然后,您必须在声明 Bot Container 的任何位置添加记录器,例如,在Global.asax
:
protected void Application_Start()
{
var builder = new ContainerBuilder();
builder.RegisterType<CosmosDBActivityLogger>().AsImplementedInterfaces().InstancePerDependency();
builder.Update(Conversation.Container);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
有关如何在此处注册中间件的更多信息。
于 2017-10-04T10:56:37.370 回答