在Microsoft Bot中使用ConnectorClient启动对话框

时间:2020-05-14 12:28:48

标签: c# .net botframework chatbot microsoft-teams

我有一个外部服务,正在以下代码段内向团队聊天发送消息:

MicrosoftAppCredentials.TrustServiceUrl("serviceUrl");
var appCredentials = new MicrosoftAppCredentials("app id", appPassword);
var connectorClient = new ConnectorClient("serviceUrl", appCredentials);
await connectorClient.Conversations.SendToConversationAsync("conversationId", activity);

如何以相同的方式开始对话框(现有的 ComponentDialog ,并且可以在 DialogContext 中的IBot OnTurnAsync方法中运行它)?

我正在使用Microsoft Bot Framework 4.2.2。

1 个答案:

答案 0 :(得分:1)

您不会与连接器客户端开始对话。 Bot Framework连接器客户端仅应了解Bot Framework REST API,并且不应该与诸如对话框管理之类的任何内部bot逻辑有关。

Dialogs基于对话框状态,该状态基于bot state。使用特定密钥在已配置的存储中访问Bot状态。如果对话框使用的漫游器状态类型是用户状态,则密钥将由用户ID构成;如果是对话状态,则密钥将具有对话ID;如果是私有对话状态,则它将具有两者。当您了解到要继续对话时,机器人需要知道对话框的上下文时,这很有意义。当漫游器在与一个用户交谈时到达第4步时,则在与其他用户交谈时不应从第5步开始。因此,使用上下文密钥访问状态很重要。

通常,在适配器创建的转弯上下文中可以找到访问正确的bot状态所需的信息。转弯上下文包含传入的活动,该活动具有其from属性中的用户ID和其conversation属性中的会话ID。因此,这里的真正问题是,由于您要发送主动消息,因此在没有传入活动时如何访问正确的bot状态。

由于您可以通过连接器客户端发送消息,因此您的主动触发器必须有权访问用户ID和/或会话ID。您可以使用此信息来创建伪造的传入活动。然后,您可以像使用api/messages端点那样通过适配器运行该活动,也可以使用该活动直接构建自己的转弯上下文。拥有转弯上下文后,您可以像常规一样从对话框集中创建对话框上下文。