Twilio SMS / Python,试图捕捉短信的正文

时间:2017-05-23 22:55:51

标签: python twilio

这是我在这里发表的第一篇文章,如果有什么不对,那就很抱歉。我一直试图通过twilio检索短信的正文。最终目标是有一个基本的聊天机器人,我可以使用文本,但我不想在一个Python文件中编码所有内容。这就是把它拉出来的目的。

我正在寻找一些关于我接下来要去哪里的指导。 从这里开始是错误:

Traceback (most recent call last):
File "main.py", line 24, in <module>
print (sms_reply().message_body)
File "/home/pi/PythonScripts/BasicSMSBot/SMSIncoming.py", line 18, in 
sms_reply
message_body = request.form['Body']
File "/usr/local/lib/python3.4/dist-packages/werkzeug/local.py", line 347, 
in __getattr__
return getattr(self._get_current_object(), name)
File "/usr/local/lib/python3.4/dist-packages/werkzeug/local.py", line 306, 
in _get_current_object
return self.__local()
File "/usr/local/lib/python3.4/dist-packages/flask/globals.py", line 37, in 
_lookup_req_object
raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.

因为接缝,我想把身体拉出来的方式有问题。

以下是SMSIncoming中的代码:

#importing nessisary scripts and files
import os
#import SMSOutgoing
from flask import Flask, request, redirect
from twilio.twiml.messaging_response import MessagingResponse


#initilizing the global user variable
#glo_user_var = (' T ');

#initilizing app
app = Flask(__name__)

@app.route("/sms", methods=["GET", "POST"])
def sms_reply():
    resp = MessagingResponse()
    #body = request.values.get('Body', None)
    message_body = request.form['Body']
    #for debuging the SMS instercept
    #saveFile = open('bodyfile.txt', 'w')
    #saveFile.write(body)
    #saveFile.close()

    resp.message("Testting the SMS responce")
    return str(resp)
    return str(body)



    #lets main app process run
    if __name__ == "__main__":
           app.run(debug=True)

以下是main.py

中的代码
   #place all imports and scripts to be run
   import os
   import SMSOutgoing
   from SMSIncoming import sms_reply
   #from SMSIncoming.py import app, sms_reply
   import time



   #call up ngrok and make server on port 5000
   #os.system("./ngrok http 5000");


   #start running the SMSIncoming app
   #if __name__ == "__main__":
   #       app.run(debug=True)

   #       have to start apps separately!  #


   #this block will handle incoming SMS (User Input)
   while True:
   #       global glo_user_var
          print (sms_reply().message_body)
          #file = open('test_user_input.txt', 'w')
          #file.write(glo_user_var)
          #file.close()
          time.sleep(1)

main.py中的所有内容都已注释掉或已就位进行测试。

我想要打印身体的原因是为了确保它到达我想要的位置。之后我会将它用作定义回复的用户输入。

我也使用ngrok作为我的http webhook。

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

首先,您遇到的问题是因为您将烧瓶应用程序分解为多个文件并尝试每秒调用一次也是路由的函数。所以,你肯定需要放弃while True循环开始。

接下来,我了解如果您在一个文件中构建整个应用程序,您可以看到事情可能会变得无法抗拒。但是,您目前正在过早优化。我建议你首先在一个文件中使用它,然后将应用程序重构为更易于管理的块。

为了记录,你正在做正确的事情来获取短信的正文。 Twilio message webhook会将正文作为表单参数Body发送,因此您可以使用

在对该请求的响应中获取该参数
message_body = request.form['Body']

进入该阶段后,请在building larger applications上查看Flask上的此文档,然后查看building modular applications with Blueprints上的信息。