如何为我的Telegram机器人设置Webhook而不是轮询(Polling)?
3 个回答
设置webhook比轮询稳定很多,适合你们的高频营销场景。
第一步,需要一个公网的URL,比如用Heroku/阿里云等部署。
第二步,在Telegram BotFather中发送/setwebhook命令,然后是你的服务地址。
第三步,保证你服务器支持POST请求,并返回200给Telegram。
需要注意的:
1. Webhook是单向通信,有消息才会触发,不是轮询一直询问
2. url必须带token参数,如https://xxx.com/path?token=123:abc
3. 不要忽略update_id,避免漏消息
目前大多数正规项目都是webhook了,建议直接迁移。
1. 先到Telegram官方文档中看看webhook的设置步骤,文档中步骤非常详细。
2. 服务器必须支持https协议。
3. 设置webhook的地址要带上token,地址格式是https://yourdomain.com/yourpath?secret_token=xxx。
4. 本地测试正常上线,记得要定时给webhook发getUpdates清空队列。
5. 推荐nginx反向代理+防火墙,防止被攻击。不会的随时来问。
设置Webhook并不难,主要分为三个步骤:
1. 先到你的服务器开个端口,确保能公网访问。建议使用Nginx做反向代理。
2. 通过`setWebhook`接口绑定域名地址,例如`https://你域名/secret-path`,Secret Token记得一起带过去。
3. 最后写一个接收post请求的处理程序,把Telegram发过来的消息体解析出来就可以了。
注意只有备案的域名支持Webhook,服务器必须24小时在线。Webhook相对于轮询延迟更小,断线也不会丢失消息,适合营销等高并发场景。现在普遍都用这个了。