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 接口列表 | 腾讯云

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

相关推荐
艾莉丝努力练剑7 分钟前
【AI大模型接入SDK】ChatGPT API
网络·c++·人工智能·websocket·网络协议·学习·chatgpt
wuyk5551 小时前
104.C 语言字节对齐:从底层原理到工程实践的完整指南
c语言·开发语言·stm32·单片机·嵌入式硬件
君顾17 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
4A广告文案7 小时前
名创优品在成都开了家“乐园”,顺便造了个新IP
网络·网络协议·tcp/ip
北域码匠7 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
南棱笑笑生7 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
平头哥技术团队8 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌萨奇也要立志学C++8 小时前
【洛谷】kmp算法
开发语言·算法
Fnetlink18 小时前
Fnet 云网安 260904
网络·人工智能·安全·web安全·网络安全
传奇开心果编程8 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust