目录
关于腾讯 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 类进行创建,请参考如下代码:
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
创建群组
creategroup 方法为 im 应用系统创建一个群组。其关键属性方法说明如下:
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | groupid | string | 必填:群组id |
2 | owner_account | string | 群主 id(已存在的账号)。填写后自动添加到群成员中;如果不填,群没有群主;成员使用 avchatroom(直播群)时,必须每次调用进群操作 |
3 | type | string | 必填:群组形态,包括 public(陌生人社交群),private(即 work,好友工作群),chatroom(即 meeting,会议群),avchatroom(直播群),community(社群) |
4 | name | string | 必填:群名称,最长30字节,使用 utf-8 编码,1个汉字占3个字节 |
5 | introduction | string | 群简介,最长240字节,使用 utf-8 编码,1个汉字占3个字节 |
6 | notification | string | 群公告,最长300字节,使用 utf-8 编码,1个汉字占3个字节 |
7 | faceurl | string | 群头像 url,最长100字节 |
8 | applyjoinoption | string | 申请加群处理方式。包含 freeaccess(自由加入),needpermission(需要验证),disableapply(禁止加群),不填默认为 needpermission(需要验证) 仅当创建支持申请加群的群组时,该字段有效。社群目前不支持此字段 |
实现代码如下:
public string creategroup(string groupid,string owner_account, string type, string name, string introduction, string notification, string faceurl, string applyjoinoption)
{
arraylist data = new arraylist();
tcacount tca = new tcacount();
//请求地址
string settingurl = "https://console.tim.qq.com/v4/group_open_http_svc/create_group?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 = "{\"owner_account\": \""+owner_account+"\", \"type\": \""+type+"\", \"groupid\": \""+groupid+"\",\"name\": \""+name+"\",\"introduction\":\""+introduction+"\"," +
"\"notification\": \""+notification+"\",\"faceurl\": \""+faceurl+"\",\"applyjoinoption\": \""+applyjoinoption+"\"}";
settingurl = string.format(settingurl, tca.sdkappid, appadminid, _sig, random);
webservice ws = new webservice();
string resultstr = ws.getresponseresult(settingurl, encoding.utf8, "post", content);
return resultstr;
}
增加群成员
addgroupuser 方法向指定的群中添加新成员用户。其关键属性方法说明如下:
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | groupid | string | 要添加新成员的群组 id |
2 | account | string | 要添加的群成员 userid |
3 | silence | string | 是否静默加人。0:非静默加人;1:静默加人。不填该字段默认为0 |
实现代码如下:
//增加群成员
public string addgroupuser(string groupid, string account, string silence)
{
tcacount tca = new tcacount();
//请求地址
string settingurl = "https://console.tim.qq.com/v4/group_open_http_svc/add_group_member?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+"\",\"silence\": "+silence+",\"memberlist\": [ {\"member_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;
}
修改群基础资料
modifygroupbaseinfo 方法可修改指定群组的基础信息。其关键属性方法说明如下:
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | groupid | string | 要修改的群组 id |
2 | name | string | 群名称,最长30字节,使用 utf-8 编码,1个汉字占3个字节 |
3 | introduction | string | 群简介,最长240字节,使用 utf-8 编码,1个汉字占3个字节 |
4 | faceurl | string | 群头像 url,最长100字节 |
5 | applyjoinoption | string | 申请加群处理方式。包含 freeaccess(自由加入),needpermission(需要验证),disableapply(禁止加群),不填默认为 needpermission(需要验证) 仅当创建支持申请加群的群组时,该字段有效。社群目前不支持此字段 |
6 | shutupallmember | string | 群内群成员禁言,只有群管理员和群主以及系统管理员可以发言,"on"开启,"off"关闭 |
实现代码如下:
//修改群基础资料
public string modifygroupbaseinfo(string groupid, string name, string introduction, string faceurl, string applyjoinoption, string shutupallmember)
{
tcacount tca = new tcacount();
//请求地址
string settingurl = "https://console.tim.qq.com/v4/group_open_http_svc/modify_group_base_info?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 name = name == "" ? "" : ", \"name\":\"" + name + "\"";
string intro = introduction == "" ? "" : ", \"introduction\":\"" + introduction + "\"";
string faceurl = faceurl == "" ? "" : ", \"faceurl\":\"" + faceurl + "\"";
string joinoption = applyjoinoption == "" ? "" : ", \"applyjoinoption\":\"" + applyjoinoption + "\"";
string content = "{\"groupid\":\""+groupid+"\""+name+intro+faceurl+joinoption+"}";
settingurl = string.format(settingurl, tca.sdkappid, appadminid, _sig, random);
webservice ws = new webservice();
string resultstr = ws.getresponseresult(settingurl, encoding.utf8, "post", content);
return resultstr;
} //edit_group_info
修改群成员资料
modifygroupuser 方法可以修改指定群成员用户的资料。其关键属性方法说明如下:
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | groupid | string | 要修改操作的群组 id |
2 | account | string | 要操作的群成员userid |
3 | role | string | 成员身份,admin/member 分别为设置/取消管理员(不允许修改群主的身份) |
4 | msgflag | string | 设置的指定成员消息屏蔽类型: acceptandnotify 代表接收并提示消息,discard 代表不接收也不提示消息,acceptnotnotify 代表接收消息但不提示。 |
5 | namecard | string | 指定成员的群名片,最大不超过50个字节。 |
6 | shutuptime | int | 指定群成员的禁言时间,单位为秒。 |
实现代码如下:
public string modifygroupuser(string groupid, string account, string role,string msgflag,string namecard,int shutuptime)
{
tcacount tca = new tcacount();
//请求地址
string settingurl = "https://console.tim.qq.com/v4/group_open_http_svc/modify_group_member_info?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 role = role == "" ? "" : ", \"role\":\""+role+"\"";
string msgflag = msgflag == "" ? "" : ", \"msgflag\":\"" + msgflag + "\"";
string namecard = namecard == "" ? "" : ", \"namecard\":\"" + namecard + "\"";
string shutuptime = shutuptime == -1 ? "" : ", \"shutuptime\":" + shutuptime + "";
string content = "{\"groupid\":\""+groupid+"\", \"member_account\":\""+account+"\""+role+msgflag+namecard+shutuptime+"}";
settingurl = string.format(settingurl, tca.sdkappid, appadminid, _sig, random);
webservice ws = new webservice();
string resultstr = ws.getresponseresult(settingurl, encoding.utf8, "post", content);
return resultstr;
}
获取被禁言群成员列表
getgroupshuttedlist 方法可获取根据群组 id 获取群组中被禁言的用户列表。其关键属性方法说明如下:
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | groupid | string | 要获取操作的群组 id |
实现代码如下:
public string getgroupshuttedlist(string groupid)
{
tcacount tca = new tcacount();
//请求地址
string settingurl = "https://console.tim.qq.com/v4/group_open_http_svc/get_group_shutted_uin?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 + "\"}";
settingurl = string.format(settingurl, tca.sdkappid, appadminid, _sig, random);
webservice ws = new webservice();
string resultstr = ws.getresponseresult(settingurl, encoding.utf8, "post", content);
return resultstr;
}
解散群组
destorygroup 方法可解散指定id的群组。其关键属性方法说明如下:
序号 | 参数 | 类型 | 说明 |
---|---|---|---|
1 | groupid | string | 要解散的群组id |
实现代码如下:
public string destorygroup(string groupid)
{
arraylist data = new arraylist();
tcacount tca = new tcacount();
//请求地址
string settingurl = "https://console.tim.qq.com/v4/group_open_http_svc/destroy_group?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 + "\"}";
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 提供了非常丰富与完善的管理功能列表,在这里我们仅是以满足自身应用需要而提取的常用帐户管理功能,更多详情请参照如下链接:
本文代码仅供您参考使用,您可以参照官方文档开发出更加贴合自身需求的应用,感谢您的阅读,希望本文能够对您有所帮助。
发表评论