使用 pyTelegramBotAPI 将电报机器人部署到 Heroku 时使用开放端口

问题描述

在尝试托管使用 pyTelegramBotAPI 库和 aiohttp webhooks 编写的 Telegram bot 时,我遇到了一个问题:Telegram 仅支持开放端口 80、88、443 和 8443 上的 webhooks。同时,Heroku 文档说: 每个 Web 进程只绑定到一个端口,并侦听来自该端口的请求。要绑定的端口由 Heroku 指定为 PORT 环境变量。 那么有没有办法在 Heroku 上使用 webhooks 部署电报机器人?我从 pyTelegramBotAPI 的 github repo 稍微修改了这个示例代码

import os
import ssl
import requests
import telebot
from aiohttp import web

WEBHOOK_HOST = 'pdf-tg-bot.herokuapp.com'
WEBHOOK_PORT = os.getenv('PORT',default=8443)  # 443,80,88 or 8443 (port need to be 'open')
WEBHOOK_LISTEN = '0.0.0.0'

WEBHOOK_SSL_CERT = './webhook_cert.pem'  # Path to the ssl certificate
WEBHOOK_SSL_PRIV = './webhook_pkey.pem'  # Path to the ssl private key

WEBHOOK_URL_BASE = "https://{}:{}".format(WEBHOOK_HOST,WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/{}/".format(TOKEN)

app = web.Application()
bot = telebot.TeleBot(TOKEN,parse_mode=None)

@bot.message_handler(commands=['start','help'])
def send_welcome(message):
    bot.reply_to(message,"Run /new to create a new document.")

# some other message handlers

# Build ssl context
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain(WEBHOOK_SSL_CERT,WEBHOOK_SSL_PRIV)

# Start aiohttp server
web.run_app(
    app,host=WEBHOOK_LISTEN,port=WEBHOOK_PORT,ssl_context=context,)

当然,Heroku 将 Web 应用程序绑定到 $PORT 并且它在 https://0.0.0.0 上运行:(Heroku 给应用程序提供的任何端口)。但这不适用于 Telegram!如果我尝试手动将其绑定到端口 8443 WEBHOOK_PORT = 8443,正如预期的那样,我收到 Heroku 错误 Error R10 (Boot timeout) -> Web process Failed to bind to $PORT within 60 seconds of launch。我的 procfileweb: python main.py。 我该怎么办?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...