我们已经构建了一个microsoft teams app
,它使用了bot
,并且在用户安装了该应用之后,我们想要显示一个显示“分享到频道”的按钮,用户可以点击该按钮,然后选择他们也想通过哪个渠道发送卡。
我该怎么做?是否可以通过连接器或网络钩子使用?或者我需要其他方法吗?
我已经连接了连接器,并将该连接器ID添加到了应用程序包中的manifest.json
文件中,但是我不知道从那里可以去哪里。
我已阅读以下文档:
https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using
https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook
当用户安装应用程序时,我们可以获取该用户的信息,但无法获取该用户连接的其他团队或渠道的信息。
我还尝试创建一个message extension
https://docs.microsoft.com/en-us/microsoftteams/platform/messaging-extensions/how-to/create-messaging-extension
我还看了Graph API
答案 0 :(得分:0)
使用Bot将卡片发送到频道
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 :(得分:0)
出于安全原因,您的代码无法将消息发送给团队中的任何人(1-1聊天,群聊或频道),除非您已经安装了 到该位置(机器人,连接器,webhook)。在这种情况下,您已经有一个机器人,因此这可能是最好的选择,并且根据Trinetra的回答,您需要以"proactive message"的形式发送卡。为此,您需要某些值(例如,对话ID,serviceurl等),并且要获取这些值,还需要将应用安装到最终目的地。
因此,从本质上讲,您需要将漫游器安装到目标位置,但涉及Channel时,有几种方法可以执行此操作。最简单的方法是让用户立即安装您的漫游器,并从sessionUpdate事件中获取所需的信息(conversationid等)。或者,您可以install your app programmatically using the Graph。
答案 2 :(得分:0)
只需使用传入的Webhook。您可以将自适应卡直接发送到通道。 https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using#send-adaptive-cards-using-an-incoming-webhook
要获取用户所属的渠道,请在Ms Graph API上使用OData查询 https://docs.microsoft.com/en-us/graph/api/channel-list?view=graph-rest-1.0&tabs=http
但是要获取频道列表,您需要首先获取用户的团队。频道属于团队。然后获取每个团队的所有可发布渠道。