Telegram Bot(编码为 python)与 AWS API 网关集成
Telegram Bot (coded in python) integration with AWS API Gateway
我刚刚使用 python-telegram-bot 包构建了一个电报机器人。我正在尝试将它与 AWS API 网关集成,这样 每次用户发送消息时,它都会触发并运行 Lambda 函数 。我已经根据 link 中的说明设置了 API 网关。但是,当我向机器人发送消息时,该功能没有被触发并且我没有在 return 中收到任何消息。虽然当我手动输入 API 网关的“Invoke URL”时它起作用了,即。 API 确实触发了 Lambda 函数,只是 电报机器人没有触发 API,即使我已经设置了 webhook。具体来说,我使用了:curl --data "url=<INVOKE_URL>" "https://api.telegram.org/bot<ACCESS_TOKEN>/setWebhook"
如果有人能建议我如何集成 API 网关来触发电报机器人的 Lambda 代码,我将不胜感激。这实际上是我的第一个 Python 项目,但是在 AWS 上部署是一个巨大的障碍!
import requests
import re
import os
def start(update, context):
chat_id = update.message.chat_id
context.bot.send_message(chat_id=chat_id, text="Beep boop dog! Type /bop to receive dog pics.")
def get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return url
def get_image_url():
allowed_extension = ['jpg','jpeg','png']
file_extension = ''
while file_extension not in allowed_extension:
url = get_url()
file_extension = re.search("([^.]*)$",url).group(1).lower()
return url
def bop(update, context):
url = get_image_url()
chat_id = update.message.chat_id
context.bot.send_photo(chat_id=chat_id, photo=url)
def main(event, context):
TOKEN = os.environ['TOKEN']
updater = Updater(token=TOKEN, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start',start))
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我在下面的过程中使用了 EC2。
在调用‘sudo yum install’之前设置语言环境
[在 EC2 上]
sudo vi /etc/environment
附加LANG=en_US.utf-8 /n LC_ALL=en_US.utf-8
sudo yum install python 37
curl -0 https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
pip install <package> --user
[在本地主机上]
scp -i beepboopdog.pem script.py ec2-user@<ec2-ip>.ap-southeast-1.compute.amazonaws.com:/home/ec2-user
[在 EC2 上] Nohup:用于在终止会话后 运行 的脚本
nohup python3 script.py &
ps -ef to list processID
kill <processID>
我刚刚使用 python-telegram-bot 包构建了一个电报机器人。我正在尝试将它与 AWS API 网关集成,这样 每次用户发送消息时,它都会触发并运行 Lambda 函数 。我已经根据 link 中的说明设置了 API 网关。但是,当我向机器人发送消息时,该功能没有被触发并且我没有在 return 中收到任何消息。虽然当我手动输入 API 网关的“Invoke URL”时它起作用了,即。 API 确实触发了 Lambda 函数,只是 电报机器人没有触发 API,即使我已经设置了 webhook。具体来说,我使用了:curl --data "url=<INVOKE_URL>" "https://api.telegram.org/bot<ACCESS_TOKEN>/setWebhook"
如果有人能建议我如何集成 API 网关来触发电报机器人的 Lambda 代码,我将不胜感激。这实际上是我的第一个 Python 项目,但是在 AWS 上部署是一个巨大的障碍!
import requests
import re
import os
def start(update, context):
chat_id = update.message.chat_id
context.bot.send_message(chat_id=chat_id, text="Beep boop dog! Type /bop to receive dog pics.")
def get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return url
def get_image_url():
allowed_extension = ['jpg','jpeg','png']
file_extension = ''
while file_extension not in allowed_extension:
url = get_url()
file_extension = re.search("([^.]*)$",url).group(1).lower()
return url
def bop(update, context):
url = get_image_url()
chat_id = update.message.chat_id
context.bot.send_photo(chat_id=chat_id, photo=url)
def main(event, context):
TOKEN = os.environ['TOKEN']
updater = Updater(token=TOKEN, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start',start))
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我在下面的过程中使用了 EC2。 在调用‘sudo yum install’之前设置语言环境
[在 EC2 上]
sudo vi /etc/environment
附加LANG=en_US.utf-8 /n LC_ALL=en_US.utf-8
sudo yum install python 37
curl -0 https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
pip install <package> --user
[在本地主机上]
scp -i beepboopdog.pem script.py ec2-user@<ec2-ip>.ap-southeast-1.compute.amazonaws.com:/home/ec2-user
[在 EC2 上] Nohup:用于在终止会话后 运行 的脚本
nohup python3 script.py &
ps -ef to list processID
kill <processID>