【问题标题】:How to get JSON API response for call made from twilio?如何获取从 twilio 发出的调用的 JSON API 响应?
【发布时间】:2019-10-12 19:30:25
【问题描述】:

我无法获取 tutorial 中所示的 JSON 响应。

我已经实施了一个可编程语音程序。我想向用户显示通话的详细信息,如果我收到 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=call-progress-events&SipResponseCode=200&Ca llerState=AL&ToZip=&SequenceNumber=0&CallSid=XXX&To=%2BXXX&CallerZip=35766&ToCountry=IN&CalledZip=&ApiVersion=2010-04-01&CalledCity=&CallStatus=完成&Duration=1&From= %2BXXX&CallDuration=5&AccountSid=XXX&CalledCountry=IN&CallerCity=ESTILLFORK&ToCity=&FromCountry=US&Caller=%2B12563804721&FromCity=ESTILLFORK&CalledState=&FromZip=35766&Fro mState=AL HTTP/1.1" 200 123

打印出来

持续时间:['5', '5']

状态:['完成','完成']

很遗憾,我不知道如何从 Twilio 请求 JSON 响应。

【问题讨论】:

  • 您的问题不清楚。您正在以与进行 Twilio 调用的视图完全不同的视图进行打印,并且您正在打印的是从前端发送的内容。
  • @DanielRoseman at ./start-campaign 它创建了一个呼叫资源,用于呼叫电话簿中的所有号码。使用 status_callback,我尝试创建一个 JSON 响应,如 Create a Call resource and specify a StatusCallbackEvent 上的教程(示例 3)所示,它向 ./events 发送 GET 请求。我尝试按照教程进行操作,但我觉得我迷路了。
  • 但我不明白你为什么认为应该有“JSON 响应”。 Twilio 已使用您看到的参数调用了您的回调端点,并且您已成功打印其中两个。你还期待什么?
  • Twilio python 库已经将 JSON 响应解析为可以从中获取属性的 python 对象。您拥有的 call 对象将包含所有详细信息。 (不过,由于您刚刚创建了调用,它还没有持续时间或价格。您需要存储 SID 并在调用完成后进行 API 调用。)
  • @philnash 如何进行 API 调用?如果 call.status == 'completed': pass,我知道如何获取我尝试使用的 SID。但它不起作用,我无法找到解决问题的方法

标签: python django twilio twilio-api


【解决方案1】:

收到回调后,您的 GET 数据中就有了 CallSid ID。因此,您可以使用它来获取完整的 Call 资源:

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

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2020-02-02
    • 2019-04-25
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多