我已经在谷歌云功能上使用 python 中的 webhook 设置了一个电报机器人。基于来自互联网的一些示例代码,我让它作为一个简单的回声机器人工作,但是结构与我在使用长轮询之前编写的机器人非常不同:
# main.py
import os
import telegram
def webhook(request):
bot = telegram.Bot(token=os.environ["TELEGRAM_TOKEN"])
if request.method == "POST":
update = telegram.Update.de_json(request.get_json(force=True), bot)
chat_id = update.message.chat.id
# Reply with the same message
bot.sendMessage(chat_id=chat_id, text=update.message.text)
return "ok"
我不明白如何为此添加更多的处理程序或不同的函数,特别是因为云函数需要我只命名一个从脚本运行的函数(在本例中为 webhook 函数)。
如何将上述逻辑转换为以下我更熟悉的逻辑:
import os
TOKEN = "TOKEN"
PORT = int(os.environ.get('PORT', '8443'))
updater = Updater(TOKEN)
# add example handler
def start(update, context):
context.bot.send_message(chat_id=update.message.chat_id, text="Hello, I am dice bot and I will roll some tasty dice for you.")
start_handler = CommandHandler('start', start)
dispatcher.add_handler(start_handler)
# start webhook polling
updater.start_webhook(listen="0.0.0.0",
port=PORT,
url_path=TOKEN)
updater.bot.set_webhook("https://<appname>.herokuapp.com/" + TOKEN)
updater.idle()
此代码与长轮询具有相同的结构,因此我知道如何添加其他处理程序。但是它有两个问题:
这是heroku文档中的代码片段,所以我不知道这是否适用于谷歌云功能
这不会产生一个我可以在云函数中调用的函数,我尝试将上面的所有代码包装在一个大函数中
webhook
并简单地运行它,但它不起作用(并且不会在我的谷歌仪表板上产生错误)。
任何帮助表示赞赏!