在AWS EC2服务器(Flask)上运行Twilio bot

时间:2017-06-19 21:27:17

标签: python amazon-ec2 flask twilio

我试图在我刚刚购买的EC2服务器(Ubuntu 16.04)上运行Python Twilio bot,以便机器人能够全天候运行。

我基本上遵循了本教程(http://amunategui.github.io/idea-to-pitch/)到骨骼,但我没有使用剽窃检测器,而是放入了一些基本的Twilio回复代码,回复了它与Hello一起发送的消息,你说[message_body_of_original_text]。它运行正常,但在我关闭计算机时不起作用。

我是服务器,Python和Flask的新手,所以任何建议都会有很大帮助。

SMS回复机器人的基本代码:

from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse

app = Flask(__name__)


@app.route("/sms", methods=['GET', 'POST'])
def sms_reply():
    """Respond to incoming calls with a simple text message."""
    # Start our TwiML response
    resp = MessagingResponse()
    message_body = request.form['Body']
    print(message_body)
    # Add a message
    resp.message("Hello, you said {}".format(message_body))

    return str(resp)

if __name__ == "__main__":
    app.run(debug=True)

2 个答案:

答案 0 :(得分:1)

如果你设法让它在你的机器上运行,你就到了一半。

那个github教程看起来不错,但却是extense。适合生产部署,但不适合初学者的实验。

该教程中有很多活动部分:Python代码,Apache服务器,EC2服务器,防火墙等。我将以渐进的步骤开始调试,没有任何废话。

首先,我在EC2上运行应用程序,就像我在我的机器上运行它一样:python run_my_twiliio_app.py。您的代码使用调用app.run()时的默认值,这意味着您的应用程序将在端口5000上侦听仅来自本地服务器的请求。因此,您必须通过对5000端口执行本地http请求从服务器内进行测试:从服务器中运行wget localhost:5000/sms

然后我会尝试从EC2外面到达它。这需要:

  1. 告诉烧瓶应用听取来自任何IP的请求:将您的app.run()替换为app.run(host='0.0.0.0')
  2. 通过端口5000(您的应用程序的端口)打开来自任何IP的传入请求的防火墙。对于AWS EC2,这涉及通过AWS Web仪表板修改安全组的规则。
  3. 您应该可以通过在浏览器中打开the.ip.of.ec2:5000 / sms来测试此步骤是否有效(您可以从AWS仪表板中获取EC2的IP)

    只有在我确保这两个步骤正常工作之后,我才会让Apache(或Nginx)为我的网络应用程序服务

答案 1 :(得分:0)

您是说它在计算机连接到终端时在远程服务器上运行正常但是在您注销时停止了吗?如果是这样,你并不孤单,这是我遇到的第一个python问题之一。

您可以创建批处理/ cron作业以自动启动python脚本,或者您可以尝试从终端运行nohup命令:

nohup python myScript.py&

关闭shell后,脚本将继续运行