【问题标题】:Deploying Telegram chatbot on Google Compute Engine and problem about webhook url setting在 Google Compute Engine 上部署 Telegram 聊天机器人以及有关 webhook url 设置的问题
【发布时间】:2020-05-19 18:16:21
【问题描述】:

我正在 Google Compute Engine 上部署我的 Telegram 聊天机器人,但遇到了 webhook url 的设置问题。

我有一个 config.ini 来存储相关信息,我试图用项目的 url 进行设置:

[TELEGRAM]
ACCESS_TOKEN = {token}
WEBHOOK_URL = https://api.telegram.org/bot{token}/setWebhook?url=https://{project-id}.appspot.com/hook

我在 GCP 中将防火墙设置为 5000。我复制并粘贴链接,它显示“{“ok”:true,“result”:true,“description”:“Webhook 已设置”}”。但是当我运行我的 main.py(聊天机器人脚本)时,聊天机器人不起作用。 WEBHOOK_URL 应该是什么?部署的步骤是什么 - 是否与我使用 ngrok 复制并粘贴链接以确认挂钩然后运行 ​​main.py 相同?

当我运行 main.py 时,它显示我在开发服务器中,并建议我应该使用生产 WSGI。必须这样做吗?这是日志:

sys:1: TelegramDeprecationWarning: Old Handler API is deprecated - see https://git.io/fxJuV for details
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
2020-05-19 17:49:57,685 - werkzeug - INFO -  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
2020-05-19 17:49:57,686 - werkzeug - INFO -  * Restarting with stat
sys:1: TelegramDeprecationWarning: Old Handler API is deprecated - see https://git.io/fxJuV for details
2020-05-19 17:49:57,969 - werkzeug - WARNING -  * Debugger is active!
2020-05-19 17:49:57,970 - werkzeug - INFO -  * Debugger PIN: 286-205-082

我不认为这是我的 main.py,但以防万一我把相关部分放在这里:

import configparser
import requests
import logging
import telegram
from flask import Flask, request
from telegram.ext import Dispatcher, MessageHandler, Filters, Updater, CommandHandler

# Load data from config.ini file
config = configparser.ConfigParser()
config.read('config.ini')

# Enable logging
logging.basicConfig(format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                level = logging.INFO)
logger = logging.getLogger(__name__)

# Initial Flask app
app = Flask(__name__)

# Initial bot by Telegram access token
bot = telegram.Bot(token = (config['TELEGRAM']['ACCESS_TOKEN']))

@app.route('/hook', methods=['POST'])
def webhook_handler():
    """Set route /hook with POST method will trigger this method."""
    if request.method == "POST":
        update = telegram.Update.de_json(request.get_json(force = True), bot)

        # Update dispatcher process that handler to process this message
        dispatcher.process_update(update)
    return 'ok', 200

def whatever_chatbot_function():
    .
    .
    .

dispatcher = Dispatcher(bot, None)

dispatcher.add_handler(CommandHandler('start', start_handler))
    .
    .
    .
if __name__ == "__main__":
    # Running server
    app.run(debug=True)

非常感谢!

【问题讨论】:

  • 检查transition to v12 guide。这就是TelegramDeprecationWarning 异常所暗示的。您应该按照该指南创建 Updater 对象的实例。还有一个内置的 webhook server 避免了对 Flask 的要求。
  • 感谢您的回复。我也问过,刚刚得到 python-telegram-bot 管理员的回复,他们说可以使用烧瓶。我现在懒得修改整个方法。不过,谢谢!

标签: python google-cloud-platform google-compute-engine python-telegram-bot telegram-webhook


【解决方案1】:

不妨试试这个:

def whatever_chatbot_function():
    updater = Updater(bot,use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('start', start_handler))

【讨论】:

  • 请不要发布纯代码作为答案。答案显然不符合问题
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
相关资源
最近更新 更多