使用 Bot Framework V4 在 Teams 中发送主动式 1:1 消息

Posted

技术标签:

【中文标题】使用 Bot Framework V4 在 Teams 中发送主动式 1:1 消息【英文标题】:Send Proactive 1:1 message in Teams using Bot Framework V4 【发布时间】:2020-05-07 09:07:00 【问题描述】:

我正在尝试通过以下代码使用 Teams SDK 从机器人向团队发送主动 1:1 消息

MicrosoftAppCredentials.TrustServiceUrl(turnContext.Activity.ServiceUrl);
            var connectorClient = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl), Configuration["MicrosoftAppId"], Configuration["MicrosoftAppPassword"]);

            var userId = _operation.MemberTeamsId;
            var tenantId = Configuration["TenantId"];
            var parameters = new ConversationParameters
            
                Members = new[]  new ChannelAccount(userId) ,
                ChannelData = new TeamsChannelData
                
                    Tenant = new TenantInfo(tenantId),
                ,
            ;

            var conversationResource = await connectorClient.Conversations.CreateConversationAsync(parameters);
            var message = Microsoft.Bot.Schema.Activity.CreateMessageActivity();
            message.Text = _operation.Message;
            await connectorClient.Conversations.SendToConversationAsync(conversationResource.Id, (Microsoft.Bot.Schema.Activity)message);

我有以下问题,

    除非用户在部署后进行了先前的对话,否则机器人无法发送主动消息

    已部署机器人

    Bill to Bot - 工作

    Bot to Bill - 工作

    机器人重新部署

    Bot to Bill - 不起作用,因为重新部署后现在对话中没有成员

    Bill to Bot - 工作

    Bot to Bill - 重新部署后,Bill 进行对话时现在可以正常工作

    Bot 多次向用户发送相同的消息

    Bill to Bot - 工作

    Bot to Bill - 主动工作 - 发送 1 条应定义的消息

    Sim to Bot - 工作

    Bot to Sim - 发送 2 条相同的消息,因为现在对话中有两个成员

    Will to Bot - 工作

    Bot to Will - 发送 3 条相同的消息,因为现在对话中有 3 个成员

注意:我将 Teams 用户 ID 存储在数据库中,并使用它们向用户发送直接消息

任何有关如何纠正此问题的帮助将不胜感激。谢谢。

【问题讨论】:

我实际上并不清楚您确切的 question 是什么,但我猜是您不希望发送多条消息?或者,您是否希望将它们直接发送给用户,而不是发送给群聊?还是您希望他们发送到群聊,但只有一条消息? 我正在尝试从 Bot 向用户发送 1:1 个人消息。机器人无法向部署后未对话的用户发送消息。如果它能够在对话后发送,它会根据已经与机器人对话的用户数量多次发送相同的消息,即如果部署后有 10 个用户与 bot 对话,BOT 将向所需用户发送所需的消息 10 次。 【参考方案1】:

根据 cmets 中的答案,我认为我更了解该场景,而且在我看来,问题在于您无论如何都没有设置对话 ID - 尽管您告诉 Bot 哪个用户 您想与之互动,它需要知道您是想与他们直接(即 1-1)互动,还是作为某个地方的群聊或团队频道的一部分。

您需要通过在 Activity 实例上配置 Conversation 属性(在您的情况下为“消息”变量)来设置它。更多详细信息请参见我的帖子:Programmatically sending a message to a bot in Microsoft Teams

希望有帮助 - 如果没有,请告诉我

【讨论】:

以上是关于使用 Bot Framework V4 在 Teams 中发送主动式 1:1 消息的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Bot Framework 向 Teams 中的用户发送通知?

如何在基于Bot framewok v4构建的团队聊天机器人中启用语音功能

在bot框架v4中,如何通过评论框和提交按钮实施评分卡

在公共领域托管 Bot(Microsoft Bot Framework)[重复]

从模板部署和运行 bot 框架 v4.4+ 有效,但使用 fork 和源代码控制部署和运行不起作用

在使用 MS Bot 框架 V4 的 MS 团队聊天机器人中按下英雄卡上的任何按钮后会发出成功通知