
Zulip Radarr 集成指南将电影下载管理器的通知接入团队聊天【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip本指南讲解如何在 Zulip 中接入 Radarr电影自动化下载与媒体管理工具的通知推送涵盖 Webhook 机器人创建、Radarr 端连接配置、事件类型与消息格式以及底层消息模板与源码实现。读者完成后即可让电影入库、升级、抓取、删除、健康检查与版本更新等事件实时同步到指定的 Zulip 频道话题。集成概览Radarr 是面向电影管理的自动化工具负责从索引器抓取资源、通过下载客户端下载并在媒体库中导入。Zulip 通过**入站 WebhookIncoming webhook**接收 Radarr 推送的 JSON 事件负载将其转换为带话题topic的频道消息实现下载即通知的团队协作闭环。整个集成分为三层Zulip 侧创建一个 Bot 类型为Incoming webhook的机器人生成专属的 Webhook URLRadarr 侧在 Radarr 的Settings → Connect中新增 Webhook 连接填入该 URL 并选择要推送的事件场景服务端处理Zulip 的 Webhook 视图zerver/webhooks/radarr/view.py解析事件负载按事件类型生成话题与消息正文并发送到目标频道。第一步在 Zulip 中创建入站 Webhook 机器人在 Zulip 中添加一个 Bot用于接收 Radarr 通知。创建时务必选择Bot 类型Bot type为 Incoming webhook这是机器人能够接收外部 HTTP 推送的前置条件。确定 Radarr 通知要发送到的目标频道并生成集成 URL。生成的 Webhook URL 形如https://your-zulip-host.zulipchat.com/api/v1/external_channels/...说明URL 中已包含机器人身份凭据请像对待密码一样妥善保管任何拿到该 URL 的人都可以向对应频道推送消息。第二步在 Radarr 中配置 Webhook 连接打开 Radarr 管理后台进入Settings设置→ Connect连接。点击加号图标新建连接。选择Webhook类型并为其命名例如Zulip。勾选你希望接收通知的事件场景Scenarios如果需要还可以填写标签Tags实现仅通知带有特定标签的电影的细粒度过滤。配置连接参数URL填入上一步在 Zulip 生成的 Webhook URLMethod请求方法设置为POSTUsername / Password用户名/密码留空Zulip 的入站 Webhook 不需要 HTTP 基本认证点击Save保存Radarr 会立即发送一条测试消息到 Zulip验证连通性。保存成功后Zulip 频道中会收到类似下图所示的测试通知表示链路已打通支持的事件类型与消息格式Radarr 集成支持的全部事件类型定义在 view.py 的ALL_EVENT_TYPES中这些类型同时用于 Zulip 的 Webhook 事件过滤功能事件类型触发场景生成的话题topic生成的消息正文Test连接保存时的连通性测试Radarr - TestRadarr webhook has been successfully configured.ApplicationUpdateRadarr 应用版本更新Radarr - Application updateRadarr was updated from {previous_version} to {new_version}.Health健康检查出现 warning / errorHealth {level}如Health error{message}.原样拼接健康检查消息Rename电影文件重命名{movie_title}The movie {movie_title} has been renamed.Download非升级电影下载并导入媒体库{movie_title}The movie {movie_title} has been imported.Download升级已有电影被更高质量版本替换{movie_title}The movie {movie_title} has been upgraded from {old_quality} to {new_quality}.Grab资源被下载客户端抓取{movie_title}The movie {movie_title} has been grabbed.MovieDelete电影从媒体库删除{movie_title}The movie {movie_title} was deleted; its files were {also/not} deleted.MovieFileDelete单个电影文件被删除{movie_title}A file with quality {quality} for the movie {movie_title} was deleted, {reason}.MovieAdded电影被添加到媒体库{movie_title}The movie {movie_title} was added.话题topic的生成规则从源码结构看话题生成逻辑集中在get_topic_for_http_requestview.pyTest与ApplicationUpdate使用固定话题Radarr - Test、Radarr - Application updateHealth事件话题为Health {level}其中{level}取自负载顶层的level字段如warning、error其余事件一律以电影标题作为话题即RADARR_TOPIC_TEMPLATE {movie_title}从负载的movie.title字段取值。这保证了同一部电影的所有事件抓取、导入、升级、删除自动归入同一个话题便于在 Zulip 中按电影跟踪完整生命周期。消息正文的生成规则消息正文由get_body_for_http_requestview.py按事件类型分派到各自的模板函数生成关键实现细节如下升级与普通导入的区分Download事件通过负载中的isUpgrade布尔字段判断——为true时进入升级模板读取movieFile.quality作为新质量、deletedFiles[0].quality作为旧质量否则按普通导入处理删除原因的映射MovieFileDelete事件将 Radarr 的deleteReason枚举值映射为可读文本view.pymissingFromDisk→because it is missing from diskmanual→manuallyupgrade→because an upgraded version existsnoLinkedEpisodes→because it has no linked episodesmanualOverride→via manual override删除文件标记MovieDelete事件根据deletedFiles布尔值在正文中输出its files were also deleted或its files were not deleted未知事件处理当负载的eventType不在支持列表内时抛出UnsupportedWebhookEventTypeErrorZulip 会将该事件标记为不支持并记录日志而不是静默丢弃。典型事件负载示例以下依据 zerver/webhooks/radarr/fixtures 中的真实测试负载展示几类代表性事件的结构。抓取事件Grab——radarr_movie_grabbed.json{ movie: { id: 771, title: Greenland, releaseDate: 2021-02-09, folderPath: /home36/adbtech/media/Movies/Greenland (2020), tmdbId: 524047, imdbId: tt7737786 }, release: { quality: WEBRip-1080p, releaseGroup: EVO, releaseTitle: Greenland 2020 1080p AMZN WEBRip DD5 1 X 264-EVO, indexer: IP Torrents - Jackett, size: 2319282432 }, downloadClient: Deluge, downloadId: 8DAECE475EE53205C6FEDDA67F87CDBAF15BD25A, eventType: Grab }对应消息The movie Greenland has been grabbed.升级导入事件Download isUpgrade——radarr_movie_imported_upgrade.json{ movie: { title: Greenland, tmdbId: 524047, imdbId: tt7737786 }, movieFile: { quality: WEBRip-1080p, size: 2320560747 }, isUpgrade: true, deletedFiles: [ { quality: WEBRip-720p, size: 1104429335 } ], eventType: Download }对应消息The movie Greenland has been upgraded from WEBRip-720p to WEBRip-1080p.旧质量取自deletedFiles[0].quality新质量取自movieFile.quality健康检查事件Health——radarr_health_check_error.json{ level: error, message: Movie Gotham City Sirens (tmdbid 416649) was removed from TMDb, type: RemovedMovieCheck, eventType: Health }对应话题Health error、消息Movie Gotham City Sirens (tmdbid 416649) was removed from TMDb.正文末尾自动补句号。应用更新事件ApplicationUpdate——radarr_application_update.json{ previousVersion: 4.2.0.6370, newVersion: 4.2.0.6372, eventType: ApplicationUpdate }对应消息Radarr was updated from 4.2.0.6370 to 4.2.0.6372.事件过滤Filtering incoming events与大多数 Zulip Webhook 集成一致Radarr 集成支持在 Webhook URL 上通过only_events/exclude_events查询参数做事件过滤。可过滤的事件类型即上文ALL_EVENT_TYPES列出的全部 9 种ApplicationUpdate、Test、Rename、Download、Health、Grab、MovieDelete、MovieFileDelete、MovieAdded。例如在 Webhook URL 末尾追加?only_eventsGrab,Download即可让频道只接收抓取与导入相关通知屏蔽健康检查、版本更新等噪声事件使用exclude_events则相反。该机制的完整 URL 规范参见 Webhook URL 规范说明incoming-webhooks-overview 文档 中的 URL specification 一节。如何验证与调试仓库内置了针对全部事件的自动化测试位于 zerver/webhooks/radarr/tests.py每个测试用例将一个 fixture JSON 作为负载送入check_webhook同时断言话题与消息正文。例如test_radarr_health_check_error断言话题为Health error、消息为Movie Gotham City Sirens (tmdbid 416649) was removed from TMDb.test_radarr_movie_imported_upgrade断言话题为Greenland、消息为The movie Greenland has been upgraded from WEBRip-720p to WEBRip-1080p.test_radarr_movie_file_deleted断言deleteReason missingFromDisk被映射为because it is missing from disk。如果希望在自己的 Zulip 实例中快速验证可以复用这些 fixture向你的 Webhook URL 直接 POST 任一 JSON 文件内容注意Content-Type为application/json观察频道中收到的话题与消息是否符合上表。相关文档Webhook URL 完整规范Webhook URLs specificationURL 结构、认证方式与参数约定创建机器人添加 Bot 或集成生成集成 URLgenerate integration URL入站 Webhook 开发指南incoming-webhooks-walkthrough.md【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考