【webhook】把 Jellyfin 、群晖、威联通 更新消息推送到QQ
思路
让 Jellyfin 使用 LLOneBot onebot-11 协议的API接口,把更新推送到QQ。
在部署好支持OneBot协议的的QQ机器人后,就已经具备收发QQ消息的能力了。
前置步骤 onebot-11 API
先把 LLOneBot 部署好,Linux 无 GUI 可以用 NapCatQQ项目。
设置API端口
打开HTTP服务,并设置端口
LLOneBot 设置方法:
NapCatQQ 设置方法:
{
"httpHost": "",
"enableHttp": false,
"httpPort": 3000,
............略....................
}
测试API
浏览器访问下面的连接,就可以测试消息是否能正常发送:
- 需要保证端口,和上一步设置的端口一致
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 插件
在Server Url里输入jellyfin服务的访问地址,
然后点击 Add Generic Destination
名字自己随便取,Url 需要注意一下,私聊消息接口用: send_private_msg
群聊用: send_group_msg
Item Type
默认是全选,可以根据自己需要进行勾选
在最下方 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}}
结果演示:
小提示: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}}
}
}
群晖
先到GET请求理把参数删了,然后切换到POST请求里。
填入对应的模板即可,群聊和私聊对应的模板和IRL不同
{
"user_id": 123456,
"message": "@@TEXT@@"
}
威联通
威联通的没办法了,只能强行用短信的接口。URL拼接方法参考上文,使用Get请求
"http://127.0.0.1:3000/send_private_msg?user_id=123123456&message="@@Text@@"&@@PhoneNumber@@