如何用Python获取短信发送者信息?

2 投票
2 回答
1426 浏览
提问于 2025-04-16 22:24

我正在使用Twilio和Django来做一个短信应用(我昨天才开始学Python,请多多包涵)。

我需要帮助的是:当Twilio把一条短信发到我的网址时,我希望我的应用能自动把发短信的电话号码、日期/时间和短信内容添加到一些列表里。我该怎么做呢?

谢谢!

2 个回答

0

我刚刚用Twilio和Django写了一个示例应用,放在了GitHub上。不过这里我给你提供你需要的具体答案。

在这个例子中,我使用了我服务器上的'/reply/'这个网址(并告诉Twilio在这里发送数据)。

在urls.py文件里,你只需要做一个标准的映射: url(r'^reply', 'twilio_sms.views.sms_reply'),

下面是一个非常简单的用户回复,按照Twilio服务器的要求来回应。 def sms_reply(request): if request.method == 'POST': params = request.POST phone = re.sub('+1','',params['From'])

    response_message =  '<?xml version="1.0" encoding="UTF-8">'
    response_message += '<Response><Sms>Thanks for your text!</Sms></Response>'
    return HttpResponse(response_message)

在我的代码中,我实际上是用一个库来构建XML响应的,我一般建议这样做,但为了这个代码示例来说信息量有点大。

2

Twilio在请求你的网址时,会把发送者的信息作为'From'参数发送过来。你可以在这里找到相关的文档:http://www.twilio.com/docs/api/twiml/sms/message

这段代码大概是这样的,我是在一个用Python写的网页应用中写的(不是用Django)。

class MainHandler(webapp.RequestHandler):  

  def get(self):
    model = Storage()
    from = self.request.get("From")
    if from is not '':
      model.sms_from = self.request.get("From")
      model.sms_body = self.request.get("Body")
      model.put()

    models = Storage.all()

    for i in models:
      self.response.out.write(i.sms_from + ' ' + i.sms_body +'<br>')

更新:

当我拿起手机,给xxx-xxx-xxxx发短信时,Twilio会收到这条短信,然后会向我设置的网址发出请求。

从那时起,这个请求看起来就和从网页浏览器发出的请求一模一样。

这个问题会帮助你了解Django中的具体细节,关于如何获取网址参数的信息可以参考这个链接:在request.GET中捕获网址参数

发送者的所有参数应该都会在这里。

撰写回答