{"id":48912022,"url":"https://github.com/shanghaobo/http-win-notice","last_synced_at":"2026-04-17T00:07:02.814Z","repository":{"id":190150348,"uuid":"682039313","full_name":"shanghaobo/http-win-notice","owner":"shanghaobo","description":"一个运行在Windows本机的服务，监听http接口请求触发windows消息通知","archived":false,"fork":false,"pushed_at":"2024-10-28T06:55:16.000Z","size":8189,"stargazers_count":29,"open_issues_count":1,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-29T20:48:55.722Z","etag":null,"topics":["gin","go","http","toast","windows"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shanghaobo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-08-23T09:59:42.000Z","updated_at":"2024-11-01T02:31:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"99727e2a-68a3-4ef5-ad86-83925cf70279","html_url":"https://github.com/shanghaobo/http-win-notice","commit_stats":null,"previous_names":["shanghaobo/http-win-notice"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/shanghaobo/http-win-notice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shanghaobo%2Fhttp-win-notice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shanghaobo%2Fhttp-win-notice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shanghaobo%2Fhttp-win-notice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shanghaobo%2Fhttp-win-notice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shanghaobo","download_url":"https://codeload.github.com/shanghaobo/http-win-notice/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shanghaobo%2Fhttp-win-notice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31909237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"ssl_error","status_checked_at":"2026-04-16T18:21:47.142Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gin","go","http","toast","windows"],"created_at":"2026-04-17T00:07:02.076Z","updated_at":"2026-04-17T00:07:02.798Z","avatar_url":"https://github.com/shanghaobo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003ch2 align=\"center\"\u003eHTTP Windows消息通知\u003c/h2\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![GitHub](https://img.shields.io/github/license/shanghaobo/http-win-notice)\n![GitHub release (with filter)](https://img.shields.io/github/v/release/shanghaobo/http-win-notice)\n![GitHub repo size](https://img.shields.io/github/repo-size/shanghaobo/http-win-notice)\n![GitHub Repo stars](https://img.shields.io/github/stars/shanghaobo/http-win-notice)\n![GitHub all releases](https://img.shields.io/github/downloads/shanghaobo/http-win-notice/total)\n![GitHub last commit (branch)](https://img.shields.io/github/last-commit/shanghaobo/http-win-notice/master)\n\n\u003c/div\u003e\n\n\u003e 一个运行在 Windows 本机的服务，监听 http 接口请求触发 windows 消息通知\n\n## 功能\n\n- [x] http 接口请求\n- [x] Windows 消息弹窗\n- [x] 历史消息记录\n- [x] 开机启动\n- [x] 托盘控制\n- [x] 端口配置\n- [x] frp 内网穿透集成\n- [x] 公网调用\n- [x] 自定义通知按钮\n\n## 架构\n\n![](images/jiagou.png)\n\n- 内网环境下，局域网内可通过内网 ip+端口调用，如`http://192.168.124.11:19000`\n- 公网环境可选择开启，配置开启后可通过公网调用，如`http://123.123.1.2:19001`，此时公网调用请求会转发到本机的 web 服务，从而触发消息通知。详情查看[公网调用](#公网调用)\n\n## 使用\n\n1. 下载对应版本的`http-win-notice`压缩包，[下载地址](https://github.com/shanghaobo/http-win-notice/releases/latest)\n2. 解压后双击`http-win-notice.exe`启动\n3. 右击托盘图标勾选开机启动\n4. 通知调用\n\n   - 方式 1\n\n     浏览器输入链接`http://127.0.0.1:19000/api/toast?msg=哈喽，我是新的消息通知`\n\n   - 方式 2 (python 调用示例)\n\n     ```python\n     import requests\n\n     title = \"自定义通知标题\"\n     msg = \"我是测试消息通知啦啦啦啦啦\"\n     res = requests.get(f\"http://127.0.0.1:19000/api/toast?msg={msg}\u0026title={title}\")\n     print(res.json())\n     ```\n\n     详情可见 [接口文档](#接口文档)\n\n5. 可右击托盘图标，点击配置文件修改端口号\n6. 可打开 web 界面查看历史消息记录\n\n## 效果\n\n- 程序运行\n\n  ![](images/demo3.png)\n\n- 调用 http 消息通知接口\n\n  ![](images/demo2.png)\n\n- 消息通知记录\n\n  ![](images/demo1.png)\n\n## 接口文档\n\n#### 发送通知\n\n- API: `http://hostname:port/api/toast`\n- 请求方式：`GET`\n- 请求参数\n\n| 参数名   | 默认值                 | 解释                                              |\n| -------- | ---------------------- | ------------------------------------------------- |\n| title    | 消息通知               | 通知标题                                          |\n| msg      | 这是一条测试消息       | 通知内容                                          |\n| remark   | 空                     | 备注                                              |\n| icon     | 0                      | 图标索引，配合配置文件使用                        |\n| duration | short                  | 持续时长，short-短，大概 6 秒 long-长，大概 25 秒 |\n| audio    | default                | 声音                                              |\n| button   | (默认展示全部消息按钮) | 自定义按钮（见下方【button 参数说明】）           |\n\n其中`icon`需修改配置文件，参考配置如下：\n\n```yaml\ntoast:\n  icons:\n    - logo.png\n    - logo2.png\n```\n\n此时传`icon=1`表示使用`logo2.png`图标，图标图片需放在`config.yml`同级的`images`目录内\n\n\u003cdetails\u003e\n\u003csummary\u003eaudio的参数可选值如下：\u003c/summary\u003e\n\n| 值             | 描述           |\n| -------------- | -------------- |\n| default        | Default        |\n| im             | IM             |\n| mail           | Mail           |\n| reminder       | Reminder       |\n| sms            | SMS            |\n| loopingalarm   | LoopingAlarm   |\n| loopingalarm2  | LoopingAlarm2  |\n| loopingalarm3  | LoopingAlarm3  |\n| loopingalarm4  | LoopingAlarm4  |\n| loopingalarm5  | LoopingAlarm5  |\n| loopingalarm6  | LoopingAlarm6  |\n| loopingalarm7  | LoopingAlarm7  |\n| loopingalarm8  | LoopingAlarm8  |\n| loopingalarm9  | LoopingAlarm9  |\n| loopingalarm10 | LoopingAlarm10 |\n| loopingcall    | LoopingCall    |\n| loopingcall2   | LoopingCall2   |\n| loopingcall3   | LoopingCall3   |\n| loopingcall4   | LoopingCall4   |\n| loopingcall5   | LoopingCall5   |\n| loopingcall6   | LoopingCall6   |\n| loopingcall7   | LoopingCall7   |\n| loopingcall8   | LoopingCall8   |\n| loopingcall9   | LoopingCall9   |\n| loopingcall10  | LoopingCall10  |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ebutton参数说明\u003c/summary\u003e\nbutton 参数值为 json 格式，结构如下：\n\n| 参数名 | 解释             | 额外说明                                |\n| ------ | ---------------- | --------------------------------------- |\n| name   | 按钮名称         |                                         |\n| url    | 点击按钮跳转链接 | 配置常量'$WEB_PAGE'时为消息记录页面地址 |\n\n使用自定义 button 的示例调用（Python 版）\n\n```python\nimport json\nimport requests\n\nmsg = \"测试\"\nbutton = [\n    {\n        \"name\": \"百度\",\n        \"url\": \"https://www.baidu.com\",\n    },\n    {\n        \"name\": \"全部消息\",\n        \"url\": \"$WEB_PAGE\",\n    }\n]\nbutton_text = json.dumps(button)\n\napi = f\"http://127.0.0.1:19000/api/toast?msg={msg}\u0026button={button_text}\"\nrequests.get(api)\n```\n\n\u003c/details\u003e\n\n## 公网调用\n\n- 开启公网调用需要有一台带公网 ip 的服务器\n- 配置并开启后可实现公网调用接口发送通知\n\n### 方式 1: 使用 forward（推荐）\n\n#### 服务端配置\n\n1. 下载对应的`forward-server`，[下载地址](https://github.com/shanghaobo/http-win-notice/releases/latest)\n2. 在同级目录下创建`config.yml`配置文件，参考如下：\n\n   ```yaml\n   server_port: 9919\n   token: httpwinnotice123456\n   api_port: 19009\n   api_token: httpforward123456\n   ```\n\n   - server_port: 转发服务的 socket 端口号\n   - token: 安全认证，与客户端配置保持一致，建议修改默认值\n   - api_port: 转发 api 的端口号\n   - api_token: 调用转发 api 的认证 token\n\n3. 启动转发服务（Linux 环境）\n\n   ```bash\n   chmod +x ./forward-server\n\n   # 直接启动\n   ./forward-server\n\n   # 后台启动\n   nohup ./forward-server \u003e\u003e nohup.out \u0026\n   ```\n\n#### 客户端配置\n\n1. 右击托盘图标选择`配置文件`，修改配置文件内`forward`相关内容并保存。参考配置如下：\n\n   ```yaml\n   forward:\n     enable: 1\n     server_addr: 123.123.1.1\n     server_port: 9919\n     token: httpwinnotice123456\n   ```\n\n   - enable: 0-关闭 1-开启转发服务\n   - server_addr: 转发服务器 ip\n   - server_port: 转发服务端口号\n   - token: 与服务器配置的 token 保持一致，建议修改默认值\n\n配置好后重启程序\n\n#### 测试\n\n按示例的配置，浏览器请求`http://123.123.1.1:19009?msg=哈喽`，若本机出现弹窗证明成功\n\n### 方式 2: 使用 frp 内网穿透\n\n#### 服务端配置\n\n1. 下载`frps`，选择对应服务器版本即可。[下载地址](https://github.com/fatedier/frp/releases/latest)\n2. 修改`frps.ini`配置文件，配置参考：\n\n- frps.ini\n\n```ini\n[common]\nbind_port = 7000\ntoken = httpwinnotice123456\n```\n\n3. 启动服务端：\n\n```bash\nchmod +x ./frps\n./frps -c frps.ini\n```\n\n#### 客户端配置\n\n1. 右击托盘图标选择配置目录，下载`frpc.exe`文件并移动到打开的配置目录内。[下载地址](https://github.com/fatedier/frp/releases/latest)\n2. 右击托盘图标选择配置文件，修改配置文件中`frp`相关内容并保存。参考配置如下：\n\n```yaml\nfrp:\n  enable: 1\n  server_addr: 123.123.1.2\n  server_port: 7000\n  token: httpwinnotice123456\n  remote_port: 19001\n```\n\n配置的各项解释如下：\n\n- enable: 1-开启 frp，0-关闭 frp\n- server_addr: 部署 frps 服务器的公网 ip\n- server_port: frps 服务端口号\n- token: 与服务器端配置 token 一致，建议将默认值修改\n- remote_port: 转发的远端端口号\n\n注意服务器防火墙放开对应的端口号，以上示例配置在公网调用时使用`http://123.123.1.2:19001/api/toast`\n\n配置好后重启程序即可\n\n#### 测试\n\n浏览器打开`http://123.123.1.2:19001/api/toast?msg=哈喽` 如果 windows 通知出现证明开启成功（ip 和端口号替换为自己的）\n\n## 其他\n\n#### 完整配置参考\n\n```yaml\nport: 19000\ntoast:\n  icons:\n    - logo.png\n    - logo2.png\nforward:\n  enable: 1\n  server_addr: 123.123.1.1\n  server_port: 9919\n  token: httpwinnotice123456\nfrp:\n  enable: 0\n  server_addr: 127.0.0.1\n  server_port: 7000\n  token: httpwinnotice123456\n  remote_port: 19001\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshanghaobo%2Fhttp-win-notice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshanghaobo%2Fhttp-win-notice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshanghaobo%2Fhttp-win-notice/lists"}