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

2024-06-04 4636阅读

目录

关于腾讯 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 类进行创建,请参考如下代码:

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 类,创建及访问示例如下:

TCAcount tca = new TCAcount();
string SDKAppId=tca.SDKAppId;
string SDKAppIdSecret=tca.SDKAppIdSecret;

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

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 应用系统内在指定的用户之间发送文本消息内容。其关键属性方法说明如下:

序号参数类型说明
1From_Accountstring指定消息的发送者 UserID
2To_Accountstring指定消息的接收者 UserID
3msgstring文本消息内容
4Syncbool

true:把消息同步到 From_Account 在线终端和漫游上

false:消息不同步至 From_Account

现代码如下:

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 应用系统内通过指定的用户向多个用户之间发送文本消息内容。其关键属性方法说明如下:

序号参数类型说明
1From_Accountstring指定消息的发送者 UserID
2To_Accountsstring指定消息的多个接收者 UserID,多个UserID之间用逗号分隔,如“User1,User2,User3"
3msgstring文本消息内容
4Syncbool

true:把消息同步到 From_Account 在线终端和漫游上

false:消息不同步至 From_Account

现代码如下:

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 方法可删除群组内指定用户发送的消息。其关键属性方法说明如下:

序号参数类型说明
1GroupIdstring要指定的群组 ID
2Accountstring要删除消息的用户 UserID

实现代码如下:

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

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


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]