C# 如何发送';对话更新';手动从bot连接到Microsoft团队?

C# 如何发送';对话更新';手动从bot连接到Microsoft团队?,c#,microsoft-teams,azure-bot-service,C#,Microsoft Teams,Azure Bot Service,我在botframeworkv4的帮助下编写了一个bot。该机器人与Microsoft团队集成。我想在用户安装bot并加入1:1对话时向用户发送欢迎消息。在团队中,conversationUpdate只触发一次(这是当suer加入1:1对话时),然后再也不会为该用户触发。我的想法是编写一个由聊天消息触发的函数,手动发送updateConversation活动来调试欢迎消息 到目前为止我失败了,得了一个好成绩 BadArgument:未知的活动类型异常 我已尝试使用nuget,使用Connecto

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

到目前为止我失败了,得了一个好成绩

BadArgument:未知的活动类型异常

我已尝试使用nuget,使用
ConnectorClient
向对话发送
conversationUpdate
活动

此外,我还设置了一个控制台应用程序,并尝试使用
v3/directline/conversations/{conversationId}/activities
,结果出现
禁止的
错误

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);
}
专用异步任务SendConversationUpdateToeamsAsync(iTurContext turnContext,CancellationToken cToken=default)
{
var connectorClient=turnContext.TurnState.Get();
var conversationUpdateMessage=新活动
{
类型=ActivityTypes.ConversationUpdate,
Id=turnContext.Activity.Id,
ServiceUrl=turnContext.Activity.ServiceUrl,
From=turnContext.Activity.From,
收件人=turnContext.Activity.Recipient,
对话=turnContext.Activity.Conversation,
ChannelData=turnContext.Activity.ChannelData,
ChannelId=turnContext.Activity.ChannelId,
时间戳=turnContext.Activity.Timestamp,
MembersAdded=新列表
{
turnContext.Activity.From,
turnContext.Activity.Recipient
},
};
var result=await connectorClient.Conversations.SendToConversationAsync(conversationUpdateMessage,cToken);
}

我希望手动发送
conversationUpdate
来调试团队中的行为是可行的。在office门户中创建新用户并安装bot以便他们调试
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=新列表()
{
新帐户()
{
Id=“fakeUserId”,
Name=“fakeUserName”
}
};
等待OnConversationUpdateActivityAsync(新的DelegatingTurnContext(FaketTurnContext)、cancellationToken);
}

然后,为了调试,您只需在聊天中将“fakeConversationUpdate”(您可以更改/自定义)写入bot,它将通过
OnConversationUpdateActivityAsync()

发送您的
fakeTurnContext
(您可以更改/自定义),以下是您如何模拟bot接收它的方法。谢谢!这就解决了问题。不过有一个小小的调整。我必须用
DelegatingTurnContext
来包装
fakeTurnContext
,否则对
ITurnContext
的转换将返回
null