如何手动从 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 使用 ConnectorClient
将 conversationUpdate
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()
我有一个在 bot framework v4
的帮助下编写的 bot。该机器人与 Microsoft Teams 集成。我想在用户安装机器人并加入 1:1 对话时向用户发送欢迎消息。在 Teams 中,conversationUpdate
仅被触发一次(这是用户加入 1:1 对话时),然后再也不会为该用户触发。我的想法是编写一个由聊天消息触发的函数,以手动发送 updateConversation
activity 来调试欢迎消息。
到目前为止我失败了,得到了
BadArgument: Unknown activity type exception.
我尝试使用 Microsoft.Bot.Builder.Teams nuget 使用 ConnectorClient
将 conversationUpdate
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()