个人有推送服务的需求,目前手机能收到推送的软件也就 微信/邮箱/Telegram
微信可以使用方糖 Server酱,但是微信和邮箱的体验并不是很好
最后就选择了Telegram,经过搜索后找到了2个推送机器人的源码
- https://github.com/Fndroid/tg_push_bot
- https://github.com/n1try/telegram-middleman-bot
第一个是国人开发的基于Node.js的服务,第二个是歪果仁的Go版
经过一段时间折腾之后我选择了国人的这个程序,并增加了几个功能
创建机器人
@BotFather 通过BotFather创建自己的机器人,这一步是为了获取token
初步准备
获取源码
1 2
| git clone https://github.com/DkWyatt/tg_push_bot.git cd tg_push_bot
|
创建Sqlite3数据库
1 2 3 4
| apt install sqlite3 -y sqlite3 bot.db sqlite> CREATE TABLE users (chatId int unique, chatToken text unique); sqlite> .quit
|
创建配置文件 config.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| https = {} bot = {} ui = {}
https.domain = '0.0.0.0' // 域名 https.privateKey = 'xxx.key' // Key文件 https.certificate = 'xxx.crt' // CSR文件
bot.token = 'https://api.telegram.org/bot{token}/' // BotFather返回的Token,以/结尾
ui.startHint = '您的推送链接: \r\nhttps://tgbot.szc.me/sendMessage/%s' // 用户发送/start时返回的内容,%s表示用户唯一URL ui.stopHint = "用户记录已经删除,旧链接已经失效\r\n如需继续发送消息,请输入/start重新获取" ui.userNotExistHint = 'no user' // 用户不存在时的返回内容 ui.httpsTestHint = 'hello from nodejs with https' ui.errorHint = 'error' // 错误提示
module.exports = { https: https, bot: bot, ui: ui }
|
修改程序运行端口
将server.js 197行443端口修改为8443
1
| httpsServer.listen(8443, config.https.domain, () => {
|
配置服务环境
安装Node.js
1 2 3 4 5 6
| curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs npm install #安装依赖 npm install -g pm2 #安装pm2模块 pm2 start server.js #运行服务 pm2 startup #设置开机启动
|
配置Nginx反向代理
vhost目录下新建一个配置文件,相关数据替换成自己的网站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| server { listen 443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/ssl.cer; ssl_certificate_key /usr/local/nginx/conf/ssl/ssl.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; server_name your.domain; #access_log /data/wwwlogs/your.domain_nginx.log combined; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true;
proxy_redirect off; # Socket.IO Support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
location / { proxy_pass https://127.0.0.1:8443; } }
|
然后重启nginx
设置Bot webhook地址
浏览器访问下面地址,将token和域名替换成自己的地址
1
| https://api.telegram.org/bot{token}/setWebhook?url=https://{domain}/inlineQuery
|
再通过下面链接检查webhook是否正常
1
| https://api.telegram.org/bot{token}/getWebhookInfo
|
完成
添加自己的机器人,输入/start就能获取自己的推送链接了
推荐使用json格式发送数据
1
| curl -H "Content-Type: application/json" -d '{"text":"HelloWorld","disable_notification": true }' -X POST https://tgbot.szc.me/sendMessage/:Token
|
具体用法可以参考项目 Redeme
这作者一开始没说明白怎么搭建,结果发现没法用,最后还是弄第二个源码的时候发现webhook没设置
最后附上两个机器人