7 октября 2026 г.
Автор:
Как избежать отправки SMS на стационарные телефоны в PHP с помощью API Twilio Lookup v2
SMS — один из самых эффективных способов связи с клиентами. Это связано (помимо прочего) с тем, что он не зависит от интернет-соединения, работает на любом мобильном телефоне и имеет показатель открываемости 98%.
Но как при отправке уведомлений через SMS в ваших PHP-приложениях отфильтровать стационарные телефоны, чтобы не платить за недоставленные сообщения? Один только номер телефона не дает такой информации.
В этом руководстве вы узнаете, как отфильтровать стационарные телефоны в PHP, используя возможности API Twilio Lookup v2.
Как будет работать код?
По сути, все довольно просто. Приложение берет массив телефонных номеров и перебирает их. Во время итерации сведения о каждом номере извлекаются с помощью API Twilio Lookup v2. Если это стационарный телефон, он пропускается. В противном случае на него отправляется короткое и забавное SMS. Кроме того, приложение будет регистрировать данные о каждом номере и информацию о том, был ли он отфильтрован, с помощью Monolog.
Предварительные требования
Для выполнения этого руководства вам потребуется следующее:
- Учетная запись Twilio (бесплатная или платная). Создайте ее сейчас, если у вас ее еще нет.
- Номер телефона Twilio, с которого можно отправлять SMS
- PHP 8.4 или выше
- Номер телефона, который может принимать SMS, и номер стационарного телефона (желательно ваш собственный или вашего друга)
- Ваш любимый текстовый редактор или IDE для написания кода на PHP. Я рекомендую Neovim и Visual Studio Code
Создание базовой структуры проекта
Вам нужно создать базовый файл проекта и структуру каталогов там, где вы храните свои PHP-проекты. Чтобы сделать это и перейти в новый каталог проекта, выполните следующие команды.
Скопируйте код
Если вы используете Microsoft Windows, вам не нужен аргумент -p для команды mkdir.
Добавление необходимых библиотек
Далее проекту потребуется несколько зависимостей, а именно:
- Monolog: де-факто стандартная библиотека логирования для Twilio
- PHP-библиотека помощник Twilio: упрощает взаимодействие с API Twilio
- PHP Dotenv: загружает переменные окружения из файлов .env в суперглобальные переменные $_ENV и $_SERVER в PHP. Примечание: это идеально подходит для сред разработки, но не должно использоваться в рабочей среде.
Чтобы установить их, выполните следующую команду.
Скопируйте код
Добавление пространства имен автозагрузчика
После создания файла composer.json предыдущей командой вам нужно добавить a PSR-4 autoload mapping. Это необходимо для хранения кода, который фильтрует стационарные телефоны (и любые другие номера, не являющиеся мобильными), в переиспользуемом классе. Его можно было бы включить непосредственно в основной код, но это затруднило бы его чтение.
Добавьте сопоставление с именем App, которое указывает на каталог src, добавив следующее в конец существующей конфигурации в composer.json.
Скопируйте код
Затем выполните следующую команду, чтобы обновить автозагрузчик, созданный Composer.
Скопируйте код
Установка необходимых переменных окружения
Затем установите две переменные окружения (ваши учетные данные Twilio), которые необходимы для выполнения аутентифицированных запросов к Twilio. Для этого в корневом каталоге проекта создайте новый файл с именем .env и вставьте в него приведенную ниже конфигурацию.
Скопируйте код
Затем откройте консоль Twilio в браузере и скопируйте Account SID и Auth Token из панели Workbench в нижней части страницы.
Теперь установите скопированные значения в качестве значений TWILIO_ACCOUNT_SID и TWILIO_AUTH_TOKEN соответственно в файле .env.
Затем в разделе Quick actions нажмите Phone numbers и скопируйте номер телефона в формате E.164 из столбца Phone Number. Вставьте этот номер телефона в качестве значения TWILIO_PHONE_NUMBER в файле .env.
Написание PHP-кода
Теперь пришло время написать PHP-код. Код будет разделен на два файла: index.php и src/Iterator/MobilePhoneNumberFilterIterator.php. Начиная с последнего, создайте новый файл в src/Iterators с именем MobilePhoneNumberFilterIterator.php и вставьте в него приведенный ниже код.
Скопируйте код
Класс расширяет FilterIterator из стандартной библиотеки PHP (SPL). Итераторы упрощают обход объектов с использованием стандартных конструкций циклов PHP, например, for, foreach и while. FilterIterator, как следует из названия, отфильтровывает нежелательные значения из итератора по мере их перебора с помощью логики в функции accept() класса.
Приведенная выше версия получает сведения о каждом номере телефона, включая данные Line Type Intelligence, так как они предоставляют тип линии, например, стационарный, мобильный или фиксированный VoIP. Если для типа линии установлено значение "mobile", функция возвращает true, сохраняя номер. В противном случае возвращается false, и номер отфильтровывается.
Затем создайте точку входа приложения, index.php, в корневом каталоге проекта и вставьте в него приведенный ниже код.
Скопируйте код
Затем замените <A MOBILE PHONE NUMBER> на действительный номер мобильного телефона, а <A LAND LINE NUMBER> — на номер стационарного телефона.
Код загружает файл автозагрузки Composer (vendor/autoload.php) и регистрирует несколько переменных:
- Массив телефонных номеров. Это список номеров для фильтрации и отправки SMS.
- Ваш номер телефона Twilio. Он сообщает Twilio, с какого номера отправлять SMS.
- Объект клиента Twilio (Rest). Это центральный объект в PHP-библиотеке помощнике Twilio.
- Объект Monolog. Он упрощает инструментирование приложения, позволяя нам узнать, какие номера смогли получить SMS, а какие нет. Он будет записывать информацию в файл app.log в корневом каталоге проекта. Однако вы можете изменить это расположение.
- Объект MobilePhoneNumberFilterIterator. Как обсуждалось ранее, он будет отфильтровывать стационарные телефоны (и любой другой тип номера, кроме мобильных) из списка телефонных номеров. Он инициализируется с помощью ArrayIterator, который сам инициализируется массивом телефонных номеров для фильтрации и объектом клиента Twilio.
Затем выполняется итерация по MobilePhoneNumberFilterIterator, и SMS отправляется на любой номер, не являющийся стационарным.
Проверка того, что код работает должным образом
Теперь, когда код написан и готов к работе, пришло время увидеть его в действии. Для этого выполните приведенную ниже команду в новой вкладке терминала или сеансе.
Скопируйте код
В случае успеха вы должны увидеть в терминале вывод, аналогичный приведенному ниже.
Скопируйте код
Вот как избежать отправки SMS на стационарные телефоны в PHP с помощью API Twilio Lookup v2
Благодаря API Twilio Lookup v2 и стандартной библиотеке PHP отфильтровать стационарные телефоны (и другие типы номеров) из списка телефонных номеров довольно просто. Обязательно используйте эту функциональность, чтобы избежать списания средств за недоставленные SMS при интеграции с Twilio.
Что дальше?
Если вы хотите узнать больше о том, как использовать PHP с Twilio, ознакомьтесь со следующими руководствами:
- Совершение телефонных звонков с помощью PHP и Twilio Programmable Voice
- Отправка SMS с помощью PHP за 30 секунд
- Создание системы интерактивного голосового ответа (IVR) с помощью PHP
Мэттью Сеттер — редактор разделов PHP, Go и Rust в команде Twilio Voices, а также разработчик на каждом из этих языков. Он также является автором книг Mezzio Essentials и Deploy with Docker Compose. Вы можете связаться с ним по адресу msetter[at]twilio.com, а также найти его в LinkedIn и GitHub.








