后端前端【免费下载链接】remark42comment engine项目地址https://gitcode.com/gh_mirrors/re/remark42点击查看免费下载导读本文以 remark42 仓库中 vendored 的 slack-go/slack CHANGELOG 为骨架系统梳理 Slack 官方 Go SDKgithub.com/slack-go/slack从 v0.17.3 到 v0.29.0 的版本演进覆盖 Block Kit 新组件、流式消息块 API、Agent UI 块、光标分页迁移、破坏性变更及迁移代码示例。remark42 正是通过 backend/app/notify/slack.go 经由 go-pkgz/notify 间接依赖 slack-go/slack在 backend/go.mod 中锁定 v0.29.0因此本文所涉及的 API 形态、分页语义与消息选项行为直接决定 Slack 评论通知这一功能链路的正确性。读完本文你将掌握该 SDK 的核心调用模式、主要破坏性变更的迁移方法并能对照 remark42 的实际使用点判断升级影响。背景slack-go/slack 在 remark42 中的位置remark42 的 Slack 评论通知并不直接 import slack-go/slack而是通过 go-pkgz/notify 封装调用调用链如下backend/app/notify/slack.go → go-pkgz/notify 的 Slack 客户端 → github.com/slack-go/slackbackend/app/notify/slack.go 定义Slack类型组装slack:channelName?title...attachmentText...titleLink...格式的 destination 并调用Sendgo-pkgz/notify 的 slack.go 使用slack.Client、slack.MsgOptionText、slack.MsgOptionAttachments发送消息并用GetConversations将频道名解析为频道 IDbackend/go.mod 中github.com/slack-go/slack v0.29.0 // indirect锁定版本。也就是说CHANGELOG 中与PostMessage、MsgOption*、GetConversations、分页相关的所有变更都会直接或间接影响 remark42 的 Slack 通知功能。例如 CHANGELOG v0.21.1 修复了MsgOptionAttachments/MsgOptionBlocks的重复序列化问题——这正是 go-pkgz/notify 发送附件所依赖的路径v0.21.0 移除的IM结构、v0.18.0-rc1 引入的GetAllConversations光标分页也都与频道/会话枚举逻辑息息相关。版本时间线与总体演进脉络CHANGELOG 遵循 Keep a Changelog 格式与 Semantic Versioning文件开头的[Unreleased]段标记了尚未正式发布的变更。截至本仓库 vendored 快照主要版本节点如下版本日期主题关键词v0.29.02026-08-15slackevents的ActionToken字段修复v0.28.02026-08-15Block Kitcontainer块、PostMessageWithResponse、文件共享Channelsv0.27.02026-06-27data_visualization块、Enterprise 交互 payload 字段v0.26.02026-06-14is_ext_shared_channel、HeaderBlock.level、CardBlock增强v0.25.02026-06-05TableBlock.Rows类型破坏性变更v0.24.02026-05-24DataTableBlockv0.23.12026-05-10签名校验拒绝空 secret 的安全修复v0.23.02026-04-22CardBlock/CarouselBlock/AlertBlock、流式消息 chunks API、DispatchEvent导出v0.22.02026-04-12assistant.search.context全量参数、PKCE OAuth、Socket Mode 免重连v0.21.12026-04-08附件/块重复序列化修复、MessageEvent类型辅助方法v0.21.02026-04-05移除IM结构与若干 no-op 方法、admin.teams.settings.*、响应头回调v0.20.02026-03-21workflow_id/trigger_id、RichTextQuote.Borderv0.19.02026-03-04可选 HTTP 重试、task_card/planagent 块v0.18.02026-02-21focus_on_load、Work Objects、admin.roles.*、Go 1.26 CIv0.18.0-rc22026-01-28Admin Conversations API、Audit Logs、文件上传 API 迁移v0.18.0-rc12026-01-26Huddle、流式聊天 API、Data Access API、光标分页、Table 块从时间线可以看出三条主线Block Kit 持续扩张新增多种块类型与元素、紧跟 Slack 平台新 API流式消息、Data Access、Agent UI、以及大量破坏性变更集中在分页与结构体字段上需要升级者重点处理。版本 0.29.0Data Access API 事件令牌修复v0.29.0 是 CHANGELOG 记录的当前最新稳定版仅含一项 Fixedslackevents的AppMentionEvent和MessageEvent新增ActionToken字段直接读取事件对象中的action_token。背景是Slack 在app_mention和message事件中会发送该令牌但旧版只把它建模在嵌套的assistant_thread内部导致令牌被静默丢弃使用 bot-token 调用assistant.search.context会失败并报invalid_action_token。修复后既有的AssistantThread字段保持不变#1577、#1580。版本 0.28.0Container 块、完整消息响应与一键文件共享v0.28.0 的三项新增container块新增ContainerBlock配套NewContainerBlock构造函数、WithTitle/WithRichTextTitle/WithSubtitle/WithIcon/WithWidth/WithCollapsible/WithHeaderDivider/WithBlockID等 fluent builder、AddChildBlock辅助方法与Validate方法#1574PostMessageWithResponse/PostMessageWithResponseContext从chat.postMessage响应中返回完整Message对象而不只是 channel 和 timestamp从而能访问Message.ThreadTimestamp等仅响应才有的字段#1572CompleteUploadExternalParameters与UploadFileParameters新增Channels可在一次files.completeUploadExternal请求中把单个上传文件分享给最多 100 个会话#1579。版本 0.27.0 与 0.26.0数据可视化块与交互细节补全v0.27.0 新增data_visualization块的DataVisualizationBlock支持同时交互 payload 的Team现在会保留 Enterprise 组织的enterprise_id与enterprise_nameSlack 在交互 payload 的team对象中包含这些字段时不再丢弃。v0.26.0 的变更集中在三处slackevents.EventsAPIEvent新增反序列化is_ext_shared_channel字段ParseEvent会将其传播给回调事件#1564、#1565HeaderBlock新增可选level字段取值 1–4对应 H1–H4 标题层级并新增HeaderBlockOptionLevelbuilder#1563CardBlock新增slack_icon字段通过新的SlackIconObject组合对象提供NewSlackIconObject构造函数与WithSlackIconbuilder和subtext字段WithSubtextbuilderslack_icon与icon互斥#1562。版本 0.25.0 与 0.24.0表格类块的重塑v0.25.0破坏性变更TableBlock.Rows从[][]*RichTextBlock改为[][]TableCell此前table块会丢失raw_text、raw_number与null单元格。升级到该版本后凡构造或解析TableBlock的代码必须改用新的单元格类型#1558。v0.24.0 新增DataTableBlock支持data_table块配套NewDataTableBlock、AddRow、raw-text/raw-number/rich-text 单元格构造函数以及WithPageSize、WithRowHeaderColumnIndexbuilder同时NewTaskCardBlock与NewPlanBlock对可变参数选项做 nil 防护#1236。版本 0.23.xAgent UI 块、流式消息与安全加固v0.23.0 是本轮迭代的功能高地围绕 Slack 2026 年 4 月 16 日发布的 Block Kit 新块Agent UI 方向展开CardBlock与CarouselBlock分别通过NewCardBlock函数式选项 WithTitle/WithSubtitle/WithBody/WithIcon/WithHeroImage/WithActionsbuilder与NewCarouselBlock变长*CardBlock列表 WithBlockID/AddCard构造。两者都接入Blocks.UnmarshalJSON保证往返一致性并复用既有的ImageBlockElement/ButtonBlockElement/BlockElements类型。AlertBlock通过NewAlertBlock构造body 为*TextBlockObject严重级别用AlertBlockOptionLevel枚举AlertLevelDefault/AlertLevelInfo/AlertLevelWarning/AlertLevelError/AlertLevelSuccess块 ID 用AlertBlockOptionBlockID。注意AlertBlock必须通过流式 chunks API 投递chat.postMessage会以Unsupported block type拒绝它。流式消息 chunks APIchat.startStream/chat.appendStream/chat.stopStream新增chunks参数配套MsgOptionChunks、StreamChunk接口与四种 chunk 类型MarkdownTextChunk、TaskUpdateChunk、PlanUpdateChunk、BlocksChunk各有New*Chunk构造函数。这是流式 Block Kit 内容尤其是新 Agent UI 块的官方传输通道。对应源码见 chat_stream_chunks.go其中定义了markdown_text、task_update、plan_update、blocks四种StreamChunkType常量。MsgOptionTaskDisplayMode控制chat.startStream中任务 chunk 的渲染方式接受TaskDisplayModeTimeline时间线或TaskDisplayModePlan分组计划。AssistantThreadsSetStatusParameters新增Username/IconURL/IconEmoji由SetAssistantThreadsStatusContext转发给assistant.threads.setStatus#1549 相关。SocketmodeHandler.DispatchEvent导出此前未导出的dispatcher现可公开调用方便集成测试在无真实 WebSocket 连接的情况下驱动已注册的 handler旧dispatcher作为薄包装保留以兼容。v0.23.1 的安全修复值得注意NewSecretsVerifier现在拒绝空签名密钥防止应用配置错误时接受伪造的请求签名。版本 0.22.0搜索 API 扩充、PKCE 与 Socket Mode 稳定性assistant.search.context全量参数补齐Sort、SortDir、Before、After、Highlight、IncludeContextMessages、IncludeDeletedUsers、IncludeMessageBlocks、IncludeArchivedChannels、DisableSemanticSearch、Modifiers、TermClauses并新增AssistantSearchContextFile、AssistantSearchContextChannel、AssistantSearchContextMessageContext响应类型完整匹配 Real-Time Search API。富文本样式RichTextSectionTextStyle新增Underline/Highlight/ClientHighlight/UnlinkRichTextSectionUserGroupElement新增Style。OAuth PKCERFC 7636GetOAuthV2Response新增OAuthOptionCodeVerifier选项提供GenerateCodeVerifier()与GenerateCodeChallenge()辅助函数client_secret为空时在GetOAuthV2ResponseContext与RefreshOAuthV2TokenContext中有条件地省略。修复ChannelTypes与ContentTypes现在发送逗号分隔值而非重复的表单键Socket Mode 收到畸形 JSON 消息不再强制重连而是输出错误并保持连接。版本 0.21.x序列化修复与弃用清理v0.21.1 修复了影响所有发消息路径的重复序列化问题#1547MsgOptionAttachments/MsgOptionBlocks中的附件和块此前被序列化两次——一次写入类型化结构字段JSON 响应 URL 路径一次写入url.Values表单 POST 路径。修复后表单路径的序列化移至formSender.BuildRequestContext内部每个 sender 各自拥有 marshal消除了冗余的json.Marshal调用。注意UnsafeApplyMsgOptions现在直接返回config.values其中不再包含attachments/blocks键marshal 推迟到发送时。该函数本身被文档标记为 unsupported。此外 v0.21.1 为MessageEvent新增ChannelTypeChannel/ChannelTypeGroup/ChannelTypeIM/ChannelTypeMPIM常量及IsChannel()/IsGroup()/IsIM()/IsMpIM()方法调用方不再需要比较原始字符串。v0.21.0 是本库一次集中的弃用清理弃用slackevents.ParseActionEvent无法解析block_actionspayload返回反序列化错误应改用slack.InteractionCallbackjson.Unmarshal或 HTTP 请求场景用slack.InteractionCallbackParse——InteractionCallback覆盖所有交互类型slackevents.MessageAction、MessageActionEntity、MessageActionResponse仅支持遗留interactive_messagepayload。移除破坏性IM结构及内部类型imChannel、imResponseFull——IsUserDeleted字段移入ConversationIM 类型会话由Conversation承载。实际影响很小因为IM从未被任何公共 API 方法返回Info.GetBotByID、GetUserByID、GetChannelByID、GetGroupByID、GetIMByID——这些方法早已弃用并无条件返回nil现在直接移除。新增admin.teams.settings.*API 系列含TeamDiscoverability枚举Open/InviteOnly/Closed/Unlisted包级 OAuth 函数的OAuthOptionAPIURL可覆盖默认 Slack API URL便于对本地 HTTP 服务器做集成测试GetOpenIDConnectUserInfo/GetOpenIDConnectUserInfoContext通过openid.connect.userInfo获取用户身份信息Slack API 响应头访问AuthTestResponse.Header字段以及全局OptionOnResponseHeaders(func(method string, headers http.Header))回调DNDOptionTeamID工作区迁移后GetDNDInfo/GetDNDTeamInfo必需team_idUpdateUserGroupMembersList/UpdateUserGroupMembersListContext接受[]string而非逗号分隔字符串SetUserProfile/SetUserProfileContextOptionWarnings警告回调RTM 事件扩充user_status_changed、user_huddle_changed、user_profile_changed、sh_room_join、sh_room_leave、sh_room_update、channel_updated及UserChangeEvent.CacheTS/EventTSworkflows.featuredAPIUser的IsConnectorBot/IsWorkflowBot、UserProfile.GuestInvitedBy、User.UsernameMessageEvent.Blocks与AppMentionEvent的Blocks/Attachments/Files/Upload字段socketmode handler 的HandleShortcut/HandleViewSubmission/HandleViewClosed以及BlockFromJSON/MustBlockFromJSON从原始 JSON 字符串创建块可直接使用 Block Kit Builder 输出原始 JSON 在 marshal 时保留。其他破坏性变更部分admin错误信息从大写开头改为小写匹配 Go 惯例WebhookMessage.UnfurlLinks/UnfurlMedia从bool改为*bool此前false会被omitempty静默剥离无法显式关闭 unfurlUser.Has2FA改为*boolnil表示缺失/未知false表示显式关闭true表示开启。// Has2FA 指针化后的读取方式 if user.Has2FA ! nil *user.Has2FA { /* 已启用 2FA */ }版本 0.20.0消息元数据与富文本修复新增Message的workflow_id与trigger_id字段部分消息类型如bot_message会携带CHANGELOG 明确警告这两个字段不在任何官方文档中使用需谨慎。RichTextQuote.Border可选边框开关与RichTextPreformatted.Language代码块语法高亮。修复破坏性RichTextQuote与RichTextPreformatted不再内嵌RichTextSection改为展平结构直接使用这两个结构体的代码需要调整。版本 0.19.0可选的 HTTP 重试机制v0.19.0 引入 Web API 的可选 HTTP 重试默认关闭按需开启OptionRetry(n)仅对 429 限流做 n 次重试OptionRetryConfig(cfg)完整控制可覆盖 5xx、连接错误并配合指数退避。对应实现见 retry.goRetryConfig.MaxRetries为 0 时禁用重试Handlers为 nil 时仅重试 429NewRateLimitErrorRetryHandlerAllBuiltinRetryHandlers(cfg)覆盖连接错误 429ConnectionOnlyRetryHandlers(cfg)仅连接错误追加NewServerErrorRetryHandler(cfg)可重试 5xx。源码注释还指出流式上传文件上传等不可重试body 只发送一次常规表单/JSON API 调用在匹配 handler 时429、5xx、连接错误会重试429 缺少Retry-After头时最小等待为 1 秒minRetryAfter429并支持抖动jitter避免惊群效应。v0.19.0 还新增task_card与plan两种 agent 块#1536并将 CI 切换到 golangci-lint。版本 0.18.0 系列平台新 API 与大规模破坏性变更v0.18.0正式版与 v0.18.0-rc1/rc2 共同构成了向 Slack 新平台的全面对齐focus_on_load补齐 static/external/users/conversations/channels select、multi-select 变体、datepicker、timepicker、plain_text_input、checkboxes、radio_buttons、number_input 等元素的聚焦支持#1519File新增PlainText/PreviewPlainText邮件文件对象不再丢弃纯文本正文User/UserProfile/EnterpriseUser补齐who_can_share_contact_card、always_active、pronouns、image_1024、is_custom_image、status_text_canonical、huddle_state、huddle_state_expiration_ts、start_date、is_primary_owner等字段修复UserProfile.Skype的 JSON tag 拼写skyp→skypeWork ObjectsChat unfurl 的 Work Object 元数据、实体详情flexpane、entity_details_requested事件及WorkObjectMetadata/WorkObjectEntity/WorkObjectExternalRef类型#1529admin.roles.*admin.roles.listAssignments、addAssignments、removeAssignments#1520rc2 新增Audit Logs 示例#1144、全面的admin.conversations.*支持archive/unarchive/create/delete/rename/invite/search/lookup/getTeams/convertToPrivate/convertToPublic/disconnectShared/setTeams、bulkArchive/bulkDelete/bulkMove、偏好、留存管理、访问限制、EKM 频道信息等见 admin_conversations.gorc1 新增Huddle 支持HuddleRoom/HuddleParticipantEvent/HuddleRecording、Call 块数据CallBlockData/CallBlockDataV1/CallBlockIconURLs、Chat Streaming API、Data Access API、GetAllConversations自动分页含限流与服务器错误处理、Table 块、context_actions块、workflow_button块元素、SetAssistantThreadsStatus的loading_messages参数、附件图片字段ImageBytes/ImageHeight/ImageWidth、RecordChannel会话属性、CreateChannelCanvas标题参数、slacktest 的PostEphemeral、远程文件PreviewImageName。文件上传 API 迁移重要破坏性变更rc2 中 Slack 于 2025 年 11 月 12 日停用files.uploadAPI因此#1481移除弃用的UploadFile、UploadFileContext、FileUploadParameters重命名UploadFileV2→UploadFile、UploadFileV2Context→UploadFileContext、UploadFileV2Parameters→UploadFileParameters旧 API 移除后不再需要 V2 后缀新增修复UploadFile现在按步骤包装错误GetUploadURLExternal/UploadToURL/CompleteUploadExternal调用方可定位三个上传步骤中失败的一步修复GetAuditLogs端点应使用api.slack.com而非slack.com/api并新增OptionAuditAPIURL供测试使用。光标分页迁移三处集中破坏性变更v0.18.0-rc1/v0.21.0 将多个列表 API 从Count/Page分页迁移到光标分页对应 Slack 服务端已不再返回paging数据只返回response_metadata.next_cursor// 迁移前Count/Page *Paging 返回 params : slack.NewListReactionsParameters() params.Count 100 params.Page 2 items, paging, err : api.ListReactions(params) // 迁移后Limit/Cursor nextCursor 返回 params : slack.NewListReactionsParameters() params.Limit 100 items, nextCursor, err : api.ListReactions(params) // 翻页params.Cursor nextCursor同类变更还包括ListStars/GetStarredStarsParameters的Cursor/LimitTeamID、GetAccessLogsAccessLogParameters的Cursor/LimitBefore以及GetUsers的光标分页。cursor 分页模式正是 remark42 依赖链中 go-pkgz/notify 遍历会话的既有模式——backend/vendor/github.com/go-pkgz/notify/slack.go 的findChannelIDByName循环调用GetConversations并不断推进params.Cursor next直到next 。其他修复与变更PublishView不再发送空 hashImageBlockElement校验imageURL或SlackFile二选一rich text 的 section channel 元素正确返回 channelKickUserFromConversation错误按 map 结构解析#1471破坏性GetReactions返回ReactedItem内含 item 本身与resp.Reactions反应列表Settings.Interactivity与Settings.EventSubscriptions改为指针最小 Go 版本提升至1.24#1504。面向升级者的实践要点结合 CHANGELOG 与 remark42 的实际用法升级 slack-go/slack 时应重点核对以下事项消息发送路径remark42 通知链路使用的PostMessageContextMsgOptionTextMsgOptionAttachments在 v0.21.1 后序列化行为发生变化——表单 POST 路径的 marshal 移入 sender 内部。若自己直接调用UnsafeApplyMsgOptions检查参数注意attachments/blocks键不再存在于返回的 values 中。分页语义任何使用Count/Page的旧代码ListReactions、ListStars、GetAccessLogs、GetUsers必须迁移到Cursor/Limit且返回值从*Paging变为 next cursor 字符串。cursor 模式可与 go-pkgz/notify 的GetConversations循环模式类比backend/vendor/github.com/go-pkgz/notify/slack.go。指针化字段WebhookMessage.UnfurlLinks/UnfurlMedia、User.Has2FA已改为*bool直接赋值或直接读取的代码需要适配。文件上传files.upload已被 Slack 停用所有旧版UploadFile*调用必须改用新签名即原UploadFileV2系列。已移除 APIIM结构、Info.Get*ByID系列已删除slackevents.ParseActionEvent已弃用改用InteractionCallback。流式与 Agent UI 块AlertBlock、CardBlock、CarouselBlock等新块若要通过chat.postMessage发送会被拒绝必须走chat.startStream/chat.appendStream/chat.stopStream的 chunks 参数对应源码 chat_stream_chunks.go。错误文本匹配admin相关错误信息统一为小写开头Socket Mode 的Ack()/Send()自 v0.18.0-rc2 起返回error大载荷超 20KB 会被 Slack 丢弃并报错调用点需处理返回值。总结从 v0.17.3 到 v0.29.0slack-go/slack 完成了从“经典 Web API 封装”到“覆盖流式消息、Agent UI 块、Data Access API 与全面光标分页”的平台级演进。对 remark42 这样的消费方而言最直接的影响集中在三处消息发送选项的序列化修复、列表 API 的分页迁移以及围绕文件上传与已移除结构的破坏性变更。完整变更记录以 CHANGELOG.md 为准本文所述源码佐证均可在 backend/vendor/github.com/slack-go/slack/ 目录中进一步查阅。赞分享后端前端【免费下载链接】remark42comment engine项目地址https://gitcode.com/gh_mirrors/re/remark42点击查看免费下载相关推荐RedwoodJS cookie 依赖升级至 1.0.2SerializeOptions 类型变更与 CookieJar 迁移指南RedwoodJS cookie 依赖升级至 1.0.2 SerializeOptions 类型变更与 CookieJar 迁移指南 本篇变更说明基于 Red后端前端Web框架开发工具Akka 2.9.x 迁移至 2.10.x 完整指南依赖升级、JFR 事件与 LoggerOps 变更解析Akka 2.9.x 迁移至 2.10.x 完整指南依赖升级、JFR 事件与 LoggerOps 变更解析 Akka 2.10.x 是 Akka Core 的后端并发编程异步编程Litestar 3.0 变更日志深度解读ASGIMiddleware 迁移、依赖瘦身与中断性变更迁移指南Litestar 3.0 变更日志深度解读ASGIMiddleware 迁移、依赖瘦身与中断性变更迁移指南 本文以 Litestar 仓库 3.0.0 变更日后端Web框架上一篇Qwen3开源大模型震撼发布双模式推理革新AI体验多语言智能体能力领跑行业下一篇企业级Sentry自托管多租户部署指南实现安全资源隔离与精细权限控制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考