Новое

Отправка SMS через Python: пошаговый гайд с примерами

Для отправки SMS через Python понадобится API‑провайдер, библиотека requests и настройка авторизации. Ниже приведён практический пример, который можно быстро внедрить в проект.

Как выбрать подходящего SMS‑провайдера?

Выбор начинается с критериев: наличие REST‑API, поддержка JSON, тарифы, покрытие стран. В 2026 г. популярными являются Twilio, Plivo, и локальные провайдеры с открытым API, например полное руководство. Проверь лимиты на количество сообщений и наличие библиотек для Python.

Ключевые параметры сравнения

ПараметрTwilioPlivoЛокальный провайдер
Код авторизацииBasic AuthBasic AuthOAuth 2.0
Формат payloadJSONJSONSOAP/JSON
Тарифы0,07 $ / сообщение0,05 $ / сообщение0,02 $ / сообщение

Установка и базовая конфигурация

Установите библиотеку requests:

pip install requests

Сохраните учётные данные в переменных окружения для безопасности.

Отправка SMS через REST‑API

Ниже пример использования Twilio API. Аналогично работает и любой другой провайдер, заменив URL и параметры.

import os
import requests

api_url = "https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages.json"
account_sid = os.getenv("TWILIO_SID")
auth_token = os.getenv("TWILIO_TOKEN")

payload = {
    "From": "+1234567890",
    "To": "+998123456789",
    "Body": "Привет! Это тестовое сообщение"
}

response = requests.post(api_url.format(account_sid=account_sid), data=payload, auth=(account_sid, auth_token))
print(response.status_code)
print(response.json())

Ответ сервера содержит поля sid, status и error_message при ошибке.

Обработка ошибок и статусных кодов

Смотрите справочник для полного списка кодов.

Батч‑рассылка и очереди

Для больших объёмов используйте очередь (Redis, RabbitMQ) и worker‑процессы. Чтение списка номеров из CSV:

import csv

def load_numbers(file_path):
    with open(file_path, newline='') as f:
        reader = csv.DictReader(f)
        return [row["phone"] for row in reader]

Worker может отправлять сообщение, проверять статус и обновлять базу.

Локализация и ограничения по символам

SMS ограничена 160 символами для GSM и 70 для UTF‑8. Автоматически разбивайте длинные сообщения:

def split_message(text, max_len=160):
    return [text[i:i+max_len] for i in range(0, len(text), max_len)]

Факторы стоимости и оптимизации

Стоимость зависит от страны, типа номера и объёма. Планируйте рассылку по плану “batch” – разбейте на группы, чтобы избежать лимитов и снизить нагрузку.

Безопасность и GDPR

Никогда не храните номера в открытом виде. Храните их в зашифрованном виде и используйте OAuth для доступа к API, как описано в статье.

FAQ

  • Как быстро тестировать SMS‑API без реальных номеров? Используйте тестовые номера, предоставляемые провайдером, либо сервисы типа смс‑шлюз.
  • Можно ли использовать Python‑библиотеку smsapi? Да, но она не поддерживает OAuth. Для современных требований лучше REST‑API.
  • Сколько ошибок чаще всего встречается? Чаще всего 400‑показывают неверный формат номера, 401 – неверные токены, 429 – превышение лимита.
  • Как интегрировать SMS в маркетинговую кампанию? Создайте таблицу с сегментами, отправьте тест, измерьте коэффициент отклика и масштабируйте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *