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

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

相关推荐
勘察加熊人3 分钟前
forms实现俄罗斯方块
c#
Asthenia04127 分钟前
如何设计实现一个定时任务执行器 - SpringBoot环境下的最佳实践
后端
zhu128930355622 分钟前
网络安全的重要性与防护措施
网络·安全·web安全
兔子的洋葱圈26 分钟前
【django】1-2 django项目的请求处理流程(详细)
后端·python·django
Asthenia041234 分钟前
如何为这条sql语句建立索引:select * from table where x = 1 and y < 1 order by z;
后端
独好紫罗兰34 分钟前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
ihgry37 分钟前
SpringBoot+Mybatis实现Mysql分表
后端
Asthenia041237 分钟前
令牌桶算法与惰性机制的应用
后端
lamdaxu40 分钟前
02Tomcat 线程模型详解&性能调优
后端
lamdaxu42 分钟前
03Tomcat类加载机制&热加载和热部署
后端