2

IVR(Interactive Voice Response)システムを作っています。Plivoを使ってIVRを作っています。Python Flask で記述されたこのサンプル アプリに従いました。サンプルアプリを作成するためのリンクです。

https://www.plivo.com/docs/getting-started/phone-menu-app/

そして、ここにリポジトリとpythonフラスコのivr()という名前のビューメソッドがあります https://github.com/Chitrank-Dixit/phone-ivr-python/blob/master/app.py#L23

コードを表示することもできます

@app.route('/response/ivr/', methods=['GET', 'POST'])
def ivr():
    response = plivoxml.Response()
    if request.method == 'GET':
        # GetDigit XML Docs - http://plivo.com/docs/xml/getdigits/
        getdigits_action_url = url_for('ivr', _external=True)
        getDigits = plivoxml.GetDigits(action=getdigits_action_url,
                                       method='POST', timeout=7, numDigits=1,
                                       retries=1)

        getDigits.addSpeak(IVR_MESSAGE)
        response.add(getDigits)
        response.addSpeak(NO_INPUT_MESSAGE)

        return Response(str(response), mimetype='text/xml')

    elif request.method == 'POST':
        digit = request.form.get('Digits')

        if digit == "1":
            # Fetch a random joke using the Reddit API.
            joke = joke_from_reddit()
            response.addSpeak(joke)
        elif digit == "2":
            # Listen to a song
            response.addPlay(PLIVO_SONG)
        else:
            response.addSpeak(WRONG_INPUT_MESSAGE)

        return Response(str(response), mimetype='text/xml')

Django IVR で同じ動作が必要なだけです。私はPython Djangoですべてを実装しています。リポジトリへのリンクと、Python Django で実装された ivr_sample() に名前が変更された上記の ivr() メソッドを次に示します。

https://github.com/Chitrank-Dixit/phone-ivr-python/blob/master/app.py#L23

ここにコードがあります

@csrf_protect   
def ivr_sample(request):
    context = {
        "working": "yes"
    }
    response = plivoxml.Response()
    print type(request.method) , request.POST.get('Digits')
    if request.method == 'GET':
        print request.get_host(), request.build_absolute_uri()
        getdigits_action_url = request.build_absolute_uri()
        getDigits = plivoxml.GetDigits(action=getdigits_action_url, method='POST', timeout=7, numDigits=1, retries=1)
        getDigits.addSpeak("Welcome to Sample IVR, Press 0 for sales , Press 1 for support")
        response.add(getDigits)
        response.addSpeak("Sorry No Input has been received")
        return HttpResponse(response, content_type="text/xml")

    elif request.method == 'POST':
        digit = request.POST.get('Digits')


        if (digit == "0" or digit == 0):
            response.addSpeak("Hello Welcome to Sample , I am a Sales Guy")
        elif (digit == "1" or digit == 1):
            response.addSpeak("Hello Welcome to Sample , I am a Support Guy")
        else:
            response.addSpeak("Wrong Input Received")

        return HttpResponse(response, content_type="text/xml")

電話で GET リクエストを聞くことができますが、0 または 1 を入力すると、目的のメッセージを聞くことができます。電話がハングし、接続が閉じられます。これは、ivr_sample() メソッドが GET 応答を受け入れていることを意味しますが、私の場合は POST 応答を実行していません。Flask ベースのアプリケーションは問題なく正常に動作しています。

したがって、Django にはフォームでの CSRF 保護が必要だと思いました。したがって、djangoのドキュメントで指定されているcsrfデコレータを使用しました。ここにリンクがあります:https://docs.djangoproject.com/en/1.8/ref/csrf/

しかし、まだ IVR は機能していません。

最悪なのは、ローカルでテストできないことです。そのため、修正してオンラインでテストする必要があります。Python DjangoでIVRを作成するためにplivoの前に誰かが使用した場合。どこが間違っているか教えてください。

4

1 に答える 1

1

これは、すべてのcsrfデコレータを試した後に見つけた小さな修正にすぎません。ivr_sample という名前のビューで。の代わりに@csrf_protectを使用するだけです@csrf_exempt。今、すべてが完璧に機能しています。

于 2015-07-18T09:32:48.407 に答える