把微信公众号的消息转发给 Teams
我们上篇文章说了如何使用 GraphAPI 给 Teams 的 channel 和 chat 里发送消息,我们今天来看一个具体例子:
当用户给微信公众号里发送消息,我们如何把这个消息转发到 Teams 里。
要将用户发送给微信公众号的消息转发到 Teams,需要使用一个中间服务来接收微信公众号的消息并将其转发到 Teams。
首先,我们需要在微信公众号上配置服务器配置,以便将消息发送到您的中间服务器。
然后,在中间服务器上使用微信公众号的 API 接收来自用户的消息。
接下来,使用 Microsoft Graph API 来将消息发送到 Teams。在应用程序中使用 Microsoft 身份验证库(MSAL)来获取访问令牌,并使用该令牌来调用 Microsoft Graph API。
最后,使用 Microsoft Graph API 在 Teams 中发送消息,例如在聊天会话中发送文本消息或附件。这里就涉及到上篇文章的内容。
请微信公众号相关权限
-
注册微信公众平台帐号:首先,在微信公众平台注册帐号,并通过认证。
-
创建公众号:然后,创建一个微信公众号,并将其与您的帐号关联。
-
开通权限:接下来,在公众号后台中开通相关权限,如消息管理权限、消息接收权限等。
-
配置服务器:最后,在公众号后台中配置服务器,并将消息推送到您的服务器。
接收来自用户的消息
-
配置服务器:在服务器上配置好开发环境,并配置好服务器域名,用于接收微信服务器发送的消息。
-
使用微信公众号的 API:接下来,使用微信公众号的 API 接收用户的消息。微信公众号提供了丰富的API,用于接收消息、发送消息、管理用户等。
-
最后,编写代码来实现接收用户消息的功能。可以使用编程语言如Python、C#等编写代码。
以下是一个示例 C# 代码,使用微信公众号的 API 接收用户的消息:
using System;
using System.Xml;
using System.IO;
public class WeChatController : ApiController
{
[HttpPost]
public HttpResponseMessage HandleWeChatMessage()
{
// 获取请求的XML数据
StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream);
string requestXml = reader.ReadToEnd();
// 将XML数据转换为XML文档
XmlDocument requestDoc = new XmlDocument();
requestDoc.LoadXml(requestXml);
// 解析XML文档,获取用户的消息
string msgType = requestDoc.SelectSingleNode("xml/MsgType").InnerText;
string content = requestDoc.SelectSingleNode("xml/Content").InnerText;
// 处理用户的消息
string responseContent = "";
if (msgType == "text")
{
responseContent = "您发送的消息是:" + content;
}
else if (msgType == "image")
{
responseContent = "您发送的是图片,图片地址为:" + requestDoc.SelectSingleNode("xml/PicUrl").InnerText;
}
// 其他类型的消息处理方式类似
// ...
// 构造响应的XML数据
string responseXml = string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{3}]]></Content></xml>", requestDoc.SelectSingleNode("xml/FromUserName").InnerText, requestDoc.SelectSingleNode("xml/ToUserName").InnerText, DateTime.Now.Ticks, responseContent);
// 返回响应的XML数据
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StringContent(responseXml, Encoding.UTF8, "application/xml");
return response;
}
}
这段代码实现了一个 ASP.NET Web API 控制器,它接收来自微信服务。首先,它使用 HttpPost 标记的 HandleWeChatMessage 方法来处理来自微信服务器的 POST 请求。在这个方法中,它首先通过读取请求的 InputStream 来获取请求的 XML 数据。然后,它将 XML 数据转换为 XML 文档,并使用 XmlDocument 类的 LoadXml 方法加载该文档。
接下来,它使用 SelectSingleNode 方法解析 XML 文档,获取用户发送的消息类型(例如文本、图片等)和内容。根据消息类型,它会执行不同的处理方式。例如,如果消息类型是文本,它会返回一条消息,表示“您发送的消息是:” + 用户发送的文本内容。如果消息类型是图
发送消息到 Microsoft Teams
以下是一个示例 C# 代码,使用 Microsoft Graph API 在 Teams 中发送消息:
using Microsoft.Graph;
using Microsoft.Identity.Client;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
// 获取访问令牌
var graphClient = GetAuthenticatedClient();
// 发送消息
var message = new ChatMessage
{
Body = new ItemBody
{
Content = "Hello, Teams!"
},
ToRecipients = new List<Recipient>
{
new Recipient
{
EmailAddress = new EmailAddress
{
Address = "user@contoso.com"
}
}
}
};
graphClient.Teams["{team-id}"].Channels["{channel-id}"].Messages.Request().AddAsync(message);
}
private static GraphServiceClient GetAuthenticatedClient()
{
IPublicClientApplication app = PublicClientApplicationBuilder
.Create("your-client-id")
.WithTenantId("your-tenant-id")
.Build();
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
AuthenticationResult result = app.AcquireTokenInteractive(scopes).ExecuteAsync().Result;
GraphServiceClient graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) =>
{
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("bearer", result.AccessToken);
return Task.FromResult(0);
}));
return graphClient;
}
}
该代码使用了 Microsoft Graph SDK for .NET 来发送消息。它首先使用 MSAL 获取访问令牌,然后使用该令牌创建一个已身份验证的 GraphServiceClient 对象。接下来,代码使用该对象发送消息到 Teams 的特定团队和频道。需要注意的是,在使用这段代码之前,需要替换client_id,tenant_id, team_id, channel_id。
如果我们想把消息发送到 chat,而不是 channel,可以看一下我的前一篇文章,只需要修改一句话就可以了。
注意点
在使用 Microsoft Graph API 发送消息到 Teams 时,需要注意以下几点:
-
权限:首先,您需要确保您有足够的权限来发送消息。您需要在 Azure 门户中为您的应用程序授予“TeamsAppPermission.SendChatMessage”权限。
-
团队和频道 ID:您需要知道要发送消息的团队和频道的 ID。可以通过 Microsoft Graph API 获取团队和频道的 ID。
-
用户邮件地址:您需要知道要发送消息的用户的邮件地址。可以通过 Microsoft Graph API 查询用户的邮件地址。
-
身份验证:您需要使用已身份验证的 GraphServiceClient 对象来发送消息。您需要使用 MSAL 获取访问令牌,并使用该令牌创