IM客户端
ClownFish 对国内主流的IM提供了客户端支持可用于发送消息。
只需要一套代码即可支持3种IM
3种IM程序
- 企业微信
- 钉钉
- 飞书
针对3种IM,又支持3大类的使用场景:
- IM应用 给 单个用户 推送消息
- IM应用 给 聊天群 推送消息
- 以IM-Webhook 方式给 聊天群 推送消息
IM应用的连接认证配置
在发送消息前,请先在配置服务中注册IM所需的连接认证参数,可参考下图:
参数类型定义
/// <summary>
/// 企业微信/钉钉/飞书 应用 登录参数
/// </summary>
public sealed class ImAppAuthConfig
{
/// <summary>
/// IM类别
/// </summary>
public ImType ImType { get; set; }
/// <summary>
/// 企业微信的 CorpId,飞书的 AppID,钉钉的 AppKey
/// </summary>
public string AppId { get; set; }
/// <summary>
/// 企业微信的 Secret,飞书的 AppSecret,钉钉的 AppSecret
/// </summary>
public string AppSecret { get; set; }
/// <summary>
/// 企业微信/钉钉的 AgentId,飞书不使用此参数
/// </summary>
public long AgentId { get; set; }
}
public enum ImType
{
WxWork,
DingDing,
FeiShu
}
参数值配置示例
ImType=WxWork;AgentId=111111;AppId=xxxxxxxxxxxx;AppSecret=xxxxxxxxxxxxxxxx
IM应用给单个用户推送消息
示例代码
public static async Task Test1()
{
string userId = "liqf01";
ImAppMsgClient client = new ImAppMsgClient("WxWork.AppAuth.Config");
await client.SendTextAsync(userId, TextMsg);
await client.SendMarkdownAsync(userId, MarkdownMsg);
await client.SendImageAsync(userId, @"e:\aaaaa.jpg");
await client.SendFileAsync(userId, @"E:\bbbbb.pdf");
await client.SendFileAsync(userId, @"E:\ccccc.txt");
await client.SendFileAsync(userId, @"E:\ddddd.png");
await client.SendCardAsync(userId, CardTitle, CardMsg, CardHref);
}
IM应用给聊天群推送消息
示例代码
public static async Task Test2()
{
string chatId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
ImGroupChatClient client = new ImGroupChatClient("WxWork.AppAuth.Config");
await client.SendTextAsync(chatId, TextMsg);
await client.SendMarkdownAsync(chatId, MarkdownMsg);
await client.SendImageAsync(chatId, @"e:\aaaaa.jpg");
await client.SendFileAsync(chatId, @"E:\bbbbb.pdf");
await client.SendFileAsync(chatId, @"E:\ccccc.txt");
await client.SendFileAsync(chatId, @"E:\ddddd.png");
await client.SendCardAsync(chatId, CardTitle, CardMsg, CardHref);
}
注意事项
- A应用创建的“XX群”,B应用不能给“XX群”发消息
- A应用要创建群,需要在企业微信后台的“可见范围”中设置必需的可见范围
以IM-Webhook方式给聊天群推送消息
示例代码
public static async Task Test1()
{
ImWebhookClient client = new ImWebhookClient("WxWork.WebHookAuth.Config");
await client.SendTextAsync(TextMsg);
await client.SendMarkdownAsync(MarkdownMsg);
}
WebHook配置参数类型定义
/// <summary>
/// 企业微信/钉钉/飞书 WebHook 登录参数
/// </summary>
public sealed class ImWebHookConfig
{
/// <summary>
/// IM类别
/// </summary>
public ImType ImType { get; set; }
/// <summary>
/// WebHook URL
/// </summary>
public string WebHookUrl { get; set; }
/// <summary>
/// 签名密钥,可为空。
/// </summary>
public string SignKey { get; set; }
}
企业微信专用客户端
如果需要调用企业微信的服务端API,可以使用 WxworkClient 这个类型。
例如,获取用户信息:
WxworkClient client = new WxworkClient("WxWork.AppAuth.Config");
WxworkUserInfo userinfo = client.GetUserInfo("liqf01");
Console2.WriteLine(userinfo.ToJson(JsonStyle.Indented));
其它有用的方法
- public T SendRequest
(HttpOption httpOption) where T : IShitResult - public async Task
SendRequestAsync (HttpOption httpOption) where T : IShitResult - public T SendData
(object data) where T : IShitResult - public async Task
SendDataAsync (object data) where T : IShitResult - public string UploadMedia(byte[] fileBody, string fileName, string mediaType)
- public async Task
UploadMediaAsync(byte[] fileBody, string fileName, string mediaType)
使用WxworkClient的好处:
- 它会在内部自动处理企业微信所需的 access_token
- 支持开发阶段查看完整的 请求/响应 过程,环境变量:Nebula_ImHttpClient_Debug_Enabled=1
例如: