TIMConversationManager.h 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087
  1. // Copyright (c) 2023 Tencent. All rights reserved.
  2. #ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CONVERSATION_MANAGER_H_
  3. #define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CONVERSATION_MANAGER_H_
  4. #include "TIMCloudDef.h"
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. // 模块简介
  9. // - 会话接口,包含了会话的获取,删除,更新等功能
  10. // - 会话(Conversation)的类型:
  11. // (1) C2C 会话,表示单聊情况自己与对方建立的对话,读取消息和发送消息都是通过会话完成
  12. // (2) Group 会话,表示群聊情况下,群内成员组成的会话,群会话内发送消息群成员都可接收到
  13. //
  14. // 模块参数说明
  15. // - API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
  16. // - 如果参数中包含非英文字符,请使用 UTF-8 编码
  17. //
  18. // 模块回调说明
  19. // 1. 回调的类型:
  20. // - 调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
  21. // - 调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
  22. // 2. 回调触发的线程:
  23. // - 对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时,SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
  24. // - 对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时,SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
  25. // - 对于 iOS 和 MAC 平台,SDK 默认将所有回调抛到主线程
  26. // - 对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
  27. /////////////////////////////////////////////////////////////////////////////////
  28. //
  29. // 一. 会话相关配置选项定义
  30. //
  31. /////////////////////////////////////////////////////////////////////////////////
  32. // 1.1 会话事件类型
  33. enum TIMConvEvent {
  34. // 会话新增,例如收到一条新消息,产生一个新的会话是事件触发
  35. kTIMConvEvent_Add,
  36. // 会话删除,例如自己删除某会话时会触发
  37. kTIMConvEvent_Del,
  38. // 会话更新,会话内消息的未读计数变化和收到新消息时触发
  39. kTIMConvEvent_Update,
  40. // 会话开始
  41. kTIMConvEvent_Start,
  42. // 会话结束
  43. kTIMConvEvent_Finish,
  44. };
  45. // 1.2 会话标记类型
  46. enum TIMConversationMarkType {
  47. // 会话标星
  48. kTIMConversationMarkTypeStar = 0x1,
  49. // 会话标记未读(重要会话)
  50. kTIMConversationMarkTypeUnread = 0x1 << 1,
  51. // 会话折叠
  52. kTIMConversationMarkTypeFold = 0x1 << 2,
  53. // 会话隐藏
  54. kTIMConversationMarkTypeHide = 0x1 << 3,
  55. };
  56. // 1.3 群 @ 类型
  57. enum TIMGroupAtType {
  58. // @ 我
  59. kTIMGroup_At_Me = 1,
  60. // @ 群里所有人
  61. kTIMGroup_At_All,
  62. // @ 群里所有人并且单独 @ 我
  63. kTIMGroup_At_All_At_ME,
  64. };
  65. /////////////////////////////////////////////////////////////////////////////////
  66. //
  67. // 二. 会话事件及会话未读数相关回调定义
  68. //
  69. /////////////////////////////////////////////////////////////////////////////////
  70. /**
  71. * 2.1 会话事件回调
  72. *
  73. * @param conv_event 会话事件类型, 请参考 @ref TIMConvEvent
  74. * @param json_conv_array 会话信息列表
  75. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  76. *
  77. * __会话事件回调数据解析示例__
  78. * @code{.cpp}
  79. * void ConvEventCallback(TIMConvEvent conv_event, const char* json_conv_array, const void* user_data) {
  80. * Json::Reader reader;
  81. * Json::Value json_value;
  82. * if (conv_event == kTIMConvEvent_Start) {
  83. * // json_conv_array 为空字符串
  84. * } else if(conv_event == kTIMConvEvent_Finish) {
  85. * // json_conv_array 为空字符串
  86. * }
  87. * if (!reader.parse(json_conv_array, json_value)) {
  88. * // Json 解析失败
  89. * return;
  90. * }
  91. * for (Json::ArrayIndex i = 0; i < json_value.size(); i++) { // 遍历会话类别
  92. * Json::Value& convinfo = json_value[i];
  93. * // 区分会话事件类型
  94. * if (conv_event == kTIMConvEvent_Add) {
  95. *
  96. * }
  97. * else if (conv_event == kTIMConvEvent_Del) {
  98. *
  99. * }
  100. * }
  101. * @endcode
  102. *
  103. * __json_conv_array 示例 (Json Key 请参考 @ref ConvInfo)__
  104. * @code{.json}
  105. * [{
  106. * "conv_active_time": 4611686018427387909,
  107. * "conv_id": "98826",
  108. * "conv_is_has_draft": false,
  109. * "conv_is_has_lastmsg": true,
  110. * "conv_is_pinned": true,
  111. * "conv_last_msg": {
  112. * "message_client_time": 1620877708,
  113. * "message_conv_id": "98826",
  114. * "message_conv_type": 1,
  115. * "message_custom_int": 0,
  116. * "message_custom_str": "",
  117. * "message_elem_array": [{
  118. * "elem_type": 0,
  119. * "text_elem_content": "11111"
  120. * }],
  121. * "message_is_from_self": false,
  122. * "message_is_online_msg": false,
  123. * "message_is_peer_read": false,
  124. * "message_is_read": false,
  125. * "message_msg_id": "144115233874815003-1620877708-1038050731",
  126. * "message_platform": 0,
  127. * "message_priority": 1,
  128. * "message_rand": 1038050731,
  129. * "message_sender": "98826",
  130. * "message_sender_profile": {
  131. * "user_profile_add_permission": 1,
  132. * "user_profile_birthday": 0,
  133. * "user_profile_custom_string_array": [],
  134. * "user_profile_face_url": "test1-www.google.com",
  135. * "user_profile_gender": 0,
  136. * "user_profile_identifier": "98826",
  137. * "user_profile_language": 0,
  138. * "user_profile_level": 0,
  139. * "user_profile_location": "",
  140. * "user_profile_nick_name": "test change8888",
  141. * "user_profile_role": 0,
  142. * "user_profile_self_signature": ""
  143. * },
  144. * "message_seq": 15840,
  145. * "message_server_time": 1620877708,
  146. * "message_status": 2,
  147. * "message_unique_id": 6961616747713488299
  148. * },
  149. * "conv_type": 1,
  150. * "conv_unread_num": 1
  151. * }]
  152. * @endcode
  153. */
  154. typedef void (*TIMConvEventCallback)(enum TIMConvEvent conv_event, const char* json_conv_array, const void* user_data);
  155. /**
  156. * 2.2 会话未读消息总数变化
  157. *
  158. * @param total_unread_count 未读的消息总数
  159. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  160. */
  161. typedef void (*TIMConvTotalUnreadMessageCountChangedCallback)(int total_unread_count, const void* user_data);
  162. /**
  163. * 2.3 按会话 filter 过滤的未读消息总数变化
  164. *
  165. * @param filter 获取未读总数的 filter, Json Key 请参考 @ref TIMConversationListFilter
  166. * @param total_unread_count 未读的消息总数
  167. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  168. */
  169. typedef void (*TIMConvTotalUnreadMessageCountChangedByFilterCallback)(const char* filter, int total_unread_count, const void* user_data);
  170. /////////////////////////////////////////////////////////////////////////////////
  171. //
  172. // 三. 会话分组相关回调定义
  173. //
  174. /////////////////////////////////////////////////////////////////////////////////
  175. /**
  176. * 3.1 会话分组被创建
  177. *
  178. * @param group_name 分组名
  179. * @param conversation_array 会话列表
  180. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  181. */
  182. typedef void (*TIMConvConversationGroupCreatedCallback)(const char* group_name, const char* conversation_array, const void* user_data);
  183. /**
  184. * 3.2 会话分组被删除
  185. *
  186. * @param group_name 分组名
  187. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  188. */
  189. typedef void (*TIMConvConversationGroupDeletedCallback)(const char* group_name, const void* user_data);
  190. /**
  191. * 3.3 会话分组名变更
  192. *
  193. * @param old_name 分组名
  194. * @param new_name 分组名
  195. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  196. */
  197. typedef void (*TIMConvConversationGroupNameChangedCallback)(const char* old_name, const char* new_name, const void* user_data);
  198. /**
  199. * 3.4 会话分组新增会话
  200. *
  201. * @param group_name 分组名
  202. * @param conversation_array 会话列表
  203. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  204. */
  205. typedef void (*TIMConvConversationsAddedToGroupCallback)(const char* group_name, const char* conversation_array, const void* user_data);
  206. /**
  207. * 3.5 会话分组删除会话
  208. *
  209. * @param group_name 分组名
  210. * @param conversation_array 会话列表
  211. * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
  212. *
  213. * @note
  214. * - reason 表示会话从所在分组删除的原因,其取值有:
  215. * - 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发
  216. * - 当 reason 为 1 时,表示添加到分组的会话数量超过 1000,最早添加进分组的会话被淘汰
  217. */
  218. typedef void (*TIMConvConversationsDeletedFromGroupCallback)(const char* group_name, const char* conversation_array, uint32_t reason, const void* user_data);
  219. /////////////////////////////////////////////////////////////////////////////////
  220. //
  221. // 四. 注册会话事件及未读数相关回调 API
  222. //
  223. /////////////////////////////////////////////////////////////////////////////////
  224. /**
  225. * 4.1 设置会话事件回调
  226. *
  227. * @param cb 会话事件回调,请参考 @ref TIMConvEventCallback
  228. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  229. *
  230. * @note
  231. * 会话事件包括:
  232. * - 会话新增
  233. * - 会话删除
  234. * - 会话更新
  235. * - 会话开始
  236. * - 会话结束
  237. * 任何产生一个新会话的操作都会触发会话新增事件,例如调用接口 @ref TIMConvCreate 创建会话,接收到未知会话的第一条消息等。
  238. * 任何已有会话变化的操作都会触发会话更新事件,例如收到会话新消息,消息撤回,已读上报等。
  239. * 调用接口 @ref TIMConvDelete 删除会话成功时会触发会话删除事件。
  240. */
  241. TIM_API void TIMSetConvEventCallback(TIMConvEventCallback cb, const void* user_data);
  242. /**
  243. * 4.2 设置全部会话未读消息总数变更的回调
  244. *
  245. * @param cb 会话未读消息总数变更的回调,请参考 @ref TIMConvTotalUnreadMessageCountChangedCallback
  246. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  247. *
  248. * @note
  249. * - 当您调用 @ref TIMConvGetTotalUnreadMessageCount 获取全部会话未读总数以后,任意会话的未读数发生变化时,SDK 都会通过该回调把最新的未读总数通知给您。
  250. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 kTIMRecvMsgOpt_Not_Receive 或 kTIMRecvMsgOpt_Not_Notify 或 kTIMRecvMsgOpt_Not_Notify_Except_At 的会话。
  251. */
  252. TIM_API void TIMSetConvTotalUnreadMessageCountChangedCallback(TIMConvTotalUnreadMessageCountChangedCallback cb, const void* user_data);
  253. /**
  254. * 4.3 设置按会话 filter 过滤的未读消息总数变更的回调
  255. *
  256. * @param cb 按会话 filter 过滤的未读消息总数变更的回调,请参考 @ref TIMConvTotalUnreadMessageCountChangedByFilterCallback
  257. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  258. *
  259. * @note
  260. * - 您可以调用 @ref TIMConvSubscribeUnreadMessageCountByFilter 注册监听指定 filter 下的未读总数变化,SDK 通过这个回调把最新的未读总数通知给您。
  261. * - 您可以注册监听多个不同 filter 下的未读总数变更,这个回调的 filter 参数就是注册监听时指定的 filter,该 filter 携带了 kTIMConversationListFilterConvType、kTIMConversationListFilterMarkType、kTIMConversationListFilterGroupName 三个字段,通过判断这三字段是不是都相同,来区分出不同的 filter。
  262. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 kTIMRecvMsgOpt_Not_Receive 或 kTIMRecvMsgOpt_Not_Notify 或 kTIMRecvMsgOpt_Not_Notify_Except_At 的会话。
  263. */
  264. TIM_API void TIMSetConvUnreadMessageCountChangedByFilterCallback(TIMConvTotalUnreadMessageCountChangedByFilterCallback cb, const void* user_data);
  265. /////////////////////////////////////////////////////////////////////////////////
  266. //
  267. // 五. 注册会话分组相关回调
  268. //
  269. /////////////////////////////////////////////////////////////////////////////////
  270. /**
  271. * 5.1 设置会话分组被创建回调
  272. *
  273. * @param cb 会话未读消息总数变更的回调,请参考 @ref TIMConvConversationGroupCreatedCallback
  274. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  275. */
  276. TIM_API void TIMSetConvConversationGroupCreatedCallback(TIMConvConversationGroupCreatedCallback cb, const void* user_data);
  277. /**
  278. * 5.2 设置会话分组被删除的回调
  279. *
  280. * @param cb 会话分组被删除的回调,请参考 @ref TIMConvConversationGroupDeletedCallback
  281. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  282. */
  283. TIM_API void TIMSetConvConversationGroupDeletedCallback(TIMConvConversationGroupDeletedCallback cb, const void* user_data);
  284. /**
  285. * 5.3 设置会话分组命名变更回调
  286. *
  287. * @param cb 会话分组命名变更回调,请参考 @ref TIMConvConversationGroupNameChangedCallback
  288. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  289. */
  290. TIM_API void TIMSetConvConversationGroupNameChangedCallback(TIMConvConversationGroupNameChangedCallback cb, const void* user_data);
  291. /**
  292. * 5.4 设置会话分组新增会话的回调
  293. *
  294. * @param cb 会话分组新增会话的回调,请参考 @ref TIMConvConversationsAddedToGroupCallback
  295. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  296. */
  297. TIM_API void TIMSetConvConversationsAddedToGroupCallback(TIMConvConversationsAddedToGroupCallback cb, const void* user_data);
  298. /**
  299. * 5.5 设置会话分组删除会话的回调
  300. *
  301. * @param cb 会话分组删除会话的回调,请参考 @ref TIMConvConversationsDeletedFromGroupCallback
  302. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  303. */
  304. TIM_API void TIMSetConvConversationsDeletedFromGroupCallback(TIMConvConversationsDeletedFromGroupCallback cb, const void* user_data);
  305. /////////////////////////////////////////////////////////////////////////////////
  306. //
  307. // 六. 会话基础 API
  308. //
  309. /////////////////////////////////////////////////////////////////////////////////
  310. /**
  311. * 6.1 获取会话列表
  312. *
  313. * @param cb 获取会话列表的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  314. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  315. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  316. */
  317. TIM_API int TIMConvGetConvList(TIMCommCallback cb, const void* user_data);
  318. /**
  319. * 6.2 查询一组会话列表
  320. *
  321. * @param json_get_conv_list_param 会话 ID 和会话类型的列表, Json Key 请参考 @ref GetConversationListParam
  322. * @param cb 会话列表的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  323. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  324. * @return int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  325. *
  326. * __示例__
  327. * @code{.cpp}
  328. * Json::Object json_obj;
  329. * json_obj[kTIMGetConversationListParamConvId] = "98826";
  330. * json_obj[kTIMGetConversationListParamConvType] = kTIMConv_C2C;
  331. *
  332. * Json::Array json_array;
  333. * json_array.append(json_obj);
  334. *
  335. * TIMConvGetConvInfo(json_array.toStyledString().c_str(),
  336. * [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  337. * printf("TIMConvGetConvInfo|code:%d|desc:%s\n", code, desc);
  338. * }, nullptr);
  339. * @endcode
  340. *
  341. * __回调中的 json_param 示例 (Json Key 请参考 @ref ConvInfo)__
  342. * @code{.json}
  343. * [{
  344. * "conv_active_time": 5,
  345. * "conv_id": "98826",
  346. * "conv_is_has_draft": false,
  347. * "conv_is_has_lastmsg": true,
  348. * "conv_is_pinned": false,
  349. * "conv_last_msg": {
  350. * "message_client_time": 1620877708,
  351. * "message_conv_id": "98826",
  352. * "message_conv_type": 1,
  353. * "message_custom_int": 0,
  354. * "message_custom_str": "",
  355. * "message_elem_array": [{
  356. * "elem_type": 0,
  357. * "text_elem_content": "11111"
  358. * }],
  359. * "message_is_from_self": false,
  360. * "message_is_online_msg": false,
  361. * "message_is_peer_read": false,
  362. * "message_is_read": false,
  363. * "message_msg_id": "144115233874815003-1620877708-1038050731",
  364. * "message_platform": 0,
  365. * "message_priority": 1,
  366. * "message_rand": 1038050731,
  367. * "message_sender": "98826",
  368. * "message_sender_profile": {
  369. * "user_profile_add_permission": 1,
  370. * "user_profile_birthday": 0,
  371. * "user_profile_custom_string_array": [],
  372. * "user_profile_face_url": "test1-www.google.com",
  373. * "user_profile_gender": 0,
  374. * "user_profile_identifier": "98826",
  375. * "user_profile_language": 0,
  376. * "user_profile_level": 0,
  377. * "user_profile_location": "",
  378. * "user_profile_nick_name": "test change8888",
  379. * "user_profile_role": 0,
  380. * "user_profile_self_signature": ""
  381. },
  382. * "message_seq": 15840,
  383. * "message_server_time": 1620877708,
  384. * "message_status": 2,
  385. * "message_unique_id": 6961616747713488299
  386. * },
  387. * "conv_type": 1,
  388. * "conv_unread_num": 1
  389. * }]
  390. * @endcode
  391. */
  392. TIM_API int TIMConvGetConvInfo(const char* json_get_conv_list_param, TIMCommCallback cb, const void* user_data);
  393. /**
  394. * 6.3 获取会话列表高级接口(从 6.5 版本开始支持)
  395. *
  396. * @param filter 获取会话列表高级接口的 filter, Json Key 请参考 @ref TIMConversationListFilter
  397. * @param next_seq 分页拉取的游标
  398. * @param count 分页拉取的个数
  399. * @param cb 获取会话列表高级接口的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  400. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  401. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  402. *
  403. * __示例__
  404. * @code{.cpp}
  405. * json::Object filter;
  406. * filter[kTIMConversationListFilterConvType] = kTIMConv_Group;
  407. * filter[kTIMConversationListFilterMarkType] = kTIMConversationMarkTypeStar;
  408. * filter[kTIMConversationListFilterConversationGroup] = "my_group_name";
  409. * filter[kTIMConversationListFilterHasUnreadCount] = true;
  410. * filter[kTIMConversationListFilterHasGroupAtInfo] = true;
  411. *
  412. * TIMConvGetConversationListByFilter(json::Serialize(filter).c_str(), 0, 20, [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  413. * printf("TIMConvGetConversationListByFilter code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  414. *
  415. * // 读取 json_param 存放的结果
  416. * json::Value json = json::Deserialize(json_param);
  417. * // json[TIMConversationListResultConvList] 读取到 ConvInfo 列表
  418. * uint64_t next_seq = json[TIMConversationListResultNextSeq].ToUInt64();
  419. * bool is_finished = json[TIMConversationListResultIsFinished].ToBool();
  420. * if (!is_finished) {
  421. * // 继续调用 TIMConvGetConversationListByFilter 获取下一页,filter 参数的字段填写如下所示
  422. * // json::Object filter;
  423. * // filter[kTIMConversationListFilterConvType] = kTIMConv_Group;
  424. * // filter[kTIMConversationListFilterMarkType] = kTIMConversationMarkTypeStar;
  425. * // filter[kTIMConversationListFilterConversationGroup] = "my_group_name";
  426. * // filter[kTIMConversationListFilterHasUnreadCount] = true;
  427. * // filter[kTIMConversationListFilterHasGroupAtInfo] = true;
  428. * }
  429. * }, nullptr);
  430. * @endcode
  431. */
  432. TIM_API int TIMConvGetConversationListByFilter(const char* filter, uint64_t next_seq, uint32_t count, TIMCommCallback cb, const void* user_data);
  433. /**
  434. * 6.4 删除会话以及该会话中的历史消息
  435. *
  436. * @param conv_id 会话的ID
  437. * @param conv_type 会话类型,请参考 @ref TIMConvType
  438. * @param cb 删除会话成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
  439. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  440. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  441. *
  442. * @note
  443. * 此接口用于删除会话(该会话以及会话中的历史消息,会被 SDK 从本地和服务端一同删除掉,并且不可恢复),删除会话是否成功的结果会通过会话事件回调返回。
  444. */
  445. TIM_API int TIMConvDelete(const char* conv_id, enum TIMConvType conv_type, TIMCommCallback cb, const void* user_data);
  446. /**
  447. * 6.5 删除会话列表(从 7.1 版本开始支持)
  448. *
  449. * @param conversation_id_array 会话 ID 列表
  450. * @param clear_message 是否删除会话中的消息;设置为 false 时,保留会话消息;设置为 true 时,本地和服务器的消息会一起删除,并且不可恢复
  451. * @param cb 删除会话列表的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  452. * @param user_data 用户自定义数据,ImSDK 只负责传回给回调函数 cb,不做任何处理
  453. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  454. *
  455. * @note 每次最多支持删除 100 个会话
  456. *
  457. * __示例(回调结果中 json_param 使用的 Json Key 请参考 @ref TIMConversationOperationResult)__
  458. * @code{.cpp}
  459. * json::Array conversation_id_array;
  460. * conversation_id_array.push_back("c2c_conversation_id1");
  461. * conversation_id_array.push_back("group_conversation_id2");
  462. *
  463. * bool clear_message = true;
  464. *
  465. * TIMConvDeleteConversationList(json::Serialize(conversation_id_array).c_str(), clear_message, [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  466. * printf("TIMConvDeleteConversationList code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  467. *
  468. * // 遍历读取 json_param 存放的操作结果,参见 TIMConversationOperationResult 的定义
  469. * }, nullptr);
  470. * @endcode
  471. */
  472. TIM_API int TIMConvDeleteConversationList(const char* conversation_id_array, bool clear_message, TIMCommCallback cb, const void* user_data);
  473. /**
  474. * 6.6 设置指定会话的草稿
  475. *
  476. * @param conv_id 会话的ID
  477. * @param conv_type 会话类型,请参考 @ref TIMConvType
  478. * @param json_draft_param 被设置的草稿 Json 字符串, Json Key 请参考 @ref Draft
  479. * @return int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  480. *
  481. * @note
  482. * 会话草稿一般用在保存用户当前输入的未发送的消息
  483. *
  484. * __示例__
  485. * @code{.cpp}
  486. * Json::Value json_value_text; // 构造消息
  487. * json_value_text[kTIMElemType] = kTIMElem_Text;
  488. * json_value_text[kTIMTextElemContent] = "this draft";
  489. * Json::Value json_value_msg;
  490. * json_value_msg[kTIMMsgElemArray].append(json_value_text);
  491. *
  492. * Json::Value json_value_draft; // 构造草稿
  493. * json_value_draft[kTIMDraftEditTime] = time(NULL);
  494. * json_value_draft[kTIMDraftUserDefine] = "this is userdefine";
  495. * json_value_draft[kTIMDraftMsg] = json_value_msg;
  496. *
  497. * if (TIM_SUCC != TIMConvSetDraft(userid.c_str(), TIMConvType::kTIMConv_C2C, json_value_draft.toStyledString().c_str())) {
  498. * // TIMConvSetDraft 接口调用失败
  499. * }
  500. *
  501. * // json_value_draft.toStyledString().c_str() 得到 json_draft_param JSON 字符串如下
  502. * {
  503. * "draft_edit_time" : 1551271429,
  504. * "draft_msg" : {
  505. * "message_elem_array" : [
  506. * {
  507. * "elem_type" : 0,
  508. * "text_elem_content" : "this draft"
  509. * }
  510. * ]
  511. * },
  512. * "draft_user_define" : "this is userdefine"
  513. * }
  514. * @endcode
  515. */
  516. TIM_API int TIMConvSetDraft(const char* conv_id, enum TIMConvType conv_type, const char* json_draft_param);
  517. /**
  518. * 6.7 删除指定会话的草稿
  519. *
  520. * @param conv_id 会话的ID
  521. * @param conv_type 会话类型,请参考 @ref TIMConvType
  522. * @return int 返回TIM_SUCC表示接口调用成功,其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  523. */
  524. TIM_API int TIMConvCancelDraft(const char* conv_id, enum TIMConvType conv_type);
  525. /**
  526. * 6.8 设置会话自定义数据(从 6.5 版本开始支持)
  527. *
  528. * @param conversation_id_array 会话 ID 列表
  529. * @param custom_data 自定义数据,最大支持 256 bytes
  530. * @param cb 设置会话自定义字段的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  531. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  532. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  533. *
  534. * __示例(回调结果中 json_param 使用的 Json Key 请参考 @ref TIMConversationOperationResult)__
  535. * @code{.cpp}
  536. * json::Array conversation_id_array;
  537. * conversation_id_array.push_back("c2c_conversation_id1");
  538. * conversation_id_array.push_back("group_conversation_id2");
  539. *
  540. * std::string custom_data = "my_custom_data";
  541. *
  542. * TIMConvSetConversationCustomData(json::Serialize(conversation_id_array).c_str(), custom_data.c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  543. * printf("TIMConvSetConversationCustomData code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  544. *
  545. * // 遍历读取 json_param 存放的操作结果,参见 TIMConversationOperationResult 的定义
  546. * }, nullptr);
  547. * @endcode
  548. */
  549. TIM_API int TIMConvSetConversationCustomData(const char* conversation_id_array, const char* custom_data, TIMCommCallback cb, const void* user_data);
  550. /**
  551. * 6.9 设置会话置顶
  552. *
  553. * @param conv_id 会话 ID
  554. * @param conv_type 会话类型,请参考 @ref TIMConvType
  555. * @param is_pinned 是否置顶会话
  556. * @param cb 设置会话置顶回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  557. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  558. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  559. *
  560. * __示例__
  561. * @code{.cpp}
  562. * // json_param 返回值为空字符串, 直接判断 code 即可
  563. * TIMConvPinConversation(conv_id, conv_type, true,
  564. * [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  565. * printf("TIMConvPinConversation|code:%d|desc:%s\n", code, desc);
  566. * }, nullptr);
  567. * @endcode
  568. */
  569. TIM_API int TIMConvPinConversation(const char* conv_id, enum TIMConvType conv_type, bool is_pinned, TIMCommCallback cb, const void* user_data);
  570. /**
  571. * 6.10 标记会话(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  572. *
  573. * @param conversation_id_array 会话 ID 列表
  574. * @param mark_type 会话标记类型,取值详见 @ref TIMConversationMarkType
  575. * @param enable_mark true:设置标记 false:取消标记
  576. * @param cb 标记会话的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  577. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  578. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  579. *
  580. * 如果已有标记不能满足您的需求,您可以自定义扩展标记,扩展标记需要满足以下两个条件:
  581. * 1、扩展标记值不能和 @ref TIMConversationMarkType 已有的标记值冲突
  582. * 2、扩展标记值必须是 0x1LL << n 的位移值(32 <= n < 64,即 n 必须大于等于 32 并且小于 64),比如扩展标记值 0x1LL << 32 表示 "Windows 在线"
  583. *
  584. * @note
  585. * 扩展标记值不能设置为 0x1 << 32,要设置为 0x1LL << 32,明确告诉编译器是 64 位的整型常量。
  586. *
  587. * __示例(回调结果中 json_param 使用的 Json Key 请参考 @ref TIMConversationOperationResult)__
  588. * @code{.cpp}
  589. * json::Array conversation_id_array;
  590. * conversation_id_array.push_back("c2c_conversation_id1");
  591. * conversation_id_array.push_back("group_conversation_id2");
  592. *
  593. * uint64_t mark_type = (uint64_t)kTIMConversationMarkTypeUnread | (0x1LL << 32);
  594. * bool enable_mark = true;
  595. *
  596. * TIMConvMarkConversation(json::Serialize(conversation_id_array).c_str(), mark_type, enable_mark, [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  597. * printf("TIMConvMarkConversation code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  598. *
  599. * // 遍历读取 json_param 存放的操作结果,参见 TIMConversationOperationResult 的定义
  600. * }, nullptr);
  601. * @endcode
  602. */
  603. TIM_API int TIMConvMarkConversation(const char* conversation_id_array, uint64_t mark_type, bool enable_mark, TIMCommCallback cb, const void* user_data);
  604. /**
  605. * 6.11 获取所有会话总的未读消息数
  606. *
  607. * @param cb 获取所有会话总的未读消息数回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  608. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  609. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  610. *
  611. * @note
  612. * - 调用该接口以后,任意会话的未读数发生变化时,SDK 都会给您抛 @ref TIMSetConvTotalUnreadMessageCountChangedCallback 回调。
  613. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 kTIMRecvMsgOpt_Not_Receive 或 kTIMRecvMsgOpt_Not_Notify 或 kTIMRecvMsgOpt_Not_Notify_Except_At 的会话。
  614. *
  615. * __示例 (回调结果中 json_param 使用的 Json Key 请参考 @ref GetTotalUnreadNumberResult)__
  616. * @code{.cpp}
  617. * TIMConvGetTotalUnreadMessageCount(
  618. * [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  619. * // json key 请参考 GetTotalUnreadNumberResult
  620. * printf("TIMConvGetTotalUnreadMessageCount|code:%d|desc:%s|json_param:%s\n", code, desc, json_param);
  621. * }, nullptr);
  622. * @endcode
  623. */
  624. TIM_API int TIMConvGetTotalUnreadMessageCount(TIMCommCallback cb, const void* user_data);
  625. /**
  626. * 6.12 根据 filter 获取未读总数(7.0 及以上版本支持)
  627. *
  628. * @param filter 会话 filter, Json Key 请参考 @ref TIMConversationListFilter
  629. * @param cb 获取未读总数的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  630. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  631. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  632. *
  633. * @note
  634. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 kTIMRecvMsgOpt_Not_Receive 或 kTIMRecvMsgOpt_Not_Notify 或 kTIMRecvMsgOpt_Not_Notify_Except_At 的会话。
  635. *
  636. * __示例 (回调结果中 json_param 使用的 Json Key 请参考 @ref GetTotalUnreadNumberResult)__
  637. * @code{.cpp}
  638. * json::Object filter;
  639. * filter[kTIMConversationListFilterConvType] = kTIMConv_Group;
  640. * filter[kTIMConversationListFilterConversationGroup] = "my_group_name";
  641. * filter[kTIMConversationListFilterMarkType] = kTIMConversationMarkTypeStar;
  642. * filter[kTIMConversationListFilterHasUnreadCount] = true;
  643. * filter[kTIMConversationListFilterHasGroupAtInfo] = true;
  644. *
  645. * TIMConvGetUnreadMessageCountByFilter(json::Serialize(filter).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  646. * // json key 请参考 GetTotalUnreadNumberResult
  647. * printf("TIMConvGetTotalUnreadMessageCount|code:%d|desc:%s|json_param:%s\n", code, desc, json_param);
  648. * }, nullptr);
  649. * @endcode
  650. */
  651. TIM_API int TIMConvGetUnreadMessageCountByFilter(const char* filter, TIMCommCallback cb, const void* user_data);
  652. /**
  653. * 6.13 注册监听指定 filter 的会话未读总数变化(7.0 及以上版本支持)
  654. *
  655. * @param filter 会话 filter, Json Key 请参考 @ref TIMConversationListFilter
  656. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  657. *
  658. * @note
  659. * - 当您调用这个接口以后,该 filter 下的未读数发生变化时,SDK 会给您抛 @ref TIMSetConvUnreadMessageCountChangedByFilterCallback 注册的回调。
  660. *
  661. * __示例__
  662. * @code{.cpp}
  663. * json::Object filter;
  664. * filter[kTIMConversationListFilterConvType] = kTIMConv_Group;
  665. * filter[kTIMConversationListFilterConversationGroup] = "my_group_name";
  666. * filter[kTIMConversationListFilterMarkType] = kTIMConversationMarkTypeStar;
  667. * filter[kTIMConversationListFilterHasUnreadCount] = true;
  668. * filter[kTIMConversationListFilterHasGroupAtInfo] = true;
  669. *
  670. * TIMConvSubscribeUnreadMessageCountByFilter(json::Serialize(filter).c_str());
  671. * @endcode
  672. */
  673. TIM_API int TIMConvSubscribeUnreadMessageCountByFilter(const char* filter);
  674. /**
  675. * 6.14 取消监听指定 filter 的会话未读总数变化(7.0 及以上版本支持)
  676. *
  677. * @param filter 会话 filter, Json Key 请参考 @ref TIMConversationListFilter
  678. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  679. *
  680. * __示例__
  681. * @code{.cpp}
  682. * json::Object filter;
  683. * filter[kTIMConversationListFilterConvType] = kTIMConv_Group;
  684. * filter[kTIMConversationListFilterConversationGroup] = "my_group_name";
  685. * filter[kTIMConversationListFilterMarkType] = kTIMConversationMarkTypeStar;
  686. * filter[kTIMConversationListFilterHasUnreadCount] = true;
  687. * filter[kTIMConversationListFilterHasGroupAtInfo] = true;
  688. *
  689. * TIMConvUnsubscribeUnreadMessageCountByFilter(json::Serialize(filter).c_str());
  690. * @endcode
  691. */
  692. TIM_API int TIMConvUnsubscribeUnreadMessageCountByFilter(const char* filter);
  693. /**
  694. * 6.15 清理会话的未读消息计数(7.1 及以上版本支持)
  695. *
  696. * @param conversation_id 会话唯一 ID, C2C 单聊组成方式:"c2c_" + userID;群聊组成方式为 "group_" + groupID
  697. * @param clean_timestamp 清理时间戳,单位为秒,仅对单聊会话生效,指定清理哪一个 timestamp 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0;
  698. * @param clean_sequence 清理时 sequence,仅对群聊会话生效,指定清理哪一个 sequence 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0;
  699. * @param cb 创建会话分组的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  700. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  701. *
  702. * @note
  703. * - 当您想清理所有单聊会话的未读消息计数,conversation_id 请传入 "c2c",即不指定具体的 userID;
  704. * - 当您想清理所有群聊会话的未读消息计数,conversation_id 请传入 "group",即不指定具体的 groupID;
  705. * - 当您想清理所有会话的未读消息计数,conversation_id 请传入 "" 或者 nullptr;
  706. * - 该接口调用成功后,SDK 会通过 @ref TIMSetConvEventCallback 回调 (@ref TIMConvEvent 为 kTIMConvEvent_Update)将对应会话的最新未读数通知给您。
  707. *
  708. * __示例__
  709. * @code{.cpp}
  710. *
  711. * TIMConvCleanConversationUnreadMessageCount("c2c_user1", 123456, 0, [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  712. * printf("TIMConvCleanConversationUnreadMessageCount code:%d|desc:%s\n", code, desc);
  713. *
  714. * }, nullptr);
  715. * @endcode
  716. */
  717. TIM_API int TIMConvCleanConversationUnreadMessageCount(const char* conversation_id, uint64_t clean_timestamp, uint64_t clean_sequence, TIMCommCallback cb, const void* user_data);
  718. /////////////////////////////////////////////////////////////////////////////////
  719. //
  720. // 七. 会话分组相关接口(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  721. //
  722. /////////////////////////////////////////////////////////////////////////////////
  723. /**
  724. * 7.1 创建会话分组(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  725. *
  726. * @param group_name 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  727. * @param conversation_id_array 会话 ID 列表(必填参数,不能为空)
  728. * @param cb 创建会话分组的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  729. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  730. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  731. *
  732. * @note
  733. * 会话分组最大支持 20 个,不再使用的分组请及时删除。
  734. *
  735. * __示例__
  736. * @code{.cpp}
  737. * std::string group_name = "my_group_name";
  738. *
  739. * json::Array conversation_id_array;
  740. * conversation_id_array.push_back("c2c_conversation_id1");
  741. * conversation_id_array.push_back("group_conversation_id2");
  742. *
  743. * TIMConvCreateConversationGroup(group_name.c_str(), json::Serialize(conversation_id_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  744. * printf("TIMConvCreateConversationGroup code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  745. *
  746. * // 遍历读取 json_param 存放的操作结果,参见 TIMConversationOperationResult 的定义
  747. * }, nullptr);
  748. * @endcode
  749. */
  750. TIM_API int TIMConvCreateConversationGroup(const char* group_name, const char* conversation_id_array, TIMCommCallback cb, const void* user_data);
  751. /**
  752. * 7.2 获取会话分组列表(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  753. *
  754. * @param cb 获取会话分组列表的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  755. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  756. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  757. *
  758. * @note
  759. * 该接口获取的是本地缓存的会话分组,建议在 kTIMConvEvent_Finish 之后调用。
  760. *
  761. * __示例__
  762. * @code{.cpp}
  763. * TIMConvGetConversationGroupList([](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  764. * printf("TIMConvGetConversationGroupList code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  765. *
  766. * // 读取 json_param 存放的会话分组列表,例如:
  767. * // [
  768. * // "my_group_name1",
  769. * // "my_group_name2",
  770. * // "my_group_name3"
  771. * // ]
  772. * }, nullptr);
  773. * @endcode
  774. */
  775. TIM_API int TIMConvGetConversationGroupList(TIMCommCallback cb, const void* user_data);
  776. /**
  777. * 7.3 删除会话分组(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  778. *
  779. * @param group_name 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  780. * @param cb 删除会话分组的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  781. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  782. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  783. *
  784. * __示例__
  785. * @code{.cpp}
  786. * std::string group_name = "my_group_name";
  787. *
  788. * TIMConvDeleteConversationGroup(group_name.c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  789. * printf("TIMConvDeleteConversationGroup code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  790. * }, nullptr);
  791. * @endcode
  792. */
  793. TIM_API int TIMConvDeleteConversationGroup(const char* group_name, TIMCommCallback cb, const void* user_data);
  794. /**
  795. * 7.4 重命名会话分组(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  796. *
  797. * @param old_name 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  798. * @param new_name 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  799. * @param cb 重命名会话分组的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  800. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  801. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  802. *
  803. * __示例__
  804. * @code{.cpp}
  805. * std::string old_name = "old_name";
  806. * std::string new_name = "new_name";
  807. *
  808. * TIMConvRenameConversationGroup(old_name.c_str(), new_name.c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  809. * printf("TIMConvRenameConversationGroup code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  810. * }, nullptr);
  811. * @endcode
  812. */
  813. TIM_API int TIMConvRenameConversationGroup(const char* old_name, const char* new_name, TIMCommCallback cb, const void* user_data);
  814. /**
  815. * 7.5 添加会话到一个会话分组(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  816. *
  817. * @param group_name 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  818. * @param conversation_id_array 会话 ID 列表(必填参数,不能为空)
  819. * @param cb 添加会话到一个会话分组的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  820. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  821. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  822. *
  823. * __示例 (回调结果中 json_param 使用的 Json Key 请参考 @ref TIMConversationOperationResult)__
  824. * @code{.cpp}
  825. * std::string group_name = "my_group_name";
  826. *
  827. * json::Array conversation_id_array;
  828. * conversation_id_array.push_back("c2c_conversation_id1");
  829. * conversation_id_array.push_back("group_conversation_id2");
  830. *
  831. * TIMConvAddConversationsToGroup(group_name.c_str(), json::Serialize(conversation_id_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  832. * printf("TIMConvAddConversationsToGroup code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  833. *
  834. * // 遍历读取 json_param 存放的操作结果,参见 TIMConversationOperationResult 的定义
  835. * }, nullptr);
  836. * @endcode
  837. */
  838. TIM_API int TIMConvAddConversationsToGroup(const char* group_name, const char* conversation_id_array, TIMCommCallback cb, const void* user_data);
  839. /**
  840. * 7.6 从会话分组中删除多个会话(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  841. *
  842. * @param group_name 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  843. * @param conversation_id_array 会话 ID 列表(必填参数,不能为空)
  844. * @param cb 从会话分组中删除多个会话的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  845. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  846. * @return int 返回 TIM_SUCC 表示接口调用成功(接口只有返回 TIM_SUCC,回调 cb 才会被调用)。每个返回值的定义请参考 @ref TIMResult
  847. *
  848. * __示例 (回调结果中 json_param 使用的 Json Key 请参考 @ref TIMConversationOperationResult)__
  849. * @code{.cpp}
  850. * std::string group_name = "my_group_name";
  851. *
  852. * json::Array conversation_id_array;
  853. * conversation_id_array.push_back("c2c_conversation_id1");
  854. * conversation_id_array.push_back("group_conversation_id2");
  855. *
  856. * TIMConvDeleteConversationsFromGroup(group_name.c_str(), json::Serialize(conversation_id_array).c_str(), [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  857. * printf("TIMConvDeleteConversationsFromGroup code:%d|desc:%s|json_param %s\r\n", code, desc, json_param);
  858. *
  859. * // 遍历读取 json_param 存放的操作结果,参见 TIMConversationOperationResult 的定义
  860. * }, nullptr);
  861. * @endcode
  862. */
  863. TIM_API int TIMConvDeleteConversationsFromGroup(const char* group_name, const char* conversation_id_array, TIMCommCallback cb, const void* user_data);
  864. /////////////////////////////////////////////////////////////////////////////////
  865. //
  866. // 八. 会话 API 参数相关的 Json Key 定义
  867. //
  868. /////////////////////////////////////////////////////////////////////////////////
  869. //------------------------------------------------------------------------------
  870. // 8.1 Draft(草稿信息)
  871. // object @ref Message, 只读, 草稿内的消息
  872. static const char* kTIMDraftMsg = "draft_msg";
  873. // string, 只读, 用户自定义数据
  874. static const char* kTIMDraftUserDefine = "draft_user_define";
  875. // uint, 只读, 上次设置草稿时的 UTC 时间戳
  876. static const char* kTIMDraftEditTime = "draft_edit_time";
  877. //------------------------------------------------------------------------------
  878. // 8.2 GroupAtInfo(群 @ 信息)
  879. // uint64, 只读, @ 消息序列号,即带有 “@我” 或者 “@所有人” 标记的消息的序列号
  880. static const char* kTIMGroupAtInfoSeq = "conv_group_at_info_seq";
  881. // uint @ref TIMGroupAtType, 只读, @ 提醒类型,分成 “@我” 、“@所有人” 以及 “@我并@所有人” 三类
  882. static const char* kTIMGroupAtInfoAtType = "conv_group_at_info_at_type";
  883. //------------------------------------------------------------------------------
  884. // 8.3 ConvInfo(会话信息)
  885. // string, 只读, 会话ID
  886. static const char* kTIMConvId = "conv_id";
  887. // uint @ref TIMConvType, 只读, 会话类型
  888. static const char* kTIMConvType = "conv_type";
  889. // string, 只读, 会话展示头像(群组:群头像;C2C:对方头像)
  890. static const char* kTIMConvFaceUrl = "conv_face_url";
  891. // uint64, 只读, 会话未读计数
  892. static const char* kTIMConvUnReadNum = "conv_unread_num";
  893. // uint64, 只读, 会话的激活时间
  894. static const char* kTIMConvActiveTime = "conv_active_time";
  895. // bool, 只读, 会话是否有最后一条消息
  896. static const char* kTIMConvIsHasLastMsg = "conv_is_has_lastmsg";
  897. // object @ref Message, 只读, 会话最后一条消息
  898. static const char* kTIMConvLastMsg = "conv_last_msg";
  899. // bool, 只读, 会话是否有草稿
  900. static const char* kTIMConvIsHasDraft = "conv_is_has_draft";
  901. // object @ref Draft, 只读(选填), 会话草稿
  902. static const char* kTIMConvDraft = "conv_draft";
  903. // uint @ref TIMReceiveMessageOpt, 只读(选填), 消息接收选项
  904. static const char* kTIMConvRecvOpt = "conv_recv_opt";
  905. // uint @ref TIMGroupType, 只读(选填), 群组类型, 仅当会话类型为群聊时有效
  906. static const char* kTIMConvGroupType = "conv_group_type";
  907. // array @ref GroupAtInfo, 只读(选填), 群会话 @ 信息列表,用于展示 “有人@我” 或 “@所有人” 这两种提醒状态
  908. static const char* kTIMConvGroupAtInfoArray = "conv_group_at_info_array";
  909. // bool, 只读,是否置顶
  910. static const char* kTIMConvIsPinned = "conv_is_pinned";
  911. // string , 只读, 获取会话展示名称,其展示优先级如下:1、群组,群名称 -> 群 ID;C2C; 2、对方好友备注 -> 对方昵称 -> 对方的 userID
  912. static const char* kTIMConvShowName = "conv_show_name";
  913. // array uint64, 只读, 会话标记列表,取值详见 @TIMConversationMarkType(从 6.5 版本开始支持)
  914. static const char* kTIMConvMarkArray = "conv_mark_array";
  915. // string , 只读, 会话自定义数据(从 6.5 版本开始支持)
  916. static const char* kTIMConvCustomData = "conv_custom_data";
  917. // array string, 只读, 会话所属分组列表(从 6.5 版本开始支持)
  918. static const char* kTIMConvConversationGroupArray = "conv_conversation_group_array";
  919. // uint64, 只读, 最新已读消息的 UTC 时间戳,仅对单聊会话生效(从 7.1 版本开始支持)
  920. static const char* kTIMConvC2CReadTimestamp = "conv_c2c_read_timestamp";
  921. // uint64, 只读, 群消息已读 Sequence(从 7.1 版本开始支持)
  922. static const char* kTIMConvGroupReadSequence = "conv_group_read_sequence";
  923. //------------------------------------------------------------------------------
  924. // 8.4 TIMConversationListFilter(获取会话列表高级接口的 filter)
  925. // uint @ref TIMConvType, 只写, 会话类型
  926. static const char* kTIMConversationListFilterConvType = "conversation_list_filter_conv_type";
  927. // string, 只写, 会话分组名称(不设置表示不过滤此项,设置为 "" 代表过滤不属于任何分组的会话)
  928. static const char* kTIMConversationListFilterConversationGroup = "conversation_list_filter_conversation_group";
  929. // uint @ref TIMConversationMarkType, 只写, 会话标记类型(不设置表示不过滤此项,设置为 0 代表过滤不含任何标记的会话)
  930. static const char* kTIMConversationListFilterMarkType = "conversation_list_filter_mark_type";
  931. // bool, 只写, 会话是否含有未读数(不设置表示不过滤此项,设置为 true 代表过滤含未读数的会话;设置为 false 代表过滤不含未读数的会话)
  932. static const char* kTIMConversationListFilterHasUnreadCount = "conversation_list_filter_has_unread_count";
  933. // bool, 只写, 会话是否含有群 @ 信息(不设置表示不过滤此项,设置为 true 代表过滤含群 @ 消息的会话;设置为 false 代表过滤不含群 @ 消息的会话)
  934. static const char* kTIMConversationListFilterHasGroupAtInfo = "conversation_list_filter_has_group_at_info";
  935. //------------------------------------------------------------------------------
  936. // 8.5 TIMConversationListResult(获取会话列表的结果)
  937. // array @ref ConvInfo, 只读, 会话列表
  938. static const char* TIMConversationListResultConvList = "conversation_list_result_conv_list";
  939. // uint64, 只读, 分页拉取的游标
  940. static const char* TIMConversationListResultNextSeq = "conversation_list_result_next_seq";
  941. // bool, 只读, 分页拉取是否结束
  942. static const char* TIMConversationListResultIsFinished = "conversation_list_result_is_finished";
  943. //------------------------------------------------------------------------------
  944. // 8.6 GetConversationListParam(获取指定的会话列表)
  945. // string, 只写, 会话ID
  946. static const char* kTIMGetConversationListParamConvId = "get_conversation_list_param_conv_id";
  947. // uint @ref TIMConvType, 只写, 会话类型
  948. static const char* kTIMGetConversationListParamConvType = "get_conversation_list_param_conv_type";
  949. //------------------------------------------------------------------------------
  950. // 8.7 GetTotalUnreadNumberResult(获取会话未读消息个数)
  951. // int, 只读,会话未读数
  952. static const char* kTIMConvGetTotalUnreadMessageCountResultUnreadCount = "conv_get_total_unread_message_count_result_unread_count";
  953. //------------------------------------------------------------------------------
  954. // 8.8 TIMConversationOperationResult(会话操作结果)
  955. // string, 只读, 会话 ID
  956. static const char* kTIMConversationOperationResultConversationID = "conversation_operation_result_conversation_id";
  957. // int, 只读, 返回码
  958. static const char* kTIMConversationOperationResultResultCode = "conversation_operation_result_result_code";
  959. // string, 只读, 返回信息
  960. static const char* kTIMConversationOperationResultResultInfo = "conversation_operation_result_result_info";
  961. /////////////////////////////////////////////////////////////////////////////////
  962. //
  963. // 九. 废弃字段
  964. //
  965. /////////////////////////////////////////////////////////////////////////////////
  966. //------------------------------------------------------------------------------
  967. // 9.1 ConvInfo(会话信息,废弃字段部分)
  968. // string, 只读, 会话所有者
  969. static const char* kTIMConvOwner = "conv_owner";
  970. /////////////////////////////////////////////////////////////////////////////////
  971. //
  972. // 十. 废弃接口
  973. //
  974. /////////////////////////////////////////////////////////////////////////////////
  975. /**
  976. * 10.1 创建会话(待废弃接口)
  977. *
  978. * @param conv_id 会话的ID
  979. * @param conv_type 会话类型,请参考 @ref TIMConvType
  980. * @param cb 创建会话的回调。回调函数定义和参数解析请参考 @ref TIMCommCallback
  981. * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
  982. * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
  983. *
  984. * @note
  985. * - 会话是指面向一个人或者一个群组的对话,通过与单个人或群组之间会话收发消息
  986. * - 此接口创建或者获取会话信息,需要指定会话类型(群组或者单聊),以及会话对方标志(对方账号或者群号)。会话信息通过cb回传。
  987. *
  988. * __获取对方 UserID 为 Windows-02 的单聊会话示例__
  989. * @code{.cpp}
  990. * const void* user_data = nullptr; // 回调函数回传
  991. * const char* userid = "Windows-02";
  992. * int ret = TIMConvCreate(userid, kTIMConv_C2C, [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  993. * if (ERR_SUCC != code) {
  994. * return;
  995. * }
  996. * // 回调返回会话的具体信息
  997. * }, user_data);
  998. * if (ret != TIM_SUCC) {
  999. * // 调用 TIMConvCreate 接口失败
  1000. * }
  1001. * @endcode
  1002. *
  1003. * __获取群组 ID 为 Windows-Group-01 的群聊会话示例__
  1004. * @code{.cpp}
  1005. * const void* user_data = nullptr; // 回调函数回传
  1006. * const char* userid = "Windows-Group-01";
  1007. * int ret = TIMConvCreate(userid, kTIMConv_Group, [](int32_t code, const char* desc, const char* json_param, const void* user_data) {
  1008. * if (ERR_SUCC != code) {
  1009. * return;
  1010. * }
  1011. * // 回调返回会话的具体信息
  1012. * }, user_data);
  1013. * if (ret != TIM_SUCC) {
  1014. * // 调用 TIMConvCreate 接口失败
  1015. * }
  1016. * @endcode
  1017. */
  1018. TIM_API int TIMConvCreate(const char* conv_id, enum TIMConvType conv_type, TIMCommCallback cb, const void* user_data);
  1019. #ifdef __cplusplus
  1020. }
  1021. #endif // __cplusplus
  1022. #endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CONVERSATION_MANAGER_H_