C# 如何发送';对话更新';手动从bot连接到Microsoft团队?
我在botC# 如何发送';对话更新';手动从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
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
。