【问题标题】:Deploying Python Telegram Bot on Heroku在 Heroku 上部署 Python Telegram Bot
【发布时间】:2020-05-22 09:45:08
【问题描述】:

我正在尝试在 heroku 上部署我的 python 电报机器人。一切都很好,heroku 说它部署成功。但是,当我在电报中尝试该机器人时,它不起作用。我在下面附上了部署代码。有人可以帮忙吗?谢谢。我的 Procfile 包含以下内容: web: python3鼓励.py

`import os
TOKEN = "Token"
PORT = int(os.environ.get('PORT', '5000'))
updater = Updater("Token")

updater.start_webhook(listen="0.0.0.0",
                    port=PORT,
                    url_path="Token")
updater.bot.setWebhook("https://xxx.herokuapp.com/" + "Token")
updater.idle()`

【问题讨论】:

  • 看起来不错,启动时是否出现任何错误?仔细检查您的“令牌”(必须与 BotFather 提供的令牌匹配。也许将代码与您的处理程序一起发布
  • 如果我用“updater.start_polling()”替换上面的代码并在本地运行它,它就可以工作。所以很确定令牌是正确的。上面的令牌应该是字符串吗?
  • 令牌是一个很长的字符串,您可以通过 BotFather 获得。

标签: heroku python-telegram-bot


【解决方案1】:

我发现这篇文章在 Heroku 上部署 Telegram 机器人时很有帮助:Creating Telegram Bot and Deploying it to Heroku(通过将代码与文档进行比较来确保代码是最新的 guide to Version 12.0

根据上面提供的文章,我尝试使用以下设置重现您的案例:

encouragements.py:

from telegram.ext import Updater, CommandHandler, CallbackContext
from telegram import Update
import os

TOKEN = ""
HEROKU_APP_NAME=""

# def run(updater):
    # updater.start_polling()
def run(updater):
    PORT = int(os.environ.get("PORT", "8443"))
    updater.start_webhook(listen="0.0.0.0",
                          port=PORT,
                          url_path=TOKEN)
    updater.bot.set_webhook("https://{}.herokuapp.com/{}".format(HEROKU_APP_NAME, TOKEN))

def start_handler(update: Update, context: CallbackContext):
    update.message.reply_text("Hello from Python!\nPress /random to get random number")


if __name__ == '__main__':
    updater = Updater(TOKEN, use_context=True)
    updater.dispatcher.add_handler(CommandHandler("start", start_handler))
    run(updater)

Pipfile:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
python-telegram-bot = "*"

[requires]
python_version = "3.7"

Procfile:

web: python encouragements.py

而且电报机器人确实在响应/start 消息。我在部署到 Heroku 时关注了这篇文章:https://devcenter.heroku.com/articles/getting-started-with-nodejs

我还建议检查 Heroku 方面发生的情况:

heroku logs -t --app <your-heroku-app-name>

日志应该告诉您您的令牌是否正确,您的依赖项是否正确加载,以及您的代码是否在运行时没有产生任何错误。

让我知道它是否有效:)

【讨论】:

  • 我试过了,但是在部署时我从 heroku 日志中得到一个错误(请注意,令牌名称不是以下错误中的实际令牌,我已更改它并使用随机一个说明: url_path=851239789:AAEL_0ccRKimoVinAGewqdda13hgbrHEGA1a) ^ SyntaxError: invalid syntax
  • 嗯,如果它说“SyntaxError”似乎是一个与python相关的问题,它是你粘贴的完整日志吗?您可以提供带有堆栈跟踪等的完整日志吗?将 HEROKU_APP_NAME、TOKEN 注入 Heroku URL 时,您是否使用相同的 format 方法?看看这个帖子:stackoverflow.com/questions/24237111/…
  • 我尝试了该链接并得到了非常奇怪的结果。当我删除该 url 行时,即使该行不存在,日志也会返回相同的错误。这就是我进行部署的方式:1)heroku 登录 2)heroku 创建鼓励 3)git push heroku master 4)heroku ps:scale web=1。为了获取日志,我使用了:heroku logs --tail。另外,有没有办法附上图片?所以我可以显示日志
  • 好吧,你可以粘贴它们或附加 GitHub gist 或其他东西 :) @Photon
猜你喜欢
  • 2021-06-14
  • 2022-01-20
  • 1970-01-01
  • 2022-01-26
  • 2017-05-31
  • 2021-11-20
  • 2020-10-11
  • 2018-09-26
  • 2022-09-25
相关资源
最近更新 更多