把 Jellyfin 、群晖、威联通 更新消息推送到QQ

把 Jellyfin 、群晖、威联通 更新消息推送到QQ

vate_room 99 2024-06-10

【webhook】把 Jellyfin 、群晖、威联通 更新消息推送到QQ

思路

让 Jellyfin 使用 LLOneBot onebot-11 协议的API接口,把更新推送到QQ。

在部署好支持OneBot协议的的QQ机器人后,就已经具备收发QQ消息的能力了。

前置步骤 onebot-11 API

先把 LLOneBot 部署好,Linux 无 GUI 可以用 NapCatQQ项目。

设置API端口

打开HTTP服务,并设置端口

LLOneBot 设置方法:

2024-06-10T10:24:20-otinisas.png

NapCatQQ 设置方法:

{
  "httpHost": "",
  "enableHttp": false,
  "httpPort": 3000,
............略....................
}

测试API

浏览器访问下面的连接,就可以测试消息是否能正常发送:

  1. 需要保证端口,和上一步设置的端口一致
  2. send_group_msg , send_group_msg 顾名思义分别对应私聊消息和群聊消息
#群聊消息
http://127.0.0.1:3000/send_group_msg?group_id=群号&message="hello"&auto_escape=false
#私聊消息:
http://127.0.0.1:3000/send_private_msg?user_id=QQ号&message="hello"&auto_escape=false

有条件的,可以构造POST请求进行测试:

#私聊消息:
curl -X POST "http://127.0.0.1:3000/send_private_msg" \
     -H "Content-Type: application/json" \
     -d '{
           "user_id": QQ号,
           "message": "hello post json"
         }'


#群聊消息
curl -X POST "http://127.0.0.1:3000/send_group_msg" \
     -H "Content-Type: application/json" \
     -d '{
           "group_id": 群号,
           "message": "hello post json"
         }'

先安装好Webhook插件,并点击进行设置

Jellyfin

设置 Jellyfin webhook 插件

2024-06-10T10:40:15-sdsyxmou.png

image-hkix.png

在Server Url里输入jellyfin服务的访问地址,

然后点击 Add Generic Destination

2024-06-10T10:42:37-gjhgvbpl.png

名字自己随便取,Url 需要注意一下,私聊消息接口用: send_private_msg 群聊用: send_group_msg

Item Type 默认是全选,可以根据自己需要进行勾选

2024-06-10T10:44:46-rrsgnihn.png

在最下方 Template空白处填入指定代码,最后在点save就大功告成了

注:私聊消息用到是user_id,并填写qq号。群聊要改成group_id

 {{#if_equals NotificationType 'ItemAdded'}} 
{
   "user_id": qq号,
   "message": "{{{SeriesName}}} 更新拉!\n[CQ:image,file={{ServerUrl}}/Items/{{SeasonId}}/Images/Primary]\n{{#if_equals ItemType 'Episode'}}S{{SeasonNumber00}}E{{EpisodeNumber00}} {{{Name}}}\n{{else}}名称:{{{Name}}} ({{Year}})\n{{/if_equals}}时长:{{RunTime}}"
}
 {{/if_equals}}

image-qqlh.png

结果演示:

2024-06-10T10:50:30-cbfdniec.jpg

小提示:jellyfin 的推送不是实时的,最好在定时任务里把 “扫描媒体库”开了。

题外话 存一下钉钉的配置

https://oapi.dingtalk.com/robot/send?access_token=

{
    "msgtype": "markdown",
    "markdown": {
        {{#if_equals NotificationType 'ItemAdded'}} 
            {{#if_equals ItemType 'Season'}}
                "title": "{{{SeriesName}}} {{{Name}}} 已添加到 {{{ServerName}}}",
            {{else}}
                {{#if_equals ItemType 'Episode'}}
                    "title": "{{{SeriesName}}} S{{SeasonNumber00}}E{{EpisodeNumber00}} {{{Name}}} 已添加到 {{{ServerName}}}",
                {{else}}
                    "title": "{{{Name}}} ({{Year}}) 已添加到 {{{ServerName}}}",
                {{/if_equals}}
            {{/if_equals}}
            "text":
"**媒体添加通知** \n\n
{{#if_equals ItemType 'Episode'}}
名称:{{{SeriesName}}} \n 
S{{SeasonNumber00}}E{{EpisodeNumber00}} {{{Name}}}\n
{{else}}
名称:{{{Name}}} ({{Year}})\n
{{/if_equals}}
链接:
{{~#if_exist Provider_imdb~}}
[IMDb](https://www.imdb.com/title/{{Provider_imdb}}/)\n
{{~/if_exist~}}

{{~#if_exist Provider_tmdb~}}
{{~#if_equals ItemType 'Movie'~}}
[TMDb](https://www.themoviedb.org/movie/{{Provider_tmdb}})\n
{{~else~}}
[TMDb](https://www.themoviedb.org/tv/{{Provider_tmdb}})\n
{{~/if_equals~}}
{{~/if_exist~}}

[Jellyfin]({{ServerUrl}}/web/index.html#!/details?id={{ItemId}}&serverId={{ServerId}})\n
时长:{{RunTime}}\n\n
{{~#if_exist Overview~}}
简介:(略)
{{~else~}}
简介:(无)
{{~/if_exist~}}"
        {{/if_equals}}

        {{#if_equals NotificationType 'PlaybackStart'}}
            "title": "{{{NotificationUsername}}} 开始播放",
            "text":
"**开始播放通知** \n\n
用户:{{{NotificationUsername}}}\n
{{#if_equals ItemType 'Episode'}}
剧集:{{{SeriesName}}} ({{Year}}) S{{SeasonNumber00}}E{{EpisodeNumber00}} - {{{Name}}}\n
{{else}}
电影:{{{Name}}} ({{Year}})\n
{{/if_equals}}
起点:{{PlaybackPosition}}\n
设备:{{DeviceName}}\n
终端:{{ClientName}}\n\n
{{~#if_exist Overview~}}
简介:{{Overview}}
{{~/if_exist~}}"
        {{/if_equals}}

        {{#if_equals NotificationType 'PlaybackStop'}}    
            "title": "{{{NotificationUsername}}} 停止播放",
            "text":
"**停止播放通知** \n\n
用户:{{{NotificationUsername}}}\n
{{#if_equals ItemType 'Episode'}}
剧集:{{{SeriesName}}} ({{Year}}) S{{SeasonNumber00}}E{{EpisodeNumber00}} - {{{Name}}}\n
{{else}}
电影:{{{Name}}} ({{Year}})\n
{{/if_equals}}
设备:{{DeviceName}}\n
终端:{{ClientName}}"
        {{/if_equals}}
    }
}

群晖

image-20240625162212221

image-20240625162326663

先到GET请求理把参数删了,然后切换到POST请求里。

image-20240625162417410

填入对应的模板即可,群聊和私聊对应的模板和IRL不同

image-20240625162548608

{
   "user_id": 123456,
   "message": "@@TEXT@@"
}

威联通

威联通的没办法了,只能强行用短信的接口。URL拼接方法参考上文,使用Get请求

"http://127.0.0.1:3000/send_private_msg?user_id=123123456&message="@@Text@@"&@@PhoneNumber@@

a60035d3-8ac3-4a36-8d8c-0eb834e4deca