目录
[关于腾讯 IM REST API](#关于腾讯 IM REST API)
关于腾讯 IM REST API
REST API 是腾讯即时通信 IM 提供给服务端的一组 HTTP 后台管理接口,如消息管理、群组管理、用户管理、会话管理等等。REST API 接口较为原始,管理能力强大。另外,为了安全性,REST API 仅提供 HTTPS 接口,本文将主要介绍常用的消息管理API。
开发前准备
(1)开发前需要申请 SDK 开发者 ID 及密钥,如何获取请参照如下链接:
(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 提供了非常丰富与完善的管理功能列表,在这里我们仅是以满足自身应用需要而提取的常用帐户管理功能,更多详情请参照如下链接:
本文代码仅供您参考使用,您可以参照官方文档开发出更加贴合自身需求的应用,感谢您的阅读,希望本文能够对您有所帮助。