Отслеживание статуса звонка: как определить, что трубку взял человек?

Автор: | 05.08.2026

**Обновление:** Теперь у Twilio есть функция определения автоответчика, так что вам не нужно создавать свою собственную!

Когда вы автоматизируете звонки через свой аккаунт Twilio, иногда хочется избежать попадания на автоответчик и воспроизводить секретные сообщения только для людей. Казалось бы, всё просто. Но на практике это может работать не так, как вы ожидаете.

**Проблема**

Можно ли определить, кто ответил на звонок — человек или автоответчик? Поиск по этому вопросу может привести вас к технологии определения автоответчика (AMD). К сожалению, AMD больше похоже на искусство, чем на науку, и часто даёт сбои на разных устройствах и у разных провайдеров автоответчиков.

**Решение проблемы**

Мы предлагаем что-то вроде теста Тьюринга, но наоборот. Решение — это скрининг звонков или то, что Twilio называет определением человека (Human Detection). Human Detection использует глагол для реагирования на нажатия клавиш человеком. Давайте посмотрим, как это реализовать на базовом уровне в различных популярных языках программирования.

**Выберите свой путь**

Возможно, самый простой для понимания пример, если вы знакомы с TwiML и XML, начинается с файла HumanDetection.xml:

Перед началом звонка мы используем глагол TwiML для сбора ввода, который абонент вводит на клавиатуре, и применяем атрибут action для перенаправления на сообщение, которое абонент услышит только после нажатия какой-либо клавиши. Обратите внимание, что значение атрибута timeout установлено на десять секунд. Если вы не укажете значение, по умолчанию оно будет равно пяти секундам. Если время ожидания истечёт до получения ввода, Twilio не отправит запрос на действие «/message.xml», а продолжит обработку следующего глагола TwiML сразу после , которым в данном случае является . Имейте в виду, что Twilio по умолчанию повторно запросит URL текущего документа, что может привести к нежелательному зацикливанию, если, например, вы забудете указать URL действия.

Но когда человек действительно вводит данные, выполнение переходит к файлу message.xml, который выглядит так:

И вот оно — определение простых смертных в действии! Но у нас есть вспомогательные библиотеки, так что вам не придётся писать XML вручную.

Мы перепишем HumanDetection.xml для Python и посмотрим, как это работает в небольшом приложении Flask. Затем вы найдёте примеры кода для начала работы на разных языках, которые продолжают перенаправлять на message.xml. Я разместил оба XML-файла с помощью TwiMLBin, так что вы можете сразу же протестировать их.

**Создание скрининга звонков на Python**

Используя вспомогательную библиотеку twilio-python. Создайте файл HumanDetection.py. Если хотите увидеть README для настройки, возьмите этот гист.

Убедитесь, что ваш сервер доступен извне с помощью чего-то вроде ngrok, работающего на порту 5000. Запустите «python HumanDetection.py» в директории проекта (предварительно выполнив пункты из README) и, когда зазвонит телефон, дайте своему номеру Twilio понять, что вы действительно человек.

**Создание скрининга звонков на Ruby**

Используя вспомогательную библиотеку twilio-ruby. Создайте файл HumanDetection.rb.

В этом случае вам нужно запустить ngrok на порту 4567 с помощью команды «ruby HumanDetection.rb».

**Создание скрининга звонков на Java**

Используя вспомогательную библиотеку twilio-java. Создайте файл HumanDetection.java. Для полной настройки проекта ознакомьтесь с этой статьёй моего коллеги Криса.

Запустите «php -S localhost:8888» в директории вашего проекта.

**Завершение**

Теперь вы сможете определять, когда на звонок отвечает человек, и реагировать соответствующим образом. Этот пример является основой для создания более сложных телефонных деревьев и сценариев IVR.

Расскажите нам, чем вы занимались в последнее время. В следующий раз, когда вам понадобится человеческое общение, просто соберитесь в нашем сообществе. Мы всегда готовы помочь!

Напишите мне: mspeir@twilio.com

Твитните мне: @meganspeir