如何手动从 bot 向 Microsoft Teams 发送 'conversationUpdate'?

How to send a 'conversationUpdate' to Microsoft Teams from bot manually?

我有一个在 bot framework v4 的帮助下编写的 bot。该机器人与 Microsoft Teams 集成。我想在用户安装机器人并加入 1:1 对话时向用户发送欢迎消息。在 Teams 中,conversationUpdate 仅被触发一次(这是用户加入 1:1 对话时),然后再也不会为该用户触发。我的想法是编写一个由聊天消息触发的函数,以手动发送 updateConversation activity 来调试欢迎消息。

到目前为止我失败了,得到了

BadArgument: Unknown activity type exception.

我尝试使用 Microsoft.Bot.Builder.Teams nuget 使用 ConnectorClientconversationUpdate activity 发送到对话中。

我还设置了一个控制台应用程序并尝试使用 v3/directline/conversations/{conversationId}/activities 并得到一个 Forbidden 错误。

private async Task SendConversationUpdateToTeamsAsync(ITurnContext turnContext, CancellationToken cToken = default)
{
    var connectorClient = turnContext.TurnState.Get<IConnectorClient>();

    var conversationUpdateMessage = new Activity
    {
        Type = ActivityTypes.ConversationUpdate,
        Id = turnContext.Activity.Id,
        ServiceUrl = turnContext.Activity.ServiceUrl,
        From = turnContext.Activity.From,
        Recipient = turnContext.Activity.Recipient,
        Conversation = turnContext.Activity.Conversation,
        ChannelData = turnContext.Activity.ChannelData,
        ChannelId = turnContext.Activity.ChannelId,
        Timestamp = turnContext.Activity.Timestamp,
        MembersAdded = new List<ChannelAccount>
        {
            turnContext.Activity.From,
            turnContext.Activity.Recipient
        },
    };

    var result = await connectorClient.Conversations.SendToConversationAsync(conversationUpdateMessage, cToken);
}

我希望手动发送 conversationUpdate 来调试 Teams 中的行为。在 office 门户中创建新用户并为他们安装 bot 以调试 conversationUpdate 行为对我来说不是一个选择,因为这太耗时了。如果有其他解决方法可以触发 Teams 中的 conversationUpdate,请告诉我。

我不确定有什么方法可以强制按您尝试的方式发送 ConversationUpdate。相反,我只是在 OnMessageAsync():

中抛出这样的东西
if (turnContext.Activity.Text == "fakeConversationUpdate")
{
    var fakeTurnContext = new TurnContext(turnContext.Adapter, MessageFactory.Text(string.Empty));
    fakeTurnContext.Activity.AsConversationUpdateActivity();
    fakeTurnContext.Activity.Type = ActivityTypes.ConversationUpdate;
    fakeTurnContext.Activity.MembersAdded = new List<ChannelAccount>()
    {
        new ChannelAccount()
        {
            Id = "fakeUserId",
            Name = "fakeUserName"
        }
    };
    await OnConversationUpdateActivityAsync(new DelegatingTurnContext<IConversationUpdateActivity>(fakeTurnContext), cancellationToken);

}

然后要进行调试,您只需在聊天中向机器人写入 "fakeConversationUpdate"(您可以 change/customize),它会发送您的 fakeTurnContext(您可以 change/customize) 通过 OnConversationUpdateActivityAsync()