-3

我想使用 azure bot 服务创建一个面试机器人,并且想使用 cosmos db 来解决面试问题,这可能吗?需要帮助和建议。

4

1 回答 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 回答