我跟随this tutorial用Python创建了Telegram机器人。最后,我使用 ngrok 在计算机上本地运行了它。为了测试该机器人,我通过Telegram向它发送了消息,并且它起作用了,所以这是一个很好的教程。
但是,现在我想将Bot托管在云上,因为我当然不希望在运行终端的情况下始终打开PC。
我已经在网络上阅读了许多有关如何托管无服务器 Telegram机器人的教程。我曾尝试将其托管在AWS Lambda,Heroku,Google Cloud Platform和Glitch.com中。但是我仍然没有成功托管它。总是有一些原因使我无法托管它:我的代码未得到正确接受,本教程的描述性不足,或者我不了解重要的内容。
在遵循教程时,有时我不得不将我的代码调整为我试图托管该机器人的平台。我仍然无法使其正常工作。
我在做什么错? 我如何在云端成功(免费)成功托管用Python编写的Telegram机器人?
这是我的代码:
import requests
import os
from bottle import Bottle, response, request as bottle_request
from unidecode import unidecode
# get credentials
bot_url = os.environ['BOT_URL']
class BotChangei:
def get_chat_id(self, data):
chat_id = data['message']['chat']['id']
return chat_id
def get_message(self, data):
message_text = data['message']['text']
return message_text
def send_message(self, prepared_data):
"""
Prepared data should be json which includes at least `chat_id` and `text`
"""
message_url = self.bot_url + 'sendMessage'
requests.post(message_url, json=prepared_data)
class TelegramBot(BotChangei, Bottle):
def __init__(self, *args, **kwargs):
super(TelegramBot, self).__init__()
self.route('/', callback=self.post_handler, method="POST")
def is_vowel(self, letter):
return unidecode(letter) in {'a', 'e', 'o', 'u'}
def is_capital(self, letter):
return unidecode(letter) in {'A', 'E', 'O', 'U'}
def change_text_message(self, text):
mutable_list = list(text)
i = 0
for letter in mutable_list:
if self.is_vowel(letter):
mutable_list[i] = 'i'
elif self.is_capital(letter):
mutable_list[i] = 'I'
i += 1
return "".join(mutable_list)
def prepare_data_for_answer(self, data):
message = self.get_message(data)
answer = self.change_text_message(message)
chat_id = self.get_chat_id(data)
json_data = {
"chat_id": chat_id,
"text": answer,
}
return json_data
def post_handler(self):
data = bottle_request.json
answer_data = self.prepare_data_for_answer(data)
self.send_message(answer_data)
return response
if __name__ == '__main__':
app = TelegramBot()
app.run(host='localhost', port=8080)
答案 0 :(得分:0)
您可以让它在家里的计算机上运行,并使用ngrok(我最喜欢的服务)之类的服务。它有一个免费的层,可能适合您。
答案 1 :(得分:0)
Google Cloud免费为您提供$ 300的注册费用。我对ngrok不熟悉,但是我会尝试创建一个Google云帐户:
您可以对AWS EC2(而不是lambda)执行相同的操作-只需确保选择一个“免费套餐”机器映像-AWS每月就会为您提供750个小时的“免费套餐” EC2实例的免费时间。
不确定您对云计算有多熟悉,但您肯定希望了解AWS EC2或Google Cloud的“计算引擎”。这些使您可以在云中运行完全控制的文字计算机。如果您从未使用过SSH,则通常将其作为“陷阱”任务。 SSH登录后,您可以安装/运行所需的任何文件。
AWS的SSH指令:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
对于Google,启动虚拟机后,可以单击其旁边的“ SSH”,它允许您直接在网络浏览器中进行SSH(对于AWS,您必须下载用于启动EC2的私钥,然后从您的本地终端SSH进入。