Microsoft Teams 中私人消息的传入 Webhook
Incoming Webhook for Private Messages in Microsoft Teams
我可以从 C# 应用程序或 PS 脚本向 MSFT 文档解释的频道发送 JSON 消息创建一个传入的 webhook。
但是,我想使用传入的 webhook 从我的应用程序向用户发送 JSON 消息(作为私人消息),就像 Slack 允许的那样。
据我所知,这对于 MSFT Teams 是不可能的:https://dev.outlook.com/Connectors/Reference
但也许您知道任何解决方法或类似方法来修复它。
提前致谢:)
[已编辑] 用于通过 C# 应用程序 post 向 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);
}
此时实现您的目标的最佳方法是创建一个机器人并实施它以公开一个 Webhook 端点,您的应用程序或服务可以 post 到该机器人 post这些消息与用户聊天。
首先捕获成功 post 所需的信息,以根据您的机器人收到的传入 activity 与用户对话。
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);
和post到机器人与用户的对话:
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);
看看我的博客 post 关于这个主题 here. If you have never written a Microsoft Teams bot before, take a look at my other blog post with step-by-step instructions here。
我可以从 C# 应用程序或 PS 脚本向 MSFT 文档解释的频道发送 JSON 消息创建一个传入的 webhook。
但是,我想使用传入的 webhook 从我的应用程序向用户发送 JSON 消息(作为私人消息),就像 Slack 允许的那样。
据我所知,这对于 MSFT Teams 是不可能的:https://dev.outlook.com/Connectors/Reference
但也许您知道任何解决方法或类似方法来修复它。
提前致谢:)
[已编辑] 用于通过 C# 应用程序 post 向 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);
}
此时实现您的目标的最佳方法是创建一个机器人并实施它以公开一个 Webhook 端点,您的应用程序或服务可以 post 到该机器人 post这些消息与用户聊天。
首先捕获成功 post 所需的信息,以根据您的机器人收到的传入 activity 与用户对话。
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);
和post到机器人与用户的对话:
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);
看看我的博客 post 关于这个主题 here. If you have never written a Microsoft Teams bot before, take a look at my other blog post with step-by-step instructions here。