当前位置: 首页 > news >正文

C# 实现腾讯云 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 类进行创建,请参考如下代码:

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

查询账号会话总未读数

GetC2C_UnreadMsgNum方法可以在 IM 应用系统内查询特定账号的单聊总未读数(包含所有的单聊会话)或者单个单聊会话的未读数。其关键属性方法说明如下:

序号参数类型说明
1To_Accountstring要查询的用户 UserID
2Peer_Accountstring[]

要查询的单聊会话对端的用户 UserId

若要查询单个会话的未读数,该字段必填

该数组最大大小为10

注:如果传递null,则表示管理员查询未读的单聊消息的总数。只填 To_Account 即可。

现代码如下:

public string GetC2C_UnreadMsgNum(string To_Account, string[] Peer_Account)
{ArrayList data = new ArrayList();TCAcount tca = new TCAcount();//请求地址string settingUrl = "https://console.tim.qq.com/v4/openim/get_c2c_unread_msg_num?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 peer = "";if (Peer_Account!=null){foreach(string peeraccount in Peer_Account){peer += "\"" + peeraccount + "\",";}if (peer != ""){peer = ",\"Peer_Account\":[" +peer.Substring(0, peer.Length - 1)+"]";}}string content = "{\"To_Account\":\"" + To_Account+"\"" + peer + "}";settingUrl = string.Format(settingUrl, tca.SDKAppId, AppAdminId, _sig, random);WebService ws = new WebService();string resultStr = ws.GetResponseResult(settingUrl, Encoding.UTF8, "POST", content);return resultStr;}

查询单聊会话消息记录

GetRoamMsg 方法使管理员可以在 IM 应用系统内按照时间范围,以会话其中一方的角度查询单聊会话的消息记录。其关键属性方法说明如下:

序号参数类型说明
1From_Accountstring会话其中一方的 UserID,以该 UserID 的角度去查询消息。
2To_Accountstring会话的另一方 UserID
3MaxCntint请求的消息条数
4MinTimestring请求的消息时间范围的最小值(单位:秒)
5MaxTimestring请求的消息时间范围的最大值(单位:秒)
6LastMsgKeystring上一次拉取到的最后一条消息的 MsgKey,续拉时需要填写该字段

现代码如下:

public string GetRoamMsg(string From_Account,string To_Account,int MaxCnt,string MinTime,string MaxTime,string LastMsgKey)
{ArrayList data = new ArrayList();TCAcount tca = new TCAcount("turing");//请求地址string settingUrl = "https://console.tim.qq.com/v4/openim/admin_getroammsg?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 mintime = GetTimeStamp(DateTime.Parse(MinTime));string maxtime = GetTimeStamp(DateTime.Parse(MaxTime));if (LastMsgKey != ""){LastMsgKey = ",\"LastMsgKey\": \"" + LastMsgKey + "\"";}string content = "{\"From_Account\":\"" + From_Account + "\",\"To_Account\":\"" + To_Account + "\",\"MaxCnt\":" + MaxCnt.ToString() + ",\"MinTime\":"+mintime+",\"MaxTime\":"+maxtime+LastMsgKey+"}";settingUrl = string.Format(settingUrl, tca.SDKAppId, AppAdminId, _sig, random);WebService ws = new WebService();string resultStr = ws.GetResponseResult(settingUrl, Encoding.UTF8, "POST", content);return resultStr;
}

下载最近会话记录

get_history 方法可使管理员获取最近7天中某天某小时的所有单发或群组消息记录的下载地址。其关键属性方法说明如下:

序号参数类型说明
1yyyymmddhhstring需要下载的消息记录的时间段(北京时间)。2015120121表示获取2015年12月1日21:00 - 21:59的消息的下载地址。该字段需精确到小时。每次请求只能获取某天某小时的所有单发或群组消息记录
2chattypestring消息类型,C2C 表示单发消息, Group 表示群组消息,默认为"C2C"

实现代码如下:

public string get_history(string yyyymmddhh,string chattype= "C2C")
{ArrayList data = new ArrayList();TCAcount tca = new TCAcount();//请求地址string settingUrl = "https://console.tim.qq.com/v4/open_msg_svc/get_history?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 = "{\"ChatType\":\"" + chattype + "\",\"MsgTime\":\"" + yyyymmddhh + "\"}";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 接口列表 | 腾讯云

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Rust:WIndows 环境下交叉编译 Linux 平台程序
  • UIKit之猜图器Demo
  • aws msk加密方式和问控制连接方式
  • Sql语句DQL操作 查询操作单表 多表 子表(嵌套)
  • html入门
  • ATmega328P加硬件看门狗MAX824L看门狗
  • Oracle23ai新特性case when子句增加多条件判断
  • 【机器学习】机器学习与大型预训练模型的前沿探索:跨模态理解与生成的新纪元
  • 【Kotlin 一】Kotlin入门知识简介、变量声明、数字类型
  • C++—数组
  • 基于DdddOcr通用验证码离线本地识别SDK搭建个人云打码接口Api
  • Volatile的内存语义
  • 基于地理坐标的高阶几何编辑工具算法(4)——线分割面
  • 一周开发一个在线客服系统
  • 实现信号发生控制
  • 230. Kth Smallest Element in a BST
  • extjs4学习之配置
  • JS+CSS实现数字滚动
  • Laravel 菜鸟晋级之路
  • Linux Process Manage
  • oldjun 检测网站的经验
  • PHP 的 SAPI 是个什么东西
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue.js框架原理浅析
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 二维平面内的碰撞检测【一】
  • 工程优化暨babel升级小记
  • 七牛云假注销小指南
  • 入门到放弃node系列之Hello Word篇
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 字符串匹配基础上
  • No resource identifier found for attribute,RxJava之zip操作符
  • 数据库巡检项
  • 昨天1024程序员节,我故意写了个死循环~
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • # Maven错误Error executing Maven
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (力扣)1314.矩阵区域和
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)Java对象在Hibernate持久化层的状态
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (转)shell调试方法
  • (转载)Linux网络编程入门
  • ... 是什么 ?... 有什么用处?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 发展历程和版本迭代
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架