如何从漫游器手动向Microsoft Teams发送“ conversationUpdate”?

时间:2019-08-01 08:38:35

标签: c# microsoft-teams azure-bot-service

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

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

  

BadArgument:未知的活动类型异常。

我尝试通过ConnectorClient使用Microsoft.Bot.Builder.Teams nuget将conversationUpdate活动发送到对话。

我还设置了一个控制台应用程序,并尝试使用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中的行为是可行的。在办公室门户中创建新用户并为其安装机器人以调试conversationUpdate行为对于我来说是不可行的,因为这很耗时。如果还有其他解决方法可以触发团队中的conversationUpdate,请告诉我。

1 个答案:

答案 0 :(得分:1)

我不确定是否可以以您尝试的方式强制发送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”(您可以更改/自定义)写入机器人,它将通过fakeTurnContext发送您的OnConversationUpdateActivityAsync()(您可以更改/自定义)