Microsoft Teams 允许用户将卡片从机器人共享到另一个频道



我们构建了一个使用botmicrosoft teams app,在用户安装应用程序后,我们希望显示一个按钮,上面写着"分享到频道",用户可以在其中单击,然后选择他们想要发送卡片的频道。

我该怎么做?这是否可以通过连接器或 Webhook 实现,或者我是否需要另一种方法?

我已经连接了一个连接器,并将该连接器 ID 添加到应用包中的manifest.json文件中,但我不知道从那里开始。 我已阅读以下文档: https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook

当用户安装应用时,我们可以获取该用户的信息,但无法获取用户连接到的其他团队或频道的信息。

我还尝试创建一个message extensionhttps://learn.microsoft.com/en-us/microsoftteams/platform/messaging-extensions/how-to/create-messaging-extension

我也看了Graph API

使用机器人向频道发送卡片

public static async Task<ConversationResourceResponse> SendCardToChannel(ITurnContext turnContext, Attachment cardToSend, CancellationToken cancellationToken, IConfiguration configuration)
{
var id = configuration["MicrosoftAppId"];
var pass = configuration["MicrosoftAppPassword"];
var channelid = configuration["ChannelId"];
var credentials = new MicrosoftAppCredentials(id, pass);
var conversationParameters = new ConversationParameters
{
Activity = (Activity)MessageFactory.Attachment(cardToSend),
ChannelData = new TeamsChannelData { Channel = new ChannelInfo(channelid) },
};
var tcs = new TaskCompletionSource<ConversationResourceResponse>();
try
{
await ((BotFrameworkAdapter)turnContext.Adapter).CreateConversationAsync(
null,       // If we set channel = "msteams", there is an error as preinstalled middleware expects ChannelData to be present
turnContext.Activity.ServiceUrl,
credentials,
conversationParameters,
(newTurnContext, newCancellationToken) =>
{
var activity = newTurnContext.Activity;
tcs.SetResult(new ConversationResourceResponse
{
Id = activity.Conversation.Id,
ActivityId = activity.Id,
ServiceUrl = activity.ServiceUrl,
});
return Task.CompletedTask;
},
cancellationToken);
}
catch (Exception e)
{
Console.WriteLine(e);
}
return await tcs.Task;
}

尝试这段代码,让我知道您是否能够在频道中发送卡。

出于安全原因,你的代码无法向团队中的任何内容(1-1 聊天、群聊或频道(发送消息,除非你已安装到该位置的内容(机器人、连接器、Webhook(。在这种情况下,您已经有一个机器人,因此这可能是使用的最佳选择,并且您需要根据Trinetra的答案将卡作为"主动消息"发送。为此,您需要某些值(例如 conversationid、serviceurl 等(,要获取这些值,您还需要将您的应用程序安装到最终目的地。

因此,从本质上讲,您需要将机器人安装到目标,但是当涉及到通道时,有几种方法可以做到这一点。最简单的方法是让用户安装机器人,并立即从 conversationUpdate 事件中获取所需的信息(对话 ID 等(。或者,可以使用图形以编程方式安装应用。

只需使用传入的 webhook。可以将自适应卡片直接发送到频道。 https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using#send-adaptive-cards-using-an-incoming-webhook

若要获取用户所属的通道,请在图形 API 上使用 OData 查询 https://learn.microsoft.com/en-us/graph/api/channel-list?view=graph-rest-1.0&tabs=http

但是要获取频道列表,您需要先获取用户的团队。频道属于团队。然后获取每个团队的所有可发布频道。

最新更新