【问题标题】:Incoming Webhook for Private Messages in Microsoft TeamsMicrosoft Teams 中私人消息的传入 Webhook
【发布时间】:2016-11-04 16:46:24
【问题描述】:

我可以从 C# 应用程序或 PS 脚本创建传入 webhook,将 JSON 消息发送到 MSFT 文档解释的通道。

但是,我想使用传入的 webhook 从我的应用程序向用户发送 JSON 消息(作为私人消息),就像 Slack 允许的那样。

据我所知,这在 MSFT 团队中是不可能的:https://dev.outlook.com/Connectors/Reference

但也许您知道任何解决方法或类似的方法来解决它。

提前致谢:)

[EDITED] 用于通过 C# 应用向 MSFT 团队发布消息的代码:

//Post a message using simple strings
public void PostMessage(string text, string title)
{
    Payload payload = new Payload()
    {
        Title = title
        Text = test
    };
    PostMessage(payload);
}

//Post a message using a Payload object
public async void PostMessage(Payload payload)
{
    string payloadJson = JsonConvert.SerializeObject(payload);
    var content = new StringContent(payloadJson);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    var client = new HttpClient();
    uri = new Uri(GeneralConstants.TeamsURI);
    await client.PostAsync(uri, content);
}

【问题讨论】:

    标签: c# .net powershell microsoft-teams


    【解决方案1】:

    此时实现您的目标的最佳方法是创建一个 Bot 并实施它以公开您的应用或服务可以发布到的 webhook 端点,并让 bot 将这些消息发布到与用户的聊天中。

    首先根据您的机器人接收到的传入活动捕获成功发布到机器人与用户的对话所需的信息。

    var callBackInfo = new CallbackInfo() 
    { 
         ConversationId = activity.Conversation.Id, 
         ServiceUrl = activity.ServiceUrl
    };
    

    然后将 callBackInfo 打包到一个令牌中,该令牌稍后将用作您的 webhook 的参数。

     var token = Convert.ToBase64String(
         Encoding.Default.GetBytes(
             JsonConvert.SerializeObject(callBackInfo)));
    
     var webhookUrl = host + "/v1/hook/" + token;
    

    最后,实现 webhook 处理程序来解压 callBackInfo:

    var jsonString = Encoding.Default.GetString(Convert.FromBase64String(token));
    var callbackInfo = JsonConvert.DeserializeObject<CallbackInfo>(jsonString);
    

    并发布到机器人与用户的对话中:

    ConnectorClient connector = new ConnectorClient(new Uri(callbackInfo.ServiceUrl));
    
            var newMessage = Activity.CreateMessageActivity();
            newMessage.Type = ActivityTypes.Message;
            newMessage.Conversation = new ConversationAccount(id: callbackInfo.ConversationId);
            newMessage.TextFormat = "xml";
            newMessage.Text = message.Text;
    
            await connector.Conversations.SendToConversationAsync(newMessage as Activity);
    

    看看我关于这个主题的博文here。如果您以前从未编写过 Microsoft Teams 机器人,请查看我的另一篇博文,其中包含分步说明here

    【讨论】:

    • 谢谢@Sid-Uppal - MSFT,也许创建一个机器人会更好,但我对机器人框架不是很熟悉,我只需要从我的应用程序向用户和渠道发送消息,而不是向后发送.我不想编辑我的代码太多,但如果你需要它,我将编辑我的问题,添加用于使用 C# 发布到 MSFT Teams 的代码。
    • @Jose - 我了解您如何将 webhook 消息发布到频道中。很遗憾,我们目前不支持将 webhook 消息发布到聊天中。您必须通过您的应用以 1 对 1 的方式通知用户的唯一选择是使用机器人。查看 Bot Framework SDK here 中的示例 Echo bot。很容易上手。
    • 感谢您的帮助@Sid Uppal - MSFT,我会在今天下午尝试并再次检查您的新信息如何实现我的目标 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多