Настройка SMS (Twilio)

Hermes connects to SMS through the Twilio API. People text your Twilio phone number and get AI responses back — same conversational experience as Telegram or Discord, but over standard text messages.

info Shared Credentials SMS-шлюз использует те же учётные данные, что и опциональный навык телефонии. Если вы уже настроили Twilio для голосовых вызовов или отправки SMS, шлюз работает с теми же TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN и TWILIO_PHONE_NUMBER.


Предварительные требования


Шаг 1: Получите учётные данные Twilio

  1. Go to the Twilio Console

  2. Copy your Account SID and Auth Token from the dashboard

  3. Go to Phone Numbers → Manage → Active Numbers — note your phone number in E.164 format (e.g., +15551234567)


Шаг 2: Настройка Hermes

hermes gateway setup

Выберите SMS (Twilio) из списка платформ. Мастер настройки запросит ваши учётные данные.

Ручная настройка

Добавьте в ~/.hermes/.env:

TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token_here
TWILIO_PHONE_NUMBER=+15551234567

# Безопасность: ограничить конкретными номерами (рекомендуется)
SMS_ALLOWED_USERS=+15559876543,+15551112222

# Опционально: задать домашний канал для доставки cron-задач
SMS_HOME_CHANNEL=+15559876543

Шаг 3: Настройка вебхука Twilio

Twilio должен знать, куда отправлять входящие сообщения. В консоли Twilio:

  1. Go to Phone Numbers → Manage → Active Numbers

  2. Click your phone number

  3. Under Messaging → A MESSAGE COMES IN, set:

  4. Webhook: https://your-server:8080/webhooks/twilio
  5. HTTP-метод: POST

tip Exposing Your Webhook Если Hermes работает локально, используйте туннель для публикации вебхука:

# Using cloudflared
cloudflared tunnel --url http://localhost:8080

# Using ngrok
ngrok http 8080

Укажите полученный публичный URL как вебхук Twilio.

Установите SMS_WEBHOOK_URL на тот же URL, который вы настроили в Twilio. Это необходимо для проверки подписи Twilio — адаптер откажется запускаться без него:

# Должен совпадать с URL вебхука в вашей консоли Twilio
SMS_WEBHOOK_URL=https://your-server:8080/webhooks/twilio

Порт вебхука по умолчанию — 8080. Измените с помощью:

SMS_WEBHOOK_PORT=3000

Шаг 4: Запуск шлюза

hermes gateway

Вы должны увидеть:

[sms] Twilio webhook server listening on 127.0.0.1:8080, from: +1555***4567

Если вы видите Refusing to start: SMS_WEBHOOK_URL is required, установите SMS_WEBHOOK_URL на публичный URL, настроенный в вашей консоли Twilio (см. Шаг 3).

Отправьте SMS на ваш номер Twilio — Hermes ответит через SMS.


Переменные окружения

Переменная Обязательная Описание
TWILIO_ACCOUNT_SID Yes Twilio Account SID (начинается с AC)
TWILIO_AUTH_TOKEN Yes Twilio Auth Token (также используется для проверки подписи вебхука)
TWILIO_PHONE_NUMBER Yes Ваш номер телефона Twilio (формат E.164)
SMS_WEBHOOK_URL Yes Публичный URL для проверки подписи Twilio — должен совпадать с URL вебхука в вашей консоли Twilio
SMS_WEBHOOK_PORT No Порт слушателя вебхука (по умолчанию: 8080)
SMS_WEBHOOK_HOST No Адрес привязки вебхука (по умолчанию: 0.0.0.0)
SMS_INSECURE_NO_SIGNATURE No Установите в true для отключения проверки подписи (только для локальной разработки — не для продакшена)
SMS_ALLOWED_USERS No Номера телефонов в формате E.164 через запятую, которым разрешено общаться
SMS_ALLOW_ALL_USERS No Установите в true, чтобы разрешить всем (не рекомендуется)
SMS_HOME_CHANNEL No Номер телефона для доставки cron-задач / уведомлений
SMS_HOME_CHANNEL_NAME No Отображаемое имя домашнего канала (по умолчанию: Home)

Особенности поведения SMS


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

Проверка подписи вебхука

Hermes проверяет, что входящие вебхуки действительно исходят от Twilio, верифицируя заголовок X-Twilio-Signature (HMAC-SHA1). Это предотвращает внедрение поддельных сообщений злоумышленниками.

SMS_WEBHOOK_URL обязателен. Установите его на публичный URL, настроенный в вашей консоли Twilio. Адаптер откажется запускаться без него.

Для локальной разработки без публичного URL можно отключить проверку:

# Только для локальной разработки — НЕ для продакшена
SMS_INSECURE_NO_SIGNATURE=true

Списки разрешённых пользователей

Шлюз по умолчанию запрещает всем пользователям. Настройте список разрешённых:

# Рекомендуется: ограничить конкретными номерами телефонов
SMS_ALLOWED_USERS=+15559876543,+15551112222

# Или разрешить всем (НЕ рекомендуется для ботов с доступом к терминалу)
SMS_ALLOW_ALL_USERS=true
SMS не имеет встроенного шифрования. Не используйте SMS для операций с конфиденциальными данными, если вы не понимаете последствий для безопасности. Для конфиденциальных случаев используйте Signal или Telegram.

Диагностика проблем

Сообщения не поступают

  1. Check your Twilio webhook URL is correct and publicly accessible

  2. Verify TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN are correct

  3. Check the Twilio Console → Monitor → Logs → Messaging for delivery errors

  4. Ensure your phone number is in SMS_ALLOWED_USERS (or SMS_ALLOW_ALL_USERS=true)

Ответы не отправляются

  1. Check TWILIO_PHONE_NUMBER is set correctly (E.164 format with +)

  2. Verify your Twilio account has SMS-capable numbers

  3. Check Hermes gateway logs for Twilio API errors

Конфликты портов вебхука

Если порт 8080 уже занят, измените его:

SMS_WEBHOOK_PORT=3001

Обновите URL вебхука в консоли Twilio соответственно.