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  }