gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/im/v1/api.go (about) 1 // Package im code generated by oapi sdk gen 2 /* 3 * MIT License 4 * 5 * Copyright (c) 2022 Lark Technologies Pte. Ltd. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 * 9 * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 */ 13 14 package larkim 15 16 import ( 17 "bytes" 18 "context" 19 "net/http" 20 21 "gitee.com/larksuite/oapi-sdk-go/v3/core" 22 ) 23 24 func NewService(config *larkcore.Config) *ImService { 25 i := &ImService{config: config} 26 i.BatchMessage = &batchMessage{service: i} 27 i.Chat = &chat{service: i} 28 i.ChatAnnouncement = &chatAnnouncement{service: i} 29 i.ChatManagers = &chatManagers{service: i} 30 i.ChatMemberBot = &chatMemberBot{service: i} 31 i.ChatMemberUser = &chatMemberUser{service: i} 32 i.ChatMembers = &chatMembers{service: i} 33 i.ChatModeration = &chatModeration{service: i} 34 i.ChatTab = &chatTab{service: i} 35 i.ChatTopNotice = &chatTopNotice{service: i} 36 i.File = &file{service: i} 37 i.Image = &image{service: i} 38 i.Message = &message{service: i} 39 i.MessageReaction = &messageReaction{service: i} 40 i.MessageResource = &messageResource{service: i} 41 return i 42 } 43 44 type ImService struct { 45 config *larkcore.Config 46 BatchMessage *batchMessage // 消息 - 批量消息 47 Chat *chat // 群组 48 ChatAnnouncement *chatAnnouncement // 群组 - 群公告 49 ChatManagers *chatManagers // 群组 - 群成员 50 ChatMemberBot *chatMemberBot // 事件 51 ChatMemberUser *chatMemberUser // 事件 52 ChatMembers *chatMembers // 群组 - 群成员 53 ChatModeration *chatModeration // chat.moderation 54 ChatTab *chatTab // 群组 - 会话标签页 55 ChatTopNotice *chatTopNotice // chat.top_notice 56 File *file // 消息 - 文件信息 57 Image *image // 消息 - 图片信息 58 Message *message // 消息 59 MessageReaction *messageReaction // 消息 - 表情回复 60 MessageResource *messageResource // message.resource 61 } 62 63 type batchMessage struct { 64 service *ImService 65 } 66 type chat struct { 67 service *ImService 68 } 69 type chatAnnouncement struct { 70 service *ImService 71 } 72 type chatManagers struct { 73 service *ImService 74 } 75 type chatMemberBot struct { 76 service *ImService 77 } 78 type chatMemberUser struct { 79 service *ImService 80 } 81 type chatMembers struct { 82 service *ImService 83 } 84 type chatModeration struct { 85 service *ImService 86 } 87 type chatTab struct { 88 service *ImService 89 } 90 type chatTopNotice struct { 91 service *ImService 92 } 93 type file struct { 94 service *ImService 95 } 96 type image struct { 97 service *ImService 98 } 99 type message struct { 100 service *ImService 101 } 102 type messageReaction struct { 103 service *ImService 104 } 105 type messageResource struct { 106 service *ImService 107 } 108 109 // 批量撤回消息 110 // 111 // - 批量撤回消息 112 // 113 // - 注意事项:;- 只能撤回通过[批量发送消息](/ssl:ttdoc/ukTMukTMukTM/ucDO1EjL3gTNx4yN4UTM)接口产生的消息,单条消息的撤回请使用[撤回消息](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/delete)接口;- 路径参数**batch_message_id**为[批量发送消息](/ssl:ttdoc/ukTMukTMukTM/ucDO1EjL3gTNx4yN4UTM)接口返回值中的**message_id**字段,用于标识一次批量发送消息请求,格式为:**bm-xxx**;- 一次调用涉及大量消息,所以为异步接口,会有一定延迟。 114 // 115 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/batch_message/delete 116 // 117 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/delete_batchMessage.go 118 func (b *batchMessage) Delete(ctx context.Context, req *DeleteBatchMessageReq, options ...larkcore.RequestOptionFunc) (*DeleteBatchMessageResp, error) { 119 // 发起请求 120 apiReq := req.apiReq 121 apiReq.ApiPath = "/open-apis/im/v1/batch_messages/:batch_message_id" 122 apiReq.HttpMethod = http.MethodDelete 123 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 124 apiResp, err := larkcore.Request(ctx, apiReq, b.service.config, options...) 125 if err != nil { 126 return nil, err 127 } 128 // 反序列响应结果 129 resp := &DeleteBatchMessageResp{ApiResp: apiResp} 130 err = apiResp.JSONUnmarshalBody(resp) 131 if err != nil { 132 return nil, err 133 } 134 return resp, err 135 } 136 137 // 查询批量消息整体进度 138 // 139 // - 查询批量消息整体进度 140 // 141 // - 注意事项:;* 该接口是[查询批量消息推送和阅读人数](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/im-v1/batch_message/read_user)接口的加强版;* 该接口返回的数据为查询时刻的快照数据 142 // 143 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/batch_message/get_progress 144 // 145 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/getProgress_batchMessage.go 146 func (b *batchMessage) GetProgress(ctx context.Context, req *GetProgressBatchMessageReq, options ...larkcore.RequestOptionFunc) (*GetProgressBatchMessageResp, error) { 147 // 发起请求 148 apiReq := req.apiReq 149 apiReq.ApiPath = "/open-apis/im/v1/batch_messages/:batch_message_id/get_progress" 150 apiReq.HttpMethod = http.MethodGet 151 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 152 apiResp, err := larkcore.Request(ctx, apiReq, b.service.config, options...) 153 if err != nil { 154 return nil, err 155 } 156 // 反序列响应结果 157 resp := &GetProgressBatchMessageResp{ApiResp: apiResp} 158 err = apiResp.JSONUnmarshalBody(resp) 159 if err != nil { 160 return nil, err 161 } 162 return resp, err 163 } 164 165 // 查询批量消息推送和阅读人数 166 // 167 // - 查询批量消息推送和阅读人数 168 // 169 // - 注意事项:;- 只能查询通过[批量发送消息](/ssl:ttdoc/ukTMukTMukTM/ucDO1EjL3gTNx4yN4UTM)接口产生的消息;- 该接口返回的数据为查询时刻的快照数据。 170 // 171 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/batch_message/read_user 172 // 173 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/readUser_batchMessage.go 174 func (b *batchMessage) ReadUser(ctx context.Context, req *ReadUserBatchMessageReq, options ...larkcore.RequestOptionFunc) (*ReadUserBatchMessageResp, error) { 175 // 发起请求 176 apiReq := req.apiReq 177 apiReq.ApiPath = "/open-apis/im/v1/batch_messages/:batch_message_id/read_user" 178 apiReq.HttpMethod = http.MethodGet 179 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 180 apiResp, err := larkcore.Request(ctx, apiReq, b.service.config, options...) 181 if err != nil { 182 return nil, err 183 } 184 // 反序列响应结果 185 resp := &ReadUserBatchMessageResp{ApiResp: apiResp} 186 err = apiResp.JSONUnmarshalBody(resp) 187 if err != nil { 188 return nil, err 189 } 190 return resp, err 191 } 192 193 // 创建群 194 // 195 // - 创建群并设置群头像、群名、群描述等。 196 // 197 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 本接口支持在创建群的同时拉用户或机器人进群;如果仅需要拉用户或者机器人入群参考 [将用户或机器人拉入群聊](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-members/create)接口 198 // 199 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/create 200 // 201 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_chat.go 202 func (c *chat) Create(ctx context.Context, req *CreateChatReq, options ...larkcore.RequestOptionFunc) (*CreateChatResp, error) { 203 // 发起请求 204 apiReq := req.apiReq 205 apiReq.ApiPath = "/open-apis/im/v1/chats" 206 apiReq.HttpMethod = http.MethodPost 207 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 208 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 209 if err != nil { 210 return nil, err 211 } 212 // 反序列响应结果 213 resp := &CreateChatResp{ApiResp: apiResp} 214 err = apiResp.JSONUnmarshalBody(resp) 215 if err != nil { 216 return nil, err 217 } 218 return resp, err 219 } 220 221 // 解散群 222 // 223 // - 解散群组 224 // 225 // - 注意事项:;- 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 如果使用tenant_access_token,需要机器人是群的创建者且具备==更新应用所创建群的群信息==权限才可解散群;- 如果使用user_access_token,需要对应的用户是群主才可解散群 226 // 227 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/delete 228 // 229 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/delete_chat.go 230 func (c *chat) Delete(ctx context.Context, req *DeleteChatReq, options ...larkcore.RequestOptionFunc) (*DeleteChatResp, error) { 231 // 发起请求 232 apiReq := req.apiReq 233 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id" 234 apiReq.HttpMethod = http.MethodDelete 235 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 236 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 237 if err != nil { 238 return nil, err 239 } 240 // 反序列响应结果 241 resp := &DeleteChatResp{ApiResp: apiResp} 242 err = apiResp.JSONUnmarshalBody(resp) 243 if err != nil { 244 return nil, err 245 } 246 return resp, err 247 } 248 249 // 获取群信息 250 // 251 // - 获取群名称、群描述、群头像、群主 ID 等群基本信息。 252 // 253 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app); - 机器人或授权用户必须在群里(否则只会返回群名称、群头像等基本信息) 254 // 255 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/get 256 // 257 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_chat.go 258 func (c *chat) Get(ctx context.Context, req *GetChatReq, options ...larkcore.RequestOptionFunc) (*GetChatResp, error) { 259 // 发起请求 260 apiReq := req.apiReq 261 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id" 262 apiReq.HttpMethod = http.MethodGet 263 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 264 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 265 if err != nil { 266 return nil, err 267 } 268 // 反序列响应结果 269 resp := &GetChatResp{ApiResp: apiResp} 270 err = apiResp.JSONUnmarshalBody(resp) 271 if err != nil { 272 return nil, err 273 } 274 return resp, err 275 } 276 277 // 获取用户或机器人所在的群列表 278 // 279 // - 获取用户或者机器人所在群列表。 280 // 281 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 查询参数 **user_id_type** 用于控制响应体中 owner_id 的类型,如果是获取机器人所在群列表该值可以不填;- 请注意区分本接口和[获取群信息](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/get)的请求 URL;- 获取的群列表不包含p2p单聊群 282 // 283 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/list 284 // 285 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/list_chat.go 286 func (c *chat) List(ctx context.Context, req *ListChatReq, options ...larkcore.RequestOptionFunc) (*ListChatResp, error) { 287 // 发起请求 288 apiReq := req.apiReq 289 apiReq.ApiPath = "/open-apis/im/v1/chats" 290 apiReq.HttpMethod = http.MethodGet 291 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 292 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 293 if err != nil { 294 return nil, err 295 } 296 // 反序列响应结果 297 resp := &ListChatResp{ApiResp: apiResp} 298 err = apiResp.JSONUnmarshalBody(resp) 299 if err != nil { 300 return nil, err 301 } 302 return resp, err 303 } 304 func (c *chat) ListByIterator(ctx context.Context, req *ListChatReq, options ...larkcore.RequestOptionFunc) (*ListChatIterator, error) { 305 return &ListChatIterator{ 306 ctx: ctx, 307 req: req, 308 listFunc: c.List, 309 options: options, 310 limit: req.Limit}, nil 311 } 312 313 // 搜索对用户或机器人可见的群列表 314 // 315 // - 搜索对用户或机器人可见的群列表,包括:用户或机器人所在的群、对用户或机器人公开的群。;搜索可获得的群信息包括:群ID(chat_id)、群名称、群描述等。 316 // 317 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) 318 // 319 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/search 320 // 321 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/search_chat.go 322 func (c *chat) Search(ctx context.Context, req *SearchChatReq, options ...larkcore.RequestOptionFunc) (*SearchChatResp, error) { 323 // 发起请求 324 apiReq := req.apiReq 325 apiReq.ApiPath = "/open-apis/im/v1/chats/search" 326 apiReq.HttpMethod = http.MethodGet 327 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 328 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 329 if err != nil { 330 return nil, err 331 } 332 // 反序列响应结果 333 resp := &SearchChatResp{ApiResp: apiResp} 334 err = apiResp.JSONUnmarshalBody(resp) 335 if err != nil { 336 return nil, err 337 } 338 return resp, err 339 } 340 func (c *chat) SearchByIterator(ctx context.Context, req *SearchChatReq, options ...larkcore.RequestOptionFunc) (*SearchChatIterator, error) { 341 return &SearchChatIterator{ 342 ctx: ctx, 343 req: req, 344 listFunc: c.Search, 345 options: options, 346 limit: req.Limit}, nil 347 } 348 349 // 更新群信息 350 // 351 // - 更新群头像、群名称、群描述、群配置、转让群主等。 352 // 353 // - 注意事项:;- 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 若群未开启 ==仅群主和群管理员可编辑群信息== 配置:; - 群主/群管理员 或 创建群组且具备==更新应用所创建群的群信息==权限的机器人,可更新所有信息; - 不满足上述条件的群成员或机器人,仅可更新群头像、群名称、群描述、群国际化名称信息 ;- 若群开启了==仅群主和群管理员可编辑群信息==配置:; - 群主/群管理员 或 创建群组且具备==更新应用所创建群的群信息==权限的机器人,可更新所有信息; - 不满足上述条件的群成员或者机器人,任何群信息都不能修改 354 // 355 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat/update 356 // 357 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/update_chat.go 358 func (c *chat) Update(ctx context.Context, req *UpdateChatReq, options ...larkcore.RequestOptionFunc) (*UpdateChatResp, error) { 359 // 发起请求 360 apiReq := req.apiReq 361 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id" 362 apiReq.HttpMethod = http.MethodPut 363 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 364 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 365 if err != nil { 366 return nil, err 367 } 368 // 反序列响应结果 369 resp := &UpdateChatResp{ApiResp: apiResp} 370 err = apiResp.JSONUnmarshalBody(resp) 371 if err != nil { 372 return nil, err 373 } 374 return resp, err 375 } 376 377 // 获取群公告信息 378 // 379 // - 获取会话中的群公告信息,公告信息格式与[云文档](https://open.feishu.cn/document/ukTMukTMukTM/uAzM5YjLwMTO24CMzkjN)格式相同。 380 // 381 // - 注意事项:;- 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) 382 // 383 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-announcement/get 384 // 385 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_chatAnnouncement.go 386 func (c *chatAnnouncement) Get(ctx context.Context, req *GetChatAnnouncementReq, options ...larkcore.RequestOptionFunc) (*GetChatAnnouncementResp, error) { 387 // 发起请求 388 apiReq := req.apiReq 389 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/announcement" 390 apiReq.HttpMethod = http.MethodGet 391 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 392 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 393 if err != nil { 394 return nil, err 395 } 396 // 反序列响应结果 397 resp := &GetChatAnnouncementResp{ApiResp: apiResp} 398 err = apiResp.JSONUnmarshalBody(resp) 399 if err != nil { 400 return nil, err 401 } 402 return resp, err 403 } 404 405 // 更新群公告信息 406 // 407 // - 更新会话中的群公告信息,更新公告信息的格式和更新[云文档](https://open.feishu.cn/document/ukTMukTMukTM/uAzM5YjLwMTO24CMzkjN)格式相同。 408 // 409 // - 注意事项:;- 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 若群开启了 ==仅群主和群管理员可编辑群信息== 配置,群主/群管理员 或 创建群组且具备 ==更新应用所创建群的群信息== 权限的机器人,可更新群公告;- 若群未开启 ==仅群主和群管理员可编辑群信息== 配置,所有成员可以更新群公告 410 // 411 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-announcement/patch 412 // 413 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/patch_chatAnnouncement.go 414 func (c *chatAnnouncement) Patch(ctx context.Context, req *PatchChatAnnouncementReq, options ...larkcore.RequestOptionFunc) (*PatchChatAnnouncementResp, error) { 415 // 发起请求 416 apiReq := req.apiReq 417 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/announcement" 418 apiReq.HttpMethod = http.MethodPatch 419 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 420 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 421 if err != nil { 422 return nil, err 423 } 424 // 反序列响应结果 425 resp := &PatchChatAnnouncementResp{ApiResp: apiResp} 426 err = apiResp.JSONUnmarshalBody(resp) 427 if err != nil { 428 return nil, err 429 } 430 return resp, err 431 } 432 433 // 指定群管理员 434 // 435 // - 将用户或机器人指定为群管理员。 436 // 437 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 仅有群主可以指定群管理员;- 对于普通群,最多指定 10 个管理员;- 对于超大群,最多指定 20 个管理员;- 每次请求最多指定 50 个用户或者 5 个机器人;- 指定机器人类型的管理员请使用 ==app_id== 438 // 439 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-managers/add_managers 440 // 441 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/addManagers_chatManagers.go 442 func (c *chatManagers) AddManagers(ctx context.Context, req *AddManagersChatManagersReq, options ...larkcore.RequestOptionFunc) (*AddManagersChatManagersResp, error) { 443 // 发起请求 444 apiReq := req.apiReq 445 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/managers/add_managers" 446 apiReq.HttpMethod = http.MethodPost 447 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 448 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 449 if err != nil { 450 return nil, err 451 } 452 // 反序列响应结果 453 resp := &AddManagersChatManagersResp{ApiResp: apiResp} 454 err = apiResp.JSONUnmarshalBody(resp) 455 if err != nil { 456 return nil, err 457 } 458 return resp, err 459 } 460 461 // 删除群管理员 462 // 463 // - 删除指定的群管理员(用户或机器人) 464 // 465 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 仅有群主可以删除群管理员;- 每次请求最多指定 50 个用户或者 5 个机器人;- 删除机器人类型的管理员请使用 ==app_id== 466 // 467 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-managers/delete_managers 468 // 469 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/deleteManagers_chatManagers.go 470 func (c *chatManagers) DeleteManagers(ctx context.Context, req *DeleteManagersChatManagersReq, options ...larkcore.RequestOptionFunc) (*DeleteManagersChatManagersResp, error) { 471 // 发起请求 472 apiReq := req.apiReq 473 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/managers/delete_managers" 474 apiReq.HttpMethod = http.MethodPost 475 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 476 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 477 if err != nil { 478 return nil, err 479 } 480 // 反序列响应结果 481 resp := &DeleteManagersChatManagersResp{ApiResp: apiResp} 482 err = apiResp.JSONUnmarshalBody(resp) 483 if err != nil { 484 return nil, err 485 } 486 return resp, err 487 } 488 489 // 将用户或机器人拉入群聊 490 // 491 // - 将用户或机器人拉入群聊。 492 // 493 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app); - 如需拉用户进群,需要机器人对用户有可见性; - 在开启 ==仅群主和群管理员可添加群成员== 的设置时,仅有群主/管理员 或 创建群组且具备 ==更新应用所创建群的群信息== 权限的机器人,可以拉用户或者机器人进群; - 在未开启 ==仅群主和群管理员可添加群成员== 的设置时,所有群成员都可以拉用户或机器人进群 494 // 495 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-members/create 496 // 497 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_chatMembers.go 498 func (c *chatMembers) Create(ctx context.Context, req *CreateChatMembersReq, options ...larkcore.RequestOptionFunc) (*CreateChatMembersResp, error) { 499 // 发起请求 500 apiReq := req.apiReq 501 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/members" 502 apiReq.HttpMethod = http.MethodPost 503 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 504 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 505 if err != nil { 506 return nil, err 507 } 508 // 反序列响应结果 509 resp := &CreateChatMembersResp{ApiResp: apiResp} 510 err = apiResp.JSONUnmarshalBody(resp) 511 if err != nil { 512 return nil, err 513 } 514 return resp, err 515 } 516 517 // 将用户或机器人移出群聊 518 // 519 // - 将用户或机器人移出群聊。 520 // 521 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 用户或机器人在任何条件下均可移除自己出群(即主动退群);- 仅有群主/管理员 或 创建群组并且具备 ==更新应用所创建群的群信息== 权限的机器人,可以移除其他用户或者机器人; - 每次请求,最多移除50个用户或者5个机器人;- 移除机器人请使用 ==app_id== 522 // 523 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-members/delete 524 // 525 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/delete_chatMembers.go 526 func (c *chatMembers) Delete(ctx context.Context, req *DeleteChatMembersReq, options ...larkcore.RequestOptionFunc) (*DeleteChatMembersResp, error) { 527 // 发起请求 528 apiReq := req.apiReq 529 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/members" 530 apiReq.HttpMethod = http.MethodDelete 531 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 532 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 533 if err != nil { 534 return nil, err 535 } 536 // 反序列响应结果 537 resp := &DeleteChatMembersResp{ApiResp: apiResp} 538 err = apiResp.JSONUnmarshalBody(resp) 539 if err != nil { 540 return nil, err 541 } 542 return resp, err 543 } 544 545 // 获取群成员列表 546 // 547 // - 如果用户在群中,则返回该群的成员列表。 548 // 549 // - 注意事项:; - 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app); - 该接口不会返回群内的机器人成员; - 由于返回的群成员列表会过滤掉机器人成员,因此返回的群成员个数可能会小于指定的page_size; - 如果有同一时间加入群的群成员,会一次性返回,这会导致返回的群成员个数可能会大于指定的page_size 550 // 551 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-members/get 552 // 553 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_chatMembers.go 554 func (c *chatMembers) Get(ctx context.Context, req *GetChatMembersReq, options ...larkcore.RequestOptionFunc) (*GetChatMembersResp, error) { 555 // 发起请求 556 apiReq := req.apiReq 557 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/members" 558 apiReq.HttpMethod = http.MethodGet 559 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 560 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 561 if err != nil { 562 return nil, err 563 } 564 // 反序列响应结果 565 resp := &GetChatMembersResp{ApiResp: apiResp} 566 err = apiResp.JSONUnmarshalBody(resp) 567 if err != nil { 568 return nil, err 569 } 570 return resp, err 571 } 572 func (c *chatMembers) GetByIterator(ctx context.Context, req *GetChatMembersReq, options ...larkcore.RequestOptionFunc) (*GetChatMembersIterator, error) { 573 return &GetChatMembersIterator{ 574 ctx: ctx, 575 req: req, 576 listFunc: c.Get, 577 options: options, 578 limit: req.Limit}, nil 579 } 580 581 // 判断用户或机器人是否在群里 582 // 583 // - 根据使用的access_token判断对应的用户或者机器人是否在群里。 584 // 585 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-members/is_in_chat 586 // 587 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/isInChat_chatMembers.go 588 func (c *chatMembers) IsInChat(ctx context.Context, req *IsInChatChatMembersReq, options ...larkcore.RequestOptionFunc) (*IsInChatChatMembersResp, error) { 589 // 发起请求 590 apiReq := req.apiReq 591 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/members/is_in_chat" 592 apiReq.HttpMethod = http.MethodGet 593 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 594 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 595 if err != nil { 596 return nil, err 597 } 598 // 反序列响应结果 599 resp := &IsInChatChatMembersResp{ApiResp: apiResp} 600 err = apiResp.JSONUnmarshalBody(resp) 601 if err != nil { 602 return nil, err 603 } 604 return resp, err 605 } 606 607 // 用户或机器人主动加入群聊 608 // 609 // - 用户或机器人主动加入群聊。 610 // 611 // - 注意事项:;- 应用需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app); - 目前仅支持加入公开群 612 // 613 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-members/me_join 614 // 615 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/meJoin_chatMembers.go 616 func (c *chatMembers) MeJoin(ctx context.Context, req *MeJoinChatMembersReq, options ...larkcore.RequestOptionFunc) (*MeJoinChatMembersResp, error) { 617 // 发起请求 618 apiReq := req.apiReq 619 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/members/me_join" 620 apiReq.HttpMethod = http.MethodPatch 621 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 622 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 623 if err != nil { 624 return nil, err 625 } 626 // 反序列响应结果 627 resp := &MeJoinChatMembersResp{ApiResp: apiResp} 628 err = apiResp.JSONUnmarshalBody(resp) 629 if err != nil { 630 return nil, err 631 } 632 return resp, err 633 } 634 635 // 获取群成员发言权限 636 // 637 // - 获取群发言模式、可发言用户名单等 638 // 639 // - 注意事项:; - 应用需要开启[机器人能力](https://open.feishu.cn/document/uQjL04CN/uYTMuYTMuYTM); - 机器人 或 授权用户 必须在群里 640 // 641 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-moderation/get 642 // 643 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_chatModeration.go 644 func (c *chatModeration) Get(ctx context.Context, req *GetChatModerationReq, options ...larkcore.RequestOptionFunc) (*GetChatModerationResp, error) { 645 // 发起请求 646 apiReq := req.apiReq 647 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/moderation" 648 apiReq.HttpMethod = http.MethodGet 649 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 650 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 651 if err != nil { 652 return nil, err 653 } 654 // 反序列响应结果 655 resp := &GetChatModerationResp{ApiResp: apiResp} 656 err = apiResp.JSONUnmarshalBody(resp) 657 if err != nil { 658 return nil, err 659 } 660 return resp, err 661 } 662 func (c *chatModeration) GetByIterator(ctx context.Context, req *GetChatModerationReq, options ...larkcore.RequestOptionFunc) (*GetChatModerationIterator, error) { 663 return &GetChatModerationIterator{ 664 ctx: ctx, 665 req: req, 666 listFunc: c.Get, 667 options: options, 668 limit: req.Limit}, nil 669 } 670 671 // 更新群发言权限 672 // 673 // - 更新群组的发言权限设置,可设置为全员可发言、仅管理员可发言 或 指定用户可发言。 674 // 675 // - 注意事项:; - 需要开启[机器人能力](https://open.feishu.cn/document/uQjL04CN/uYTMuYTMuYTM);- 若以用户授权调用接口,**当授权用户是群主**时,可更新群发言权限;- 若以租户授权调用接口(即以机器人身份调用接口),当**机器人是群主** 或者 **机器人是创建群组、具备==更新应用所创建群的群信息==权限且仍在群内**时,可更新群发言权限 676 // 677 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-moderation/update 678 // 679 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/update_chatModeration.go 680 func (c *chatModeration) Update(ctx context.Context, req *UpdateChatModerationReq, options ...larkcore.RequestOptionFunc) (*UpdateChatModerationResp, error) { 681 // 发起请求 682 apiReq := req.apiReq 683 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/moderation" 684 apiReq.HttpMethod = http.MethodPut 685 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 686 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 687 if err != nil { 688 return nil, err 689 } 690 // 反序列响应结果 691 resp := &UpdateChatModerationResp{ApiResp: apiResp} 692 err = apiResp.JSONUnmarshalBody(resp) 693 if err != nil { 694 return nil, err 695 } 696 return resp, err 697 } 698 699 // 添加会话标签页 700 // 701 // - 添加自定义会话标签页 702 // 703 // - 注意事项:;;- 只允许添加类型为doc和url的会话标签页;;- 创建时不需要设置tabID;;- 一个群内最多只允许添加20个自定义会话标签页;;- 会话标签页的名称不超过30个字符;;- 添加doc类型时,操作者(access token对应的身份)需要拥有对应文档的权限 704 // 705 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-tab/create 706 // 707 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_chatTab.go 708 func (c *chatTab) Create(ctx context.Context, req *CreateChatTabReq, options ...larkcore.RequestOptionFunc) (*CreateChatTabResp, error) { 709 // 发起请求 710 apiReq := req.apiReq 711 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/chat_tabs" 712 apiReq.HttpMethod = http.MethodPost 713 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 714 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 715 if err != nil { 716 return nil, err 717 } 718 // 反序列响应结果 719 resp := &CreateChatTabResp{ApiResp: apiResp} 720 err = apiResp.JSONUnmarshalBody(resp) 721 if err != nil { 722 return nil, err 723 } 724 return resp, err 725 } 726 727 // 删除会话标签页 728 // 729 // - 删除会话标签页 730 // 731 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-tab/delete_tabs 732 // 733 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/deleteTabs_chatTab.go 734 func (c *chatTab) DeleteTabs(ctx context.Context, req *DeleteTabsChatTabReq, options ...larkcore.RequestOptionFunc) (*DeleteTabsChatTabResp, error) { 735 // 发起请求 736 apiReq := req.apiReq 737 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/chat_tabs/delete_tabs" 738 apiReq.HttpMethod = http.MethodDelete 739 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 740 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 741 if err != nil { 742 return nil, err 743 } 744 // 反序列响应结果 745 resp := &DeleteTabsChatTabResp{ApiResp: apiResp} 746 err = apiResp.JSONUnmarshalBody(resp) 747 if err != nil { 748 return nil, err 749 } 750 return resp, err 751 } 752 753 // 拉取会话标签页 754 // 755 // - 拉取会话标签页 756 // 757 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-tab/list_tabs 758 // 759 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/listTabs_chatTab.go 760 func (c *chatTab) ListTabs(ctx context.Context, req *ListTabsChatTabReq, options ...larkcore.RequestOptionFunc) (*ListTabsChatTabResp, error) { 761 // 发起请求 762 apiReq := req.apiReq 763 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/chat_tabs/list_tabs" 764 apiReq.HttpMethod = http.MethodGet 765 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 766 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 767 if err != nil { 768 return nil, err 769 } 770 // 反序列响应结果 771 resp := &ListTabsChatTabResp{ApiResp: apiResp} 772 err = apiResp.JSONUnmarshalBody(resp) 773 if err != nil { 774 return nil, err 775 } 776 return resp, err 777 } 778 779 // 会话标签页排序 780 // 781 // - 会话标签页排序 782 // 783 // - 注意事项:;;- 当前消息标签页固定为第一顺位,不参与排序,但是请求体中必须包含。;;- 请求体必须包含全部的TabID 784 // 785 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-tab/sort_tabs 786 // 787 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/sortTabs_chatTab.go 788 func (c *chatTab) SortTabs(ctx context.Context, req *SortTabsChatTabReq, options ...larkcore.RequestOptionFunc) (*SortTabsChatTabResp, error) { 789 // 发起请求 790 apiReq := req.apiReq 791 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/chat_tabs/sort_tabs" 792 apiReq.HttpMethod = http.MethodPost 793 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 794 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 795 if err != nil { 796 return nil, err 797 } 798 // 反序列响应结果 799 resp := &SortTabsChatTabResp{ApiResp: apiResp} 800 err = apiResp.JSONUnmarshalBody(resp) 801 if err != nil { 802 return nil, err 803 } 804 return resp, err 805 } 806 807 // 更新会话标签页 808 // 809 // - 更新会话标签页 810 // 811 // - 注意事项:;;- 只允许更新类型为doc和url的会话标签页;;- 会话标签页的名称不超过30个字符;;- 更新doc类型时,操作者(access token对应的身份)需要拥有对应文档的权限 812 // 813 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-tab/update_tabs 814 // 815 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/updateTabs_chatTab.go 816 func (c *chatTab) UpdateTabs(ctx context.Context, req *UpdateTabsChatTabReq, options ...larkcore.RequestOptionFunc) (*UpdateTabsChatTabResp, error) { 817 // 发起请求 818 apiReq := req.apiReq 819 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/chat_tabs/update_tabs" 820 apiReq.HttpMethod = http.MethodPost 821 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 822 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 823 if err != nil { 824 return nil, err 825 } 826 // 反序列响应结果 827 resp := &UpdateTabsChatTabResp{ApiResp: apiResp} 828 err = apiResp.JSONUnmarshalBody(resp) 829 if err != nil { 830 return nil, err 831 } 832 return resp, err 833 } 834 835 // 撤销群置顶 836 // 837 // - 撤销会话中的置顶 838 // 839 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-top_notice/delete_top_notice 840 // 841 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/deleteTopNotice_chatTopNotice.go 842 func (c *chatTopNotice) DeleteTopNotice(ctx context.Context, req *DeleteTopNoticeChatTopNoticeReq, options ...larkcore.RequestOptionFunc) (*DeleteTopNoticeChatTopNoticeResp, error) { 843 // 发起请求 844 apiReq := req.apiReq 845 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/top_notice/delete_top_notice" 846 apiReq.HttpMethod = http.MethodPost 847 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 848 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 849 if err != nil { 850 return nil, err 851 } 852 // 反序列响应结果 853 resp := &DeleteTopNoticeChatTopNoticeResp{ApiResp: apiResp} 854 err = apiResp.JSONUnmarshalBody(resp) 855 if err != nil { 856 return nil, err 857 } 858 return resp, err 859 } 860 861 // 更新群置顶 862 // 863 // - 更新会话中的群置顶信息,可以将群中的某一条消息,或者群公告置顶显示。 864 // 865 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/chat-top_notice/put_top_notice 866 // 867 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/putTopNotice_chatTopNotice.go 868 func (c *chatTopNotice) PutTopNotice(ctx context.Context, req *PutTopNoticeChatTopNoticeReq, options ...larkcore.RequestOptionFunc) (*PutTopNoticeChatTopNoticeResp, error) { 869 // 发起请求 870 apiReq := req.apiReq 871 apiReq.ApiPath = "/open-apis/im/v1/chats/:chat_id/top_notice/put_top_notice" 872 apiReq.HttpMethod = http.MethodPost 873 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 874 apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...) 875 if err != nil { 876 return nil, err 877 } 878 // 反序列响应结果 879 resp := &PutTopNoticeChatTopNoticeResp{ApiResp: apiResp} 880 err = apiResp.JSONUnmarshalBody(resp) 881 if err != nil { 882 return nil, err 883 } 884 return resp, err 885 } 886 887 // 上传文件 888 // 889 // - 上传文件,可以上传视频,音频和常见的文件类型 890 // 891 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 不允许上传空文件;- 示例代码中需要自行替换文件路径和鉴权Token 892 // 893 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/file/create 894 // 895 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_file.go 896 func (f *file) Create(ctx context.Context, req *CreateFileReq, options ...larkcore.RequestOptionFunc) (*CreateFileResp, error) { 897 options = append(options, larkcore.WithFileUpload()) 898 // 发起请求 899 apiReq := req.apiReq 900 apiReq.ApiPath = "/open-apis/im/v1/files" 901 apiReq.HttpMethod = http.MethodPost 902 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 903 apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...) 904 if err != nil { 905 return nil, err 906 } 907 // 反序列响应结果 908 resp := &CreateFileResp{ApiResp: apiResp} 909 err = apiResp.JSONUnmarshalBody(resp) 910 if err != nil { 911 return nil, err 912 } 913 return resp, err 914 } 915 916 // 下载文件 917 // 918 // - 下载文件接口,只能下载应用自己上传的文件 919 // 920 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 只能下载机器人自己上传的文件;- 下载用户发送的资源,请使用[获取消息中的资源文件](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message-resource/get)接口 921 // 922 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/file/get 923 // 924 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_file.go 925 func (f *file) Get(ctx context.Context, req *GetFileReq, options ...larkcore.RequestOptionFunc) (*GetFileResp, error) { 926 // 发起请求 927 apiReq := req.apiReq 928 apiReq.ApiPath = "/open-apis/im/v1/files/:file_key" 929 apiReq.HttpMethod = http.MethodGet 930 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 931 apiResp, err := larkcore.Request(ctx, apiReq, f.service.config, options...) 932 if err != nil { 933 return nil, err 934 } 935 // 反序列响应结果 936 resp := &GetFileResp{ApiResp: apiResp} 937 // 如果是下载,则设置响应结果 938 if apiResp.StatusCode == http.StatusOK { 939 resp.File = bytes.NewBuffer(apiResp.RawBody) 940 resp.FileName = larkcore.FileNameByHeader(apiResp.Header) 941 return resp, err 942 } 943 err = apiResp.JSONUnmarshalBody(resp) 944 if err != nil { 945 return nil, err 946 } 947 return resp, err 948 } 949 950 // 上传图片 951 // 952 // - 上传图片接口,可以上传 JPEG、PNG、WEBP、GIF、TIFF、BMP、ICO格式图片 953 // 954 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) 955 // 956 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/image/create 957 // 958 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_image.go 959 func (i *image) Create(ctx context.Context, req *CreateImageReq, options ...larkcore.RequestOptionFunc) (*CreateImageResp, error) { 960 options = append(options, larkcore.WithFileUpload()) 961 // 发起请求 962 apiReq := req.apiReq 963 apiReq.ApiPath = "/open-apis/im/v1/images" 964 apiReq.HttpMethod = http.MethodPost 965 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 966 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 967 if err != nil { 968 return nil, err 969 } 970 // 反序列响应结果 971 resp := &CreateImageResp{ApiResp: apiResp} 972 err = apiResp.JSONUnmarshalBody(resp) 973 if err != nil { 974 return nil, err 975 } 976 return resp, err 977 } 978 979 // 下载图片 980 // 981 // - 下载图片资源,只能下载应用自己上传且图片类型为message的图片 982 // 983 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 只能下载机器人自己上传且图片类型为message的图片,avatar类型暂不支持下载;;- 下载用户发送的资源,请使用[获取消息中的资源文件](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message-resource/get)接口 984 // 985 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/image/get 986 // 987 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_image.go 988 func (i *image) Get(ctx context.Context, req *GetImageReq, options ...larkcore.RequestOptionFunc) (*GetImageResp, error) { 989 // 发起请求 990 apiReq := req.apiReq 991 apiReq.ApiPath = "/open-apis/im/v1/images/:image_key" 992 apiReq.HttpMethod = http.MethodGet 993 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 994 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 995 if err != nil { 996 return nil, err 997 } 998 // 反序列响应结果 999 resp := &GetImageResp{ApiResp: apiResp} 1000 // 如果是下载,则设置响应结果 1001 if apiResp.StatusCode == http.StatusOK { 1002 resp.File = bytes.NewBuffer(apiResp.RawBody) 1003 resp.FileName = larkcore.FileNameByHeader(apiResp.Header) 1004 return resp, err 1005 } 1006 err = apiResp.JSONUnmarshalBody(resp) 1007 if err != nil { 1008 return nil, err 1009 } 1010 return resp, err 1011 } 1012 1013 // 发送消息 1014 // 1015 // - 给指定用户或者会话发送消息,支持文本、富文本、可交互的[消息卡片](/ssl:ttdoc/ukTMukTMukTM/uczM3QjL3MzN04yNzcDN)、群名片、个人名片、图片、视频、音频、文件、表情包。 1016 // 1017 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 给用户发送消息,需要机器人对用户有[可用性](/ssl:ttdoc/home/introduction-to-scope-and-authorization/availability);- 给群组发送消息,需要机器人在群中 1018 // 1019 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create 1020 // 1021 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_message.go 1022 func (m *message) Create(ctx context.Context, req *CreateMessageReq, options ...larkcore.RequestOptionFunc) (*CreateMessageResp, error) { 1023 // 发起请求 1024 apiReq := req.apiReq 1025 apiReq.ApiPath = "/open-apis/im/v1/messages" 1026 apiReq.HttpMethod = http.MethodPost 1027 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 1028 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1029 if err != nil { 1030 return nil, err 1031 } 1032 // 反序列响应结果 1033 resp := &CreateMessageResp{ApiResp: apiResp} 1034 err = apiResp.JSONUnmarshalBody(resp) 1035 if err != nil { 1036 return nil, err 1037 } 1038 return resp, err 1039 } 1040 1041 // 撤回消息 1042 // 1043 // - 机器人撤回机器人自己发送的消息或群主撤回群内消息。 1044 // 1045 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ,撤回消息时机器人仍需要在会话内;- 机器人可以撤回单聊和群组内,自己发送 且 发送时间不超过1天(24小时)的消息;- 若机器人要撤回群内他人发送的消息,则机器人必须是该群的群主、管理员 或者 创建者,且消息发送时间不超过1年;- 无法撤回通过「批量发送消息接口」发送的消息 1046 // 1047 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/delete 1048 // 1049 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/delete_message.go 1050 func (m *message) Delete(ctx context.Context, req *DeleteMessageReq, options ...larkcore.RequestOptionFunc) (*DeleteMessageResp, error) { 1051 // 发起请求 1052 apiReq := req.apiReq 1053 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id" 1054 apiReq.HttpMethod = http.MethodDelete 1055 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 1056 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1057 if err != nil { 1058 return nil, err 1059 } 1060 // 反序列响应结果 1061 resp := &DeleteMessageResp{ApiResp: apiResp} 1062 err = apiResp.JSONUnmarshalBody(resp) 1063 if err != nil { 1064 return nil, err 1065 } 1066 return resp, err 1067 } 1068 1069 // 获取指定消息的内容 1070 // 1071 // - 通过 message_id 查询消息内容 1072 // 1073 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 机器人必须在群组中 1074 // 1075 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/get 1076 // 1077 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_message.go 1078 func (m *message) Get(ctx context.Context, req *GetMessageReq, options ...larkcore.RequestOptionFunc) (*GetMessageResp, error) { 1079 // 发起请求 1080 apiReq := req.apiReq 1081 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id" 1082 apiReq.HttpMethod = http.MethodGet 1083 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1084 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1085 if err != nil { 1086 return nil, err 1087 } 1088 // 反序列响应结果 1089 resp := &GetMessageResp{ApiResp: apiResp} 1090 err = apiResp.JSONUnmarshalBody(resp) 1091 if err != nil { 1092 return nil, err 1093 } 1094 return resp, err 1095 } 1096 1097 // 获取会话历史消息 1098 // 1099 // - 获取会话(包括单聊、群组)的历史消息(聊天记录)。 1100 // 1101 // - 接口级别权限默认只能获取单聊(p2p)消息,如果需要获取群组(group)消息,应用还必须拥有 ***获取群组中所有消息*** 权限 1102 // 1103 // - - 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 获取消息时,机器人必须在群组中 1104 // 1105 // - 官网API文档链接:https://open.feishu.cn/document/ukTMukTMukTM/uADO3YjLwgzN24CM4cjN 1106 // 1107 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/list_message.go 1108 func (m *message) List(ctx context.Context, req *ListMessageReq, options ...larkcore.RequestOptionFunc) (*ListMessageResp, error) { 1109 // 发起请求 1110 apiReq := req.apiReq 1111 apiReq.ApiPath = "/open-apis/im/v1/messages" 1112 apiReq.HttpMethod = http.MethodGet 1113 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1114 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1115 if err != nil { 1116 return nil, err 1117 } 1118 // 反序列响应结果 1119 resp := &ListMessageResp{ApiResp: apiResp} 1120 err = apiResp.JSONUnmarshalBody(resp) 1121 if err != nil { 1122 return nil, err 1123 } 1124 return resp, err 1125 } 1126 func (m *message) ListByIterator(ctx context.Context, req *ListMessageReq, options ...larkcore.RequestOptionFunc) (*ListMessageIterator, error) { 1127 return &ListMessageIterator{ 1128 ctx: ctx, 1129 req: req, 1130 listFunc: m.List, 1131 options: options, 1132 limit: req.Limit}, nil 1133 } 1134 1135 // 更新应用发送的消息 1136 // 1137 // - 更新应用已发送的消息卡片内容。 1138 // 1139 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 当前仅支持更新 **卡片消息**;- **不支持更新批量消息**;- 只支持对所有人都更新的[「共享卡片」](ukTMukTMukTM/uAjNwUjLwYDM14CM2ATN),也即需要在卡片的`config`属性中,显式声明`"update_multi":true`。<br>如果你只想更新特定人的消息卡片,必须要用户在卡片操作交互后触发,开发文档参考[「独享卡片」](/ssl:ttdoc/ukTMukTMukTM/uYjNwUjL2YDM14iN2ATN#49904b71);- 单条消息更新频控为**5QPS** 1140 // 1141 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/patch 1142 // 1143 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/patch_message.go 1144 func (m *message) Patch(ctx context.Context, req *PatchMessageReq, options ...larkcore.RequestOptionFunc) (*PatchMessageResp, error) { 1145 // 发起请求 1146 apiReq := req.apiReq 1147 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id" 1148 apiReq.HttpMethod = http.MethodPatch 1149 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 1150 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1151 if err != nil { 1152 return nil, err 1153 } 1154 // 反序列响应结果 1155 resp := &PatchMessageResp{ApiResp: apiResp} 1156 err = apiResp.JSONUnmarshalBody(resp) 1157 if err != nil { 1158 return nil, err 1159 } 1160 return resp, err 1161 } 1162 1163 // 查询消息已读信息 1164 // 1165 // - 查询消息的已读信息。 1166 // 1167 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 只能查询机器人自己发送,且发送时间不超过7天的消息;- 查询消息已读信息时机器人仍需要在会话内;- 本接口不支持查询批量消息 1168 // 1169 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/read_users 1170 // 1171 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/readUsers_message.go 1172 func (m *message) ReadUsers(ctx context.Context, req *ReadUsersMessageReq, options ...larkcore.RequestOptionFunc) (*ReadUsersMessageResp, error) { 1173 // 发起请求 1174 apiReq := req.apiReq 1175 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/read_users" 1176 apiReq.HttpMethod = http.MethodGet 1177 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1178 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1179 if err != nil { 1180 return nil, err 1181 } 1182 // 反序列响应结果 1183 resp := &ReadUsersMessageResp{ApiResp: apiResp} 1184 err = apiResp.JSONUnmarshalBody(resp) 1185 if err != nil { 1186 return nil, err 1187 } 1188 return resp, err 1189 } 1190 1191 // 回复消息 1192 // 1193 // - 回复指定消息,支持文本、富文本、卡片、群名片、个人名片、图片、视频、文件等多种消息类型。 1194 // 1195 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 回复私聊消息,需要机器人对用户有可用性;- 回复群组消息,需要机器人在群中 1196 // 1197 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/reply 1198 // 1199 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/reply_message.go 1200 func (m *message) Reply(ctx context.Context, req *ReplyMessageReq, options ...larkcore.RequestOptionFunc) (*ReplyMessageResp, error) { 1201 // 发起请求 1202 apiReq := req.apiReq 1203 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/reply" 1204 apiReq.HttpMethod = http.MethodPost 1205 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 1206 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1207 if err != nil { 1208 return nil, err 1209 } 1210 // 反序列响应结果 1211 resp := &ReplyMessageResp{ApiResp: apiResp} 1212 err = apiResp.JSONUnmarshalBody(resp) 1213 if err != nil { 1214 return nil, err 1215 } 1216 return resp, err 1217 } 1218 1219 // 发送应用内加急 1220 // 1221 // - 对指定消息进行应用内加急。 1222 // 1223 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 只能加急机器人自己发送的消息;- 加急时机器人仍需要在会话内 1224 // 1225 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/urgent_app 1226 // 1227 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/urgentApp_message.go 1228 func (m *message) UrgentApp(ctx context.Context, req *UrgentAppMessageReq, options ...larkcore.RequestOptionFunc) (*UrgentAppMessageResp, error) { 1229 // 发起请求 1230 apiReq := req.apiReq 1231 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/urgent_app" 1232 apiReq.HttpMethod = http.MethodPatch 1233 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1234 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1235 if err != nil { 1236 return nil, err 1237 } 1238 // 反序列响应结果 1239 resp := &UrgentAppMessageResp{ApiResp: apiResp} 1240 err = apiResp.JSONUnmarshalBody(resp) 1241 if err != nil { 1242 return nil, err 1243 } 1244 return resp, err 1245 } 1246 1247 // 发送电话加急 1248 // 1249 // - 对指定消息进行应用内加急与电话加急 1250 // 1251 // - 特别说明:;- 通过接口产生的电话加急将消耗企业的加急额度,请慎重调用。;- 通过租户管理后台-费用中心-短信/电话加急 可以查看当前额度。;- 默认接口限流为50 QPS,请谨慎调用。 1252 // 1253 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 只能加急机器人自己发送的消息;- 加急时机器人仍需要在会话内 1254 // 1255 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/urgent_phone 1256 // 1257 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/urgentPhone_message.go 1258 func (m *message) UrgentPhone(ctx context.Context, req *UrgentPhoneMessageReq, options ...larkcore.RequestOptionFunc) (*UrgentPhoneMessageResp, error) { 1259 // 发起请求 1260 apiReq := req.apiReq 1261 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/urgent_phone" 1262 apiReq.HttpMethod = http.MethodPatch 1263 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1264 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1265 if err != nil { 1266 return nil, err 1267 } 1268 // 反序列响应结果 1269 resp := &UrgentPhoneMessageResp{ApiResp: apiResp} 1270 err = apiResp.JSONUnmarshalBody(resp) 1271 if err != nil { 1272 return nil, err 1273 } 1274 return resp, err 1275 } 1276 1277 // 发送短信加急 1278 // 1279 // - 对指定消息进行应用内加急与短信加急。 1280 // 1281 // - 特别说明:;- 通过接口产生的短信加急将消耗企业的加急额度,请慎重调用。;- 通过租户管理后台-费用中心-短信/电话加急 可以查看当前额度。;- 默认接口限流为50 QPS,请谨慎调用。 1282 // 1283 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 只能加急机器人自己发送的消息;- 加急时机器人仍需要在会话内 1284 // 1285 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/urgent_sms 1286 // 1287 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/urgentSms_message.go 1288 func (m *message) UrgentSms(ctx context.Context, req *UrgentSmsMessageReq, options ...larkcore.RequestOptionFunc) (*UrgentSmsMessageResp, error) { 1289 // 发起请求 1290 apiReq := req.apiReq 1291 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/urgent_sms" 1292 apiReq.HttpMethod = http.MethodPatch 1293 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1294 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1295 if err != nil { 1296 return nil, err 1297 } 1298 // 反序列响应结果 1299 resp := &UrgentSmsMessageResp{ApiResp: apiResp} 1300 err = apiResp.JSONUnmarshalBody(resp) 1301 if err != nil { 1302 return nil, err 1303 } 1304 return resp, err 1305 } 1306 1307 // 添加消息表情回复 1308 // 1309 // - 给指定消息添加指定类型的表情回复(reaction即表情回复,本说明文档统一用“reaction”代称)。 1310 // 1311 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 待添加reaction的消息要真实存在,不能被撤回;- 给消息添加reaction,需要reaction的发送方(机器人或者用户)在消息所在的会话内 1312 // 1313 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message-reaction/create 1314 // 1315 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/create_messageReaction.go 1316 func (m *messageReaction) Create(ctx context.Context, req *CreateMessageReactionReq, options ...larkcore.RequestOptionFunc) (*CreateMessageReactionResp, error) { 1317 // 发起请求 1318 apiReq := req.apiReq 1319 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/reactions" 1320 apiReq.HttpMethod = http.MethodPost 1321 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 1322 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1323 if err != nil { 1324 return nil, err 1325 } 1326 // 反序列响应结果 1327 resp := &CreateMessageReactionResp{ApiResp: apiResp} 1328 err = apiResp.JSONUnmarshalBody(resp) 1329 if err != nil { 1330 return nil, err 1331 } 1332 return resp, err 1333 } 1334 1335 // 删除消息表情回复 1336 // 1337 // - 删除指定消息的表情回复(reaction即表情回复,本说明文档统一用“reaction”代称)。 1338 // 1339 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 只能删除真实存在的reaction,并且删除reaction请求的操作者必须是reaction的原始添加者 1340 // 1341 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message-reaction/delete 1342 // 1343 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/delete_messageReaction.go 1344 func (m *messageReaction) Delete(ctx context.Context, req *DeleteMessageReactionReq, options ...larkcore.RequestOptionFunc) (*DeleteMessageReactionResp, error) { 1345 // 发起请求 1346 apiReq := req.apiReq 1347 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/reactions/:reaction_id" 1348 apiReq.HttpMethod = http.MethodDelete 1349 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 1350 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1351 if err != nil { 1352 return nil, err 1353 } 1354 // 反序列响应结果 1355 resp := &DeleteMessageReactionResp{ApiResp: apiResp} 1356 err = apiResp.JSONUnmarshalBody(resp) 1357 if err != nil { 1358 return nil, err 1359 } 1360 return resp, err 1361 } 1362 1363 // 获取消息表情回复 1364 // 1365 // - 获取指定消息的特定类型表情回复列表(reaction即表情回复,本说明文档统一用“reaction”代称)。 1366 // 1367 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app) ;- 待获取reaction信息的消息要真实存在,不能被撤回;- 获取消息的reaction,需要request的授权主体(机器人或者用户)在消息所在的会话内 1368 // 1369 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message-reaction/list 1370 // 1371 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/list_messageReaction.go 1372 func (m *messageReaction) List(ctx context.Context, req *ListMessageReactionReq, options ...larkcore.RequestOptionFunc) (*ListMessageReactionResp, error) { 1373 // 发起请求 1374 apiReq := req.apiReq 1375 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/reactions" 1376 apiReq.HttpMethod = http.MethodGet 1377 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser, larkcore.AccessTokenTypeTenant} 1378 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1379 if err != nil { 1380 return nil, err 1381 } 1382 // 反序列响应结果 1383 resp := &ListMessageReactionResp{ApiResp: apiResp} 1384 err = apiResp.JSONUnmarshalBody(resp) 1385 if err != nil { 1386 return nil, err 1387 } 1388 return resp, err 1389 } 1390 func (m *messageReaction) ListByIterator(ctx context.Context, req *ListMessageReactionReq, options ...larkcore.RequestOptionFunc) (*ListMessageReactionIterator, error) { 1391 return &ListMessageReactionIterator{ 1392 ctx: ctx, 1393 req: req, 1394 listFunc: m.List, 1395 options: options, 1396 limit: req.Limit}, nil 1397 } 1398 1399 // 获取消息中的资源文件 1400 // 1401 // - 获取消息中的资源文件,包括音频,视频,图片和文件,**暂不支持表情包资源下载**。当前仅支持 100M 以内的资源文件的下载。 1402 // 1403 // - 注意事项:;- 需要开启[机器人能力](/ssl:ttdoc/home/develop-a-bot-in-5-minutes/create-an-app);- 机器人和消息需要在同一会话中;- 请求的 file_key 和 message_id 需要匹配;- 暂不支持获取合并转发消息中的子消息的资源文件;- 获取群组消息时,应用必须拥有 获取群组中所有的消息 权限 1404 // 1405 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message-resource/get 1406 // 1407 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/imv1/get_messageResource.go 1408 func (m *messageResource) Get(ctx context.Context, req *GetMessageResourceReq, options ...larkcore.RequestOptionFunc) (*GetMessageResourceResp, error) { 1409 // 发起请求 1410 apiReq := req.apiReq 1411 apiReq.ApiPath = "/open-apis/im/v1/messages/:message_id/resources/:file_key" 1412 apiReq.HttpMethod = http.MethodGet 1413 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 1414 apiResp, err := larkcore.Request(ctx, apiReq, m.service.config, options...) 1415 if err != nil { 1416 return nil, err 1417 } 1418 // 反序列响应结果 1419 resp := &GetMessageResourceResp{ApiResp: apiResp} 1420 // 如果是下载,则设置响应结果 1421 if apiResp.StatusCode == http.StatusOK { 1422 resp.File = bytes.NewBuffer(apiResp.RawBody) 1423 resp.FileName = larkcore.FileNameByHeader(apiResp.Header) 1424 return resp, err 1425 } 1426 err = apiResp.JSONUnmarshalBody(resp) 1427 if err != nil { 1428 return nil, err 1429 } 1430 return resp, err 1431 }