Microsoft团队允许用户将卡片从漫游器共享到另一个渠道

时间:2020-06-11 22:07:11

标签: microsoft-teams

我们已经构建了一个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

3 个答案:

答案 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

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