У меня есть три звонка на три номера (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 дня, так что, возможно, я что-то здесь упускаю.