如何让 ngrok 工作的 Telegram webhook?

Posted

技术标签:

【中文标题】如何让 ngrok 工作的 Telegram webhook?【英文标题】:How to get Telegram webhook with ngrok working? 【发布时间】:2018-08-14 16:14:51 【问题描述】:

我正在开发一个 Telegram 机器人,并希望使用 ngrok 接收来自 webhook 的消息。

设置 webhook 有效。当我将可公开访问的域设置为 URL 时,我实际上得到了预期的消息。现在,当我知道代码正在运行时,我想将消息从 ngrok 服务器传送到我的本地 VM。

$ ngrok http telegrambot.sandbox.loc:80
ngrok by @inconshreveable                                                                                                                    (Ctrl+C to quit)

Session Status                online                                                                                                                         
Session Expires               7 hours, 59 minutes                                                                                                            
Version                       2.2.8                                                                                                                          
Region                        United States (us)                                                                                                             
Web Interface                 http://127.0.0.1:4040                                                                                                          
Forwarding                    http://0955b8f3.ngrok.io -> telegrambot.sandbox.loc:80                                                                         
Forwarding                    https://0955b8f3.ngrok.io -> telegrambot.sandbox.loc:80                                                                        

Connections                   ttl     opn     rt1     rt5     p50     p90                                                                                    
                              0       0       0.00    0.00    0.00    0.00

嗯。现在我设置了 webhook 并得到了类似的响应


    "ok":true,
    "result":
        "url":"https://a200f5f7.ngrok.io",
        "has_custom_certificate":false,
        "pending_update_count":0,
        "max_connections":40
    

ngrok 的 CLI 输出:

HTTP Requests                                                                                                                                                
-------------                                                                                                                                                

POST /                         502 Bad Gateway                                                                                                               
POST /                         502 Bad Gateway                                                                                                               
POST /                         502 Bad Gateway                                                                                                               
POST /                         502 Bad Gateway 

我没有收到任何奖励消息。然后我将主机名添加到/etc/hosts

127.0.0.1       telegrambot.sandbox.loc

现在我明白了

HTTP Requests                                                                                                                                                
-------------                                                                                                                                                

POST /                         405 Not Allowed                                                                                                               
POST /                         405 Not Allowed                                                                                                               
POST /                         405 Not Allowed                                                                                                               
POST /                         405 Not Allowed                                                                                                               
POST /                         405 Not Allowed                                                                                                               
POST /                         405 Not Allowed                                                                                                               
GET  /favicon.ico              404 Not Found                                                                                                                 
GET  /                         200 OK           

如何正确设置和使用 ngrok 并从 Telegram 机器人获取消息转发到本地系统?


附加信息:

我还尝试让 ngrok 在我的可公开访问的服务器上工作。该域受 SSL 保护,生产系统不需要此转发。我只是想看看它如何/是否会起作用。

ngrok http mybot.myserver.com:80

输出:

ngrok by @inconshreveable                                                                                                                                                                                                    (Ctrl+C to quit)

Session Status                online
Session Expires               7 hours, 56 minutes
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://22cf6597.ngrok.io -> mybot.myserver.com:80
Forwarding                    https://22cf6597.ngrok.io -> mybot.myserver.com:80

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

结果(无论有没有/etc/hosts 条目)似乎都可以:

HTTP Requests
-------------

POST /                         200 OK
POST /                         200 OK
POST /                         200 OK
POST /                         200 OK

但定义的 URI 似乎仍然没有被触发。

【问题讨论】:

【参考方案1】:

你可以试试这个:

ngrok http telegrambot.sandbox.loc:80 -host-header=telegrambot.sandbox.loc

【讨论】:

以上是关于如何让 ngrok 工作的 Telegram webhook?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 ngrok 在本地测试我的 Telegram Bot

Telegram Bot(ngrok) 部署到heroku

我怎样才能让 Ngrok 域正常工作

无效的 webhook url 在 Telegram bot 中指定错误

Ngrok 如何转发到特定的 URL?

无法让 Twilio 应用程序与 ngrok 一起正常工作