1

Twilio 番号にテキスト メッセージを送信し、ユーザーに一連の質問を開始したいと考えています。初めてテキスト メッセージを送信する場合は、新しい「発信者」を作成する必要があります。彼らが以前にプレイしたことがある場合は、「last_question」を調べて、適切な質問をしたいと思います。以下のコードでは、SMS 応答が返されず、Twilio エラー「HTTP 取得失敗」が返されます。

models.py には

class Caller(models.Model):
    body = models.CharField(max_length=200)
    from_number = models.CharField(max_length=20)
    last_question = models.CharField(max_length=2, default="0")

    def __unicode__(self):
        return self.body

views.py で

def hello_there(request):
    body = request.REQUEST.get('Body', None)
    from_number = request.REQUEST.get('From', None)
    try:
        caller = Caller.objects.get(from_number = from_number)
    except Caller.DoesNotExist:
        caller = None
    if caller:
        if caller.last_question == "0":
            if body == "Password":
                message = "Welcome to the game. What is 3 + 4?"
                caller.last_question = "1"
            else:
                message = "What is the password?"
        else:
            message = "you broke me"
    else:
        new_caller = Caller(body=body, from_number=from_number, last_question="0")
        new_caller.save()
        message = "New user created"
    resp = twilio.twiml.Reponse()
    resp.sms(message)
    return HttpResponse(str(resp))
4

1 に答える 1

1

csrf_exemptここの Twilio 従業員 - 問題は、このビューの周りにデコレータを提供していないことが原因である可能性があります。HTTP POSTDjango はtwilio.com からリクエストを受信して​​いるため、セキュリティ エラーをトリガーします。HTTP POSTDjango は、除外しない限り、csrf トークンのないリクエストを受け入れません。

Django にdjango-twilioパッケージを使用することを考えたことはありますか? twilio を使用して開発する場合、作業がずっと簡単になります。django-twilio を使用すると、ビューは次のようになります。

from django_twilio.decorators import twilio_view

@twilio_view
def hello_there(request):
    body = request.REQUEST.get('Body', None)
    from_number = request.REQUEST.get('From', None)
    try:
        caller = Caller.objects.get(from_number=from_number)
    except Caller.DoesNotExist:
        caller = None
    if caller:
        if caller.last_question == "0":
            if body == "Password":
                message = "Welcome to the game. What is 3 + 4?"
                caller.last_question = "1"
            else:
                message = "What is the password?"
        else:
            message = "you broke me"
    else:
        new_caller = Caller(body=body, from_number=from_number, last_question="0")
        new_caller.save()
        message = "New user created"
    resp = twilio.twiml.Reponse()
    resp.sms(message)
return resp

デコレーターはtwilio_viewcsrf 免除を提供するだけでなく、すべてのリクエストが本物であり、twilio.com からのものであることを保証します。

開始するには、インストール手順を確認してください。

于 2014-02-17T19:24:31.067 に答える