Как получить ответ JSON API на вызов из twilio? - PullRequest
0 голосов
/ 12 октября 2019

Я не могу получить ответ JSON, как показано в учебнике .

Я реализовал программу Programmable Voice. Я хочу показать пользователю детали звонка, и если я получу ответ JSON, я смогу получить их все (стоимость, продолжительность, статус и т. Д.).

# views.py
def start_campaign(request, campaign_id):

    try:
        campaign = Campaign.objects.get(pk=campaign_id)
        account_sid = 'XXX'
        auth_token = 'XXX'
        client = Client(account_sid, auth_token)

        phone_numbers = Contact.objects.filter(phone_book=campaign.phone_book)
        custom_url = 'http://XXX.ngrok.io/assets/' + str(campaign_id)

        for phone_number in phone_numbers:

            call = client.calls.create(
                method='GET',
                status_callback='http://XXX.ngrok.io/events',
                status_callback_event='completed',
                status_callback_method='GET',
                url=str(custom_url),
                to=str(phone_number),
                from_='+1XXX'
            )
            detail = client.calls(str(call.sid)).fetch()
            print(detail.price)

    except Campaign.DoesNotExist:
        raise Http404("Campaign Does Not Exist")

    context = {
        'all_campaigns': campaign
    }

    return render(request, "CallCenter/start_campaign.html", context)


def events(request):
    status = request.GET.getlist('CallStatus', default=None)
    duration = request.GET.getlist('CallDuration', default=None)

    print("Duration:{}\nStatus:{}".format(duration, status))

    return render(request, "CallCenter/events.html")

В терминале,Я получаю вывод, который распечатывает состояние и продолжительность вызова из

"GET / events? Called =% 2BXX & ToState = & CallerCountry = US & Direction = outbound-api & Timestamp = Sat, + 12 + Oct + 2019 + 19:11: 50 +% 2B0000 & CallbackSource = события-события-вызова & SipResponseCode = 200 & Ca llerState = AL & ToZip = & SequenceNumber = 0 & CallSid = XXX & To =% 2BXXX & CallerZip = 35766 & ToCountry = IN & CalledXX & =XXX & CalledCountry = IN & CallerCity = ESTILLFORK & ToCity = & FromCountry = US & Caller =% 2B12563804721 & FromCity = ESTILLFORK & CalledState = & FromZip = 35766 & Fro mState = AL HTTP / 1.1 "200 123

5 *", печать на печать: выкл. ']

Статус: [' выполнено ',' выполнено ']

К сожалению, я не знаю, как запросить ответ JSON от Twiлио.

1 Ответ

0 голосов
/ 13 октября 2019

После получения обратного вызова у вас есть идентификатор CallSid в данных GET. Таким образом, вы можете использовать это для получения полного ресурса Call:

def events(request):
    sid = request.GET['CallSid']
    call = client.calls(sid).fetch()
    print(call.price)
...