Получение номера набора из списка вызовов - PullRequest
0 голосов
/ 20 июня 2020

У меня есть три звонка на три номера (X звонки Y, затем X звонок Z). Это выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Dial>
        <Number statusCallback="https://...">
            {{Z}}
        </Number>
    </Dial>
</Response>

Я хотел бы перечислить все вызовы формы Y были подключены к Z (через X). И я хотел бы отфильтровать эти вызовы только на основе Z (то есть я хочу перечислить все вызовы, включающие Z, независимо от Y и X). Но я все еще хочу знать для каждого из этих вызовов, какое было число Y.

Подводя итог, Z - это входные данные, а Y - нет.

На данный момент Я не мог найти лучшего решения, чем получить все вызовы (без фильтра), а затем использовать отношение sid == parent_call_sid, чтобы сопоставить две ветви этих вызовов вместе. Затем я могу использовать этот результат, чтобы отфильтровать вызовы, которые не заканчиваются набором номера Z.

# Python example of both matching and filtering:
def match_call_pairs(calls_log, filter_Y, filter_Z):
    call_pairs = defaultdict(dict)

    for call in calls_log:
        if call.parent_call_sid and (not filter_Z or call.to in filter_Z):
            call_pairs[call.parent_call_sid]['Z'] = call
        elif not filter_Y or call.to in filter_Y:
            call_pairs[call.sid]['Y'] = call

    return call_pairs

Это решение меня не удовлетворяет, так как мне пришлось бы сделать много запросов, чтобы получить все звонки. Другими словами, я не могу отфильтровать вызовы заранее, потому что, когда я получаю первую ветку от X до Y, я еще не могу сказать, наберет ли он Z (мне нужно сравнить sid с parent_call_sid с ответьте на этот вопрос).

Я вижу, что к вызовам прикреплено поле annotation, но похоже, что API создания вызовов не предлагает способ добавления аннотаций (или метаданных) к вызову. Это также было бы жизнеспособным решением, поскольку это позволило бы добавить число Y в аннотацию, чтобы мы могли прочитать его непосредственно со второй ноги (нам не нужно было бы получать обе ноги, чтобы получить оба числа).

Я не вижу способа сделать это, но я использовал Twilio всего 2 дня, так что, возможно, я что-то здесь упускаю.

...