Skip to content

消息管理(租户权限)-(FeishuTenantV1Message)

功能描述

消息即飞书聊天中的一条消息。使用消息管理 API 对消息进行发送、回复、编辑、撤回、转发以及查询等操作。支持发送文本、富文本、卡片、群名片、个人名片、图片、视频、音频、文件、表情包等多种消息类型。

本接口使用租户权限(TenantAccessToken),适合服务端应用代表企业/组织进行操作。

参考文档

函数列表

消息管理

函数名称功能描述认证方式HTTP 方法
SendMessageAsync发送消息租户令牌POST
ReplyMessageAsync回复消息租户令牌POST
EditMessageAsync编辑消息租户令牌PUT
ReceiveMessageAsync转发消息租户令牌POST
MergeReceiveMessageAsync合并转发消息租户令牌POST
ReceiveThreadsAsync转发话题租户令牌POST
CreateMessageFollowUpAsync添加消息跟随气泡租户令牌POST
GetMessageReadUsesAsync获取消息已读用户租户令牌GET
GetHistoryMessageAsync获取历史消息租户令牌GET
GetContentListByMessageIdAsync根据ID获取消息内容租户令牌GET
GetMessageFile获取消息资源文件(小文件)租户令牌GET
GetMessageLargeFile获取消息资源文件(大文件)租户令牌GET

文件管理

函数名称功能描述认证方式HTTP 方法
DownFileAsync下载文件(小文件)租户令牌GET
DownLargeFileAsync下载文件(大文件)租户令牌GET
DownImageAsync下载图片(小文件)租户令牌GET
DownLargeImageAsync下载图片(大文件)租户令牌GET
UploadFileAsync上传文件租户令牌POST
UploadImageAsync上传图片租户令牌POST

消息加急

函数名称功能描述认证方式HTTP 方法
MessageUrgentAppAsync应用内加急租户令牌PATCH
MessageUrgentSMSAsync短信加急租户令牌PATCH
MessageUrgentPhoneAsync电话加急租户令牌PATCH

URL 预览

函数名称功能描述认证方式HTTP 方法
UpdateUrlPreviewAsync更新 URL 预览租户令牌POST

继承自父接口(IFeishuV1Message)

函数名称功能描述认证方式HTTP 方法
RevokeMessageAsync撤回消息租户令牌DELETE
AddMessageReactionsAsync添加表情回复租户令牌POST
GetMessageReactionsPageListAsync获取表情回复列表租户令牌GET
DeleteMessageReactionsAsync删除表情回复租户令牌DELETE
PinMessageAsyncPin 消息租户令牌POST
DeletePinMessageAsync移除 Pin租户令牌DELETE
GetPinMessagePageListAsync获取 Pin 消息列表租户令牌GET

函数详细内容

发送消息

函数签名

csharp
Task<FeishuApiResult<MessageDataResult>?> SendMessageAsync(
    [Body] SendMessageRequest sendMessageRequest,
    [Query("receive_id_type")] string receive_id_type = "open_id",
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
sendMessageRequestSendMessageRequest发送消息请求体
├─ ReceiveIdstring消息接收者ID,根据 receive_id_type 类型填写
├─ MsgTypestring消息类型:text/post/image/file/audio/media/share_chat/share_user/interactive/system
└─ Contentobject消息内容,根据 MsgType 变化
receive_id_typestring用户ID类型:open_id/union_id/user_id/email/chat_id,默认 open_id
cancellationTokenCancellationToken取消操作令牌

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "message_id": "om_dc13264520392913993dd051dba21dcf",
    "root_id": "om_xxxxxxxxxxxxxxxx",
    "parent_id": "om_xxxxxxxxxxxxxxxx",
    "thread_id": "omt_xxxxxxxxxxxxxxxx",
    "msg_type": "text",
    "create_time": "1609094735000",
    "update_time": "1609094735000",
    "deleted": false,
    "updated": false,
    "chat_id": "oc_xxxxxxxxxxxxxxxx",
    "sender": {
      "sender_id": {
        "open_id": "ou_xxxxxxxxxxxxxxxx",
        "union_id": "on_xxxxxxxxxxxxxxxx",
        "user_id": "xxxxxxxx"
      },
      "sender_type": "user",
      "tenant_key": "xxxxxxxx"
    },
    "body": {
      "content": "{\"text\":\"Hello World\"}"
    }
  }
}

代码示例

csharp
// 发送文本消息给用户
public class MessageService
{
    private readonly IFeishuTenantV1Message _messageClient;

    public MessageService(IFeishuTenantV1Message messageClient)
    {
        _messageClient = messageClient;
    }

    public async Task SendTextMessageAsync(string userOpenId, string content)
    {
        var request = new SendMessageRequest
        {
            ReceiveId = userOpenId,
            MsgType = "text",
            Content = new MessageTextContent
            {
                Text = content
            }
        };

        var result = await _messageClient.SendMessageAsync(request);
        
        if (result?.Data != null)
        {
            Console.WriteLine($"消息发送成功,ID: {result.Data.MessageId}");
        }
    }

    // 发送卡片消息
    public async Task SendCardMessageAsync(string chatId)
    {
        var request = new SendMessageRequest
        {
            ReceiveId = chatId,
            MsgType = "interactive",
            Content = new MessageCardContent
            {
                Card = new Card
                {
                    Header = new Header
                    {
                        Title = new Title { Content = "审批通知" }
                    },
                    Elements = new List<Element>
                    {
                        new MarkdownElement { Content = "您的请假申请已通过审批" },
                        new ActionElement 
                        { 
                            Actions = new List<Action>
                            {
                                new ButtonAction { Label = "查看详情", Url = "https://example.com" }
                            }
                        }
                    }
                }
            }
        };

        var result = await _messageClient.SendMessageAsync(request, receive_id_type: "chat_id");
        Console.WriteLine($"卡片消息发送: {result?.Data?.MessageId}");
    }
}

回复消息

函数签名

csharp
Task<FeishuApiResult<MessageDataResult>?> ReplyMessageAsync(
    [Path] string message_id,
    [Body] ReplyMessageRequest replyMessageRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
message_idstring待回复的消息 ID
replyMessageRequestReplyMessageRequest回复消息请求体
├─ Contentobject回复内容
└─ MsgTypestring消息类型
cancellationTokenCancellationToken取消操作令牌

代码示例

csharp
// 回复用户消息
public async Task ReplyToUserAsync(string originalMessageId, string replyContent)
{
    var request = new ReplyMessageRequest
    {
        MsgType = "text",
        Content = new MessageTextContent
        {
            Text = replyContent
        }
    };

    var result = await _messageClient.ReplyMessageAsync(originalMessageId, request);
    Console.WriteLine($"回复成功: {result?.Data?.MessageId}");
}

编辑消息

函数签名

csharp
Task<FeishuApiResult<MessageDataResult>?> EditMessageAsync(
    [Path] string message_id,
    [Body] EditMessageRequest editMessageRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

说明

  • 仅支持编辑文本和富文本消息
  • 卡片消息请使用更新卡片接口

转发消息

函数签名

csharp
Task<FeishuApiResult<ReceiveMessageResult>?> ReceiveMessageAsync(
    [Path] string message_id,
    [Body] ReceiveMessageRequest receiveMessageRequest,
    [Query("receive_id_type")] string receive_id_type = "open_id",
    [Query("uuid")] string? uuid = null,
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
message_idstring待转发的消息 ID
receiveMessageRequestReceiveMessageRequest转发请求体
└─ ReceiveIdstring接收者 ID
receive_id_typestring接收者ID类型,默认 open_id
uuidstring?去重标识,相同 uuid 1小时内只能转发成功一次
cancellationTokenCancellationToken取消操作令牌

获取历史消息

函数签名

csharp
Task<FeishuApiPageListResult<HistoryMessageData>?> GetHistoryMessageAsync(
    [Query("container_id_type")] string container_id_type,
    [Query("container_id")] string container_id,
    [Query("start_time")] string? start_time = null,
    [Query("end_time")] string? end_time = null,
    [Query("sort_type")] string? sort_type = "ByCreateTimeAsc",
    [Query("page_size")] int page_size = 10,
    [Query("page_token")] string? page_token = null,
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
container_id_typestring容器类型:chat(单聊/群聊)/ thread(话题)
container_idstring容器 ID
start_timestring?起始时间,秒级时间戳
end_timestring?结束时间,秒级时间戳
sort_typestring?排序方式:ByCreateTimeAsc/ByCreateTimeDesc
page_sizeint分页大小,默认10
page_tokenstring?分页标记
cancellationTokenCancellationToken取消操作令牌

代码示例

csharp
// 获取群聊历史消息
public async Task GetChatHistoryAsync(string chatId)
{
    var result = await _messageClient.GetHistoryMessageAsync(
        container_id_type: "chat",
        container_id: chatId,
        start_time: "1608594809",
        end_time: "1609296809",
        sort_type: "ByCreateTimeDesc",
        page_size: 50
    );

    if (result?.Data?.Items != null)
    {
        foreach (var message in result.Data.Items)
        {
            Console.WriteLine($"[{message.CreateTime}] {message.Sender?.SenderId?.OpenId}: {message.Body?.Content}");
        }
    }
}

撤回消息

函数签名

csharp
Task<FeishuNullDataApiResult?> RevokeMessageAsync(
    [Path] string message_id,
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
message_idstring待撤回的消息 ID
cancellationTokenCancellationToken取消操作令牌

说明

  • 机器人可以撤回自己发送的消息
  • 群主可以撤回群内的指定消息

上传文件

函数签名

csharp
Task<FeishuApiResult<FileUploadResult>?> UploadFileAsync(
    [FormContent] UploadMessageFileRequest uploadFileRequest,
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
uploadFileRequestUploadMessageFileRequest文件上传请求体
├─ FileNamestring文件名
├─ FileTypestring文件类型:mp4/pdf/doc/xls...
└─ FileStream/FileInfo文件流或文件信息
cancellationTokenCancellationToken取消操作令牌

响应

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "file_key": "file_456a92d6-c6ea-4de4-ac3f-7afcf44ac78g"
  }
}

代码示例

csharp
// 上传并发送文件
public async Task SendFileMessageAsync(string userOpenId, string filePath)
{
    // 上传文件
    var uploadRequest = new UploadMessageFileRequest
    {
        FileName = Path.GetFileName(filePath),
        FileType = "pdf",
        File = new FileInfo(filePath)
    };

    var uploadResult = await _messageClient.UploadFileAsync(uploadRequest);
    
    if (uploadResult?.Data?.FileKey != null)
    {
        // 发送文件消息
        var sendRequest = new SendMessageRequest
        {
            ReceiveId = userOpenId,
            MsgType = "file",
            Content = new MessageFileContent
            {
                FileKey = uploadResult.Data.FileKey
            }
        };

        await _messageClient.SendMessageAsync(sendRequest);
    }
}

消息加急(应用内)

函数签名

csharp
Task<FeishuApiResult<MessageUrgentResult>?> MessageUrgentAppAsync(
    [Path] string message_id,
    [Body] MessageUrgentRequest sendMessageRequest,
    [Query("receive_id_type")] string user_id_type = "open_id",
    CancellationToken cancellationToken = default);

认证:租户令牌 (TenantAccessToken)

参数

参数名类型必填说明
message_idstring待加急的消息 ID
sendMessageRequestMessageUrgentRequest加急请求体
└─ UserIdListList<string>需要加急的用户ID列表
user_id_typestring用户ID类型,默认 open_id
cancellationTokenCancellationToken取消操作令牌

说明

  • 加急仅在飞书客户端内通知
  • 每个用户每天接收加急的次数有限制