C# 实现腾讯云 IM 常用 REST API 之消息管理

目录

[关于腾讯 IM REST API](#关于腾讯 IM REST API)

开发前准备

范例运行环境

常用消息管理API

发送单聊消息

批量发送单聊消息

删除指定用户发送的消息

小结


关于腾讯 IM REST API

REST API 是腾讯即时通信 IM 提供给服务端的一组 HTTP 后台管理接口,如消息管理、群组管理、用户管理、会话管理等等。REST API 接口较为原始,管理能力强大。另外,为了安全性,REST API 仅提供 HTTPS 接口,本文将主要介绍常用的消息管理API。

开发前准备

(1)开发前需要申请 SDK 开发者 ID 及密钥,如何获取请参照如下链接:

腾讯IM即时通信控制台

(2)调用 REST API 之前,需要生成 UserSig ,UserSig 是用户登录即时通信 IM 的密码,其本质是对 UserID 等信息加密后得到的密文,如何生成 UserSig 请参照我的文章《C# 生成腾讯云 IM 之 TLSSigAPIv2 UserSig》,通过 TLSSigAPIv2 类进行创建,请参考如下代码:

cs 复制代码
string SDKAppId="申请的SDKAppID";  
string SDKAppIdSecret="申请的SDKAppIdSecret";  
string AppAdminId="IM平台超级管理员UserID";

TLSSigAPIv2 sig = new TLSSigAPIv2(int.Parse(SDKAppId),SDKAppIdSecret);
string _sig = sig.GenSig(AppAdminId);

(3)SDKAppID 及 SDKAppIdSecret 的获取在后续范例中均封装为 TCAcount 类,创建及访问示例如下:

cs 复制代码
TCAcount tca = new TCAcount();
string SDKAppId=tca.SDKAppId;
string SDKAppIdSecret=tca.SDKAppIdSecret;

(4) 用到两个时间戳函数,代码如下:

cs 复制代码
public string getTimestamp(int seconds)
{
        TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        return Convert.ToInt64(ts.TotalSeconds + seconds).ToString();
}
public string GetTimeStamp(DateTime dtime)
{
        TimeSpan tspan = dtime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        return Convert.ToInt64(tspan.TotalSeconds).ToString();
}

(5) WebService 类实现访问 REST API URL 地址并 POST 数据,以获取返回结果 Json 的功能。具体实现请参照我的文章《C# 实现访问 Web API Url 提交数据并获取处理结果》

范例运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.0 或以上

开发工具:VS2019 C#

常用消息管理API

发送单聊消息

SendMsg方法可以在 IM 应用系统内在指定的用户之间发送文本消息内容。其关键属性方法说明如下:

| 序号 | 参数 | 类型 | 说明 |
| 1 | From_Account | string | 指定消息的发送者 UserID |
| 2 | To_Account | string | 指定消息的接收者 UserID |
| 3 | msg | string | 文本消息内容 |

4 Sync bool true:把消息同步到 From_Account 在线终端和漫游上 false:消息不同步至 From_Account

现代码如下:

cs 复制代码
public string SendMsg(string From_Account,string To_Account,string msg,bool Sync)
{
                    string sync = Sync == true ? "1" : "2";
                    ArrayList data = new ArrayList();
                    TCAcount tca = new TCAcount();
                    //请求地址
                    string settingUrl = "https://console.tim.qq.com/v4/openim/sendmsg?sdkappid={0}&identifier={1}&usersig={2}&random={3}&contenttype=json";
                    string AppAdminId = "administrator";
                    Random rnd = new Random();
                    string random = rnd.Next(0, 429496729).ToString();
                    TLSSigAPIv2 sig = new TLSSigAPIv2(int.Parse(tca.SDKAppId), tca.SDKAppIdSecret);
                    string _sig = sig.GenSig(AppAdminId);
                    string isfrom = "";
                    if (From_Account != "")
                    {
                        isfrom = ",\"From_Account\": \""+From_Account+"\"";
                    }
                    string content = "{\"SyncOtherMachine\":"+sync + isfrom + ",\"To_Account\":\"" + To_Account + "\"," +
    "\"MsgLifeTime\":60480,\"MsgRandom\":" + rnd.Next(0, 429496729).ToString() + ",\"MsgTimeStamp\":" + getTimestamp(int.Parse("60480")) + ",\"MsgBody\":[{\"MsgType\":\"TIMTextElem\",\"MsgContent\":{\"Text\":\"" + msg + "\"}}]}";

                    settingUrl = string.Format(settingUrl, tca.SDKAppId, AppAdminId, _sig, random);
                    WebService ws = new WebService();

                    string resultStr = ws.GetResponseResult(settingUrl, Encoding.UTF8, "POST", content);
                    return resultStr;
}

批量发送单聊消息

BatchSendMsg方法可以在 IM 应用系统内通过指定的用户向多个用户之间发送文本消息内容。其关键属性方法说明如下:

| 序号 | 参数 | 类型 | 说明 |
| 1 | From_Account | string | 指定消息的发送者 UserID |
| 2 | To_Accounts | string | 指定消息的多个接收者 UserID,多个UserID之间用逗号分隔,如"User1,User2,User3" |
| 3 | msg | string | 文本消息内容 |

4 Sync bool true:把消息同步到 From_Account 在线终端和漫游上 false:消息不同步至 From_Account

现代码如下:

cs 复制代码
public string BatchSendMsg(string From_Account, string To_Accounts, string msg, bool Sync)
{
                    string sync = Sync == true ? "1" : "2";
                    ArrayList data = new ArrayList();
                    TCAcount tca = new TCAcount();
                    //请求地址
                    string settingUrl = "https://console.tim.qq.com/v4/openim/batchsendmsg?sdkappid={0}&identifier={1}&usersig={2}&random={3}&contenttype=json";
                    string AppAdminId = "administrator";
                    Random rnd = new Random();
                    string random = rnd.Next(0, 429496729).ToString();
                    TLSSigAPIv2 sig = new TLSSigAPIv2(int.Parse(tca.SDKAppId), tca.SDKAppIdSecret);
                    string _sig = sig.GenSig(AppAdminId);
                    string isfrom = "";
                    if (From_Account != "")
                    {
                        isfrom = ",\"From_Account\": \"" + From_Account + "\"";
                    }
                    string content = "{\"SyncOtherMachine\":" + sync + isfrom + ",\"To_Account\":[\"" + To_Accounts + "\"]," +
    "\"MsgRandom\":" + rnd.Next(0, 429496729).ToString() + ",\"MsgBody\":[{\"MsgType\":\"TIMTextElem\",\"MsgContent\":{\"Text\":\"" + msg + "\"}}]}";

                    settingUrl = string.Format(settingUrl, tca.SDKAppId, AppAdminId, _sig, random);
                    WebService ws = new WebService();

                    string resultStr = ws.GetResponseResult(settingUrl, Encoding.UTF8, "POST", content);
                    return resultStr;
}

删除指定用户发送的消息

DeleteGroupMessage 方法可删除群组内指定用户发送的消息。其关键属性方法说明如下:

| 序号 | 参数 | 类型 | 说明 |
| 1 | GroupId | string | 要指定的群组 ID |

2 Account string 要删除消息的用户 UserID

实现代码如下:

cs 复制代码
public string DeleteGroupMessage(string GroupId, string Account)
{
                    TCAcount tca = new TCAcount();
                    //请求地址
                    string settingUrl = "https://console.tim.qq.com/v4/group_open_http_svc/delete_group_msg_by_sender?sdkappid={0}&identifier={1}&usersig={2}&random={3}&contenttype=json";
                    string AppAdminId = "administrator";
                    Random rnd = new Random();
                    string random = rnd.Next(0, 429496729).ToString();
                    TLSSigAPIv2 sig = new TLSSigAPIv2(int.Parse(tca.SDKAppId), tca.SDKAppIdSecret);
                    string _sig = sig.GenSig(AppAdminId);

                    string content = "{\"GroupId\":\"" + GroupId + "\",\"Sender_Account\": \""+Account+"\"}";

                    settingUrl = string.Format(settingUrl, tca.SDKAppId, AppAdminId, _sig, random);
                    WebService ws = new WebService();

                    string resultStr = ws.GetResponseResult(settingUrl, Encoding.UTF8, "POST", content);
                    return resultStr;
} 

小结

腾讯云 IM REST API 提供了非常丰富与完善的管理功能列表,在这里我们仅是以满足自身应用需要而提取的常用帐户管理功能,更多详情请参照如下链接:

REST API 接口列表 | 腾讯云

本文代码仅供您参考使用,您可以参照官方文档开发出更加贴合自身需求的应用,感谢您的阅读,希望本文能够对您有所帮助。

相关推荐
小小龙学IT2 分钟前
simdjson:利用 SIMD 指令实现 GB/s 级 JSON 解析的 C++ 开源库
开发语言·c++·json
A_nanda12 分钟前
c#WPF开发常见问题
开发语言·c#·wpf
唐青枫12 分钟前
别只会解析参数:C#.NET Spectre.Console.Cli 命令行工具实战详解
c#·.net
国科安芯17 分钟前
详解ADC 规则组外部触发:CH2、CH3 与 TRGO2
运维·网络·单片机·嵌入式硬件·mcu·系统架构
Hello.Reader28 分钟前
REALITY 技术深度解析从 TLS 伪装、抗主动探测到 VLESS + XTLS Vision 完整实践
开发语言·php
不正经学生36 分钟前
C语言字符串函数进阶:安全版函数 + 错误处理 + 子串查找
c语言·开发语言·c++·算法·面试
Zane199439 分钟前
钻石继承调用哪个方法?一文讲透 MRO 与 C3 线性化算法
后端·python
码事漫谈41 分钟前
国产替代的硬核样本:金仓数据库如何撑起固井软件的数据底座
后端
便利店10241 小时前
以太网:局域网如何用 MAC 与交换机转发帧
网络·智能路由器·mac·以太网
ITKEY_1 小时前
neovim基于nvim-jdtls 开发java报错
java·开发语言