如果在自己程序里集成一个微信qq一样的聊天系统呢?腾讯云即时通讯IM(客户端API【部分】)

本文介绍了如何在程序中集成类似微信QQ的聊天系统,重点讲解了腾讯云即时通讯IM的客户端API,包括SDK API(Web和小程序)中的TIM命名空间、登录相关和消息相关操作。详细阐述了登录流程、消息创建与发送、消息撤回以及消息列表的获取等关键功能。
摘要由CSDN通过智能技术生成

腾讯云即时通讯IM

客户端API

SDK API(Web&小程序)

TIM(命名空间)
方法
  • create()

    let options = {
      SDKAppID: 0 // 接入时需要将0替换为您的云通信应用的 SDKAppID,类型为 Number
    };
    let tim = TIM.create(options); // SDK 实例通常用 tim 表示
    

    如果需要海外通信:配置项oversea:true

常量
  • event:监听处理
    • SDK 进入 ready 状态时触发,接入侧监听此事件,然后可调用 SDK 发送消息等API,使用 SDK 的各项功能

      注意:login 成功才会驱动 SDK 触发 SDK_READY 事件

    let onSdkReady = function(event) {
         
      let message = tim.createTextMessage({
          to: 'user1', conversationType: 'C2C', payload: {
          text: 'Hello world!' }});
      tim.sendMessage(message);
    };
    tim.on(TIM.EVENT.SDK_READY, onSdkReady);
    
    • SDK 进入 not ready 状态时触发,此时接入侧将无法使用 SDK 发送消息等功能。
      如果想恢复使用,接入侧需调用 login 接口,驱动 SDK 进入 ready 状态

      注意:同一账号多端互踢场景下,避免在SDK_NOT_READY中调用tim.login,可能会造成循环互踢的情况

      let onSdkReady = function(event) {
             
        let message = tim.createTextMessage({
              to: 'user1', conversationType: 'C2C', payload: {
              text: 'Hello world!' }});
        tim.sendMessage(message);
      };
      tim.on(TIM.EVENT.SDK_READY, onSdkReady);
      
    • EVENT - Documentation (qcloud.com)

类型常量
  • type:SDK 中的类型常量。为了代码简洁、方便阅读,部分常量使用常见的英文单词缩写描述,具体如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v22dDV0k-1623227429727)(C:\Users\xbxm\AppData\Roaming\Typora\typora-user-images\image-20210605100508228.png)]

  • 判断类型

    // 判断消息类型
    const isTextMessage = message.type === TIM.TYPES.MSG_TEXT // 是否是文本消息类型
    // 判断会话类型
    const isGroupConversation = conversation.type === TIM.TYPES.CONV_GROUP // 是否是群组会话
    
SDK实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2UFRRfnJ-1623227429730)(C:\Users\xbxm\AppData\Roaming\Typora\typora-user-images\image-20210605092717433.png)]

登录相关
  • login

    使用 用户ID(userID) 和 签名串(userSig) 登录即时通信 IM,登录流程有若干个异步执行的步骤,使用返回的 Promise 对象处理登录成功或失败。

    注意1:登录成功,需等待 sdk 处于 ready 状态后(监听事件 TIM.EVENT.SDK_READY)才能调用 sendMessage 等需要鉴权的接口。
    注意2:默认情况下,不支持多实例登录,即如果此帐号已在其他页面登录,若继续在当前页面登录成功,有可能会将其他页面踢下线。用户被踢下线时会触发事件TIM.EVENT.KICKED_OUT,用户可在监听到事件后做相应处理。
    如需支持多实例登录(允许在多个网页中同时登录同一帐号),请到 即时通信 IM 控制台,找到相应 SDKAppID,【应用配置】 > 【功能配置】> 【Web端实例同时在线】配置实例个数。配置将在50分钟内生效。

    let promise = tim.login({
          userID: 'your userID', userSig: 'your userSig'});
    promise.then(function(imResponse) {
          
      console.log(imResponse.data); // 登录成功
      if (imResponse.data.repeatLogin === true) {
          
        // 标识账号已登录,本次登录操作为重复登录。v2.5.1 起支持
        console.log(imResponse.data.errorInfo);
      }
    }).catch(function(imError) {
          
      console.warn('login error:', imError); // 登录失败的相关信息
    });
    
  • logout

    登出即时通信 IM,通常在切换帐号的时候调用,清除登录态以及内存中的所有数据。
    注意!

  1. 调用此接口的实例会发布 SDK_NOT_READY 事件,此时该实例下线,无法收、发消息。
  2. 如果您在即时通信 IM 控制台配置的“Web端实例同时在线个数”大于 1,且同一账号登录了a1a2两个实例(含小程序端),当执行a1.logout()后,a1会下线,无法收、发消息。而a2实例不会受影响。
  3. 多实例被踢:基于第 2 点,如果“Web端实例同时在线个数”配置为 2,且您的某一账号已经登录了 a1a2两个实例,当使用此账号成功登录第三个实例a3时,a1a2中的一个实例会被踢下线(通常是最先处在登录态的实例会触发),这种情况称之为**“多实例被踢”**。假设a1实例被踢下线,a1实例内部会执行登出流程,然后抛出KICKED_OUT事件,接入侧可以监听此事件,并在触发时跳转到登录页。此时a1实例下线,而a2a3实例可以正常运行。
let promise = tim.logout();
promise.then(function(imResponse) {
   
  console.log(imResponse.data); // 登出成功
}).catch(function(imError) {
   
  console.warn('logout error:', imError);
});
消息相关
  • createTextMessage(创建文本消息)

    创建文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息。

    // 发送文本消息,Web 端与小程序端相同
    // 1. 创建消息实例,接口返回的实例可以上屏
    let message = tim.createTextMessage({
         
      to: 'user1',
      conversationType: TIM.TYPES.CONV_C2C,
      // 消息优先级,用于群聊(v2.4.2起支持)。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息,详细请参考:https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6)
      // 支持的枚举值:TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL(默认), TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST
      // priority: TIM.TYPES.MSG_PRIORITY_NORMAL,
      payload: {
         
        text: 'Hello world!'
      },
      // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到,v2.10.2起支持)
      // cloudCustomData: 'your cloud custom data'
    });
    // 2. 发送消息
    let promise = tim.sendMessage(message);
    promise.then(function(imResponse) {
         
      // 发送成功
      console.log(imResponse);
    }).catch(function(imError) {
         
      // 发送失败
      console.warn('sendMessage error:', imError);
    });
    
  • createTextAtMessage(创建图片消息)

    创建图片消息的接口,此接口返回一个消息实例,可以在需要发送图片消息时调用 发送消息 接口发送消息。

    注意:v2.3.1版本开始支持传入 File 对象,使用前需要将SDK升级至v2.3.1或更高版本。

    // Web 端发送图片消息示例1 - 传入 DOM 节点
    // 1. 创建消息实例,接口返回的实例可以上屏
    let message = tim.createImageMessage({
         
      to: 'user1',
      conversationType: 
功能说明 1、可以对微信好友分类分组,比如分成客户组,员工组,可针对好友分组群发微信。 2、可以设置聊天机器人,让你的个人微信拥有自动根据预设关键字回复客户,跟据这功能可制成菜单型式的回复,使你的个人微信也具有微信公众号的功能,还不受众号那样的发信息限制。 3、集成微信接口,具有获取好友列表及接收和发送微信功能,让你非常方便的集成到企业的OA办公系统、订单状态监控、服务器运行状态监控等。 使用说明: 1、请用手机微信扫描右边二维码登录系统(如不显示二维码,请“刷新页面”)。 2、本系统所有操作都是通过模拟控制网页实现,请不要直接操作右边的“微信网页版”,以免影响本软件的正常操作。 3、建议一个注册账号只对应一个微信账号,否则历史信息会混乱。 4、本软件免费用户信息带尾巴,批量发送每次限制10条,超过部分被忽略(用户可分多批发),使用时间不限制。 5、本软件付费会员不受以上第4条限制,会员时间到期后自动转成免费用户。 ***微信接口命令说明*** ****************************************** islogin 确定服务或微信是否登录 返内容如下几种: 1)"已登录" 表示都已经登录 2)"客服和微信都未登录" 3)"客服未登录' 4)"微信未登录" Url示例:http://127.0.0.1:8081/islogin ****************************************** logincode 取得登录二维码图片,以便远程手机扫描登录 如果返回非图片,表示出错或返回"微信已登录"这几字 网页中显示图示例: ****************************************** list 获取客户列表 以Xml文本格式返回列表 开发者可以直接转为DataTable,C#代码示例如下: WebClient webc = new WebClient(); string xmltxt=webc.DownloadString("http://127.0.0.1:8081/list"); DataTable dt=XmlTxtToDataTable(xmltxt); private DataTable XmlTxtToDataTable(string XmlTxt) {//Xml文本转DataTable XmlDocument doc = new XmlDocument(); doc.LoadXml(XmlTxt); XmlNodeReader xnr = new XmlNodeReader(doc); DataSet ds = new DataSet(); ds.ReadXml(xnr); DataTable dt = ds.Tables[0]; return dt; } ****************************************** getimg 取得客户图标 参数 uname=客户名(必选) (用list获取到的客户名) 如果返回非图片,表示出错或返回"客户名为空或找不到。"等字符 网页中显示图示例: ****************************************** send 发送信息 参数 uname=目标客户名(必选) (用list获取到的客户名) msg=信息内容(必选) time=定时发送时间(可选),格式:"yyyy-MM-dd HH:mm:ss" msid=调用者定的信息ID(可选,是大于0数字才有效),用于在sendend判断发送结果 返回以下情况 1)"ok"表示成功加入到发送队列(不是已发成功),是否成功要用sendend命令根据"信息ID"查 2)返回其它信息表示出错信息 GET提交示例:http://127.0.0.1:8081/send?uname=客户名&msg=信息内容&time=2016-03-15 15:20:00&msid=3 ****************************************** sendend 判断发送结果 参数 msid=调用者在发送时定的信息ID 返回以下情况 "ok"=发送成功 "err"=发送出错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值