Настройка СМС (Twilio)
Гермес поддерживает SMS через SMS API Twilio. Люди отправляют текстовые сообщения на ваш номер телефона Twilio и получают ответы ИИ — тот же разговорный опыт, что и в Telegram или Discord, но через стандартные текстовые сообщения.
ℹ️ Info
Общие учётные данные SMS-шлюз использует общие учётные данные с внешнего навыком телефона. Если вы уже настроили Twilio для голосовых вызовов или разовых SMS, шлюз работает с такими жеTWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN и TWILIO_PHONE_NUMBER.Предварительные требования
- Учётная запись Twilio — Зарегистрируйтесь на twilio.com (доступна бесплатная пробная версия)
- Номер телефона Twilio с поддержкой SMS
- Общедоступный сервер — Twilio отправляет вебхуки на ваш сервер при поступлении SMS
- aiohttp —
pip install 'hermes-agent[sms]'
Шаг 1: Получите учётные данные Twilio
- Перейдите в Консоль Twilio
- Скопируйте SID аккаунта и Токен аутентификации с панели управления.
- Перейдите в Телефонные номера → Управление → Активные номера — запишите свой номер телефона в формате E.164 (например,
+15551234567)
Шаг 2: Настраиваем Гермес
Интерактивная настройка (рекомендуется)
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:
- Перейдите в Номера телефонов → Управление → Активные номера.
- Нажмите на свой номер телефона.
- В разделе Сообщения → ПРИХОДИТ СООБЩЕНИЕ установите:
- Вебхук:
https://ваш-сервер:8080/webhooks/twilio - Метод HTTP:
POSTУстановите💡 Tip
Открытие вашего вебхука Если вы запускаете Hermes локально, воспользуйтесь туннелем, чтобы открыть вебхук:# Используя cloudflared cloudflared tunnel --url http://localhost:8080 # Используя 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Если вы видите «Отказ в запуске: требуется SMS_WEBHOOK_URL», установите «SMS_WEBHOOK_URL» в публичном URL-адресе, настроенном в консоли вашей Twilio (см. Шаг 3).
Отправить текстовое сообщение на ваш номер Twilio — Гермес ответит через SMS.
Переменные окружения
Переменная Обязательно Описание TWILIO_ACCOUNT_SIDДа SID учетной записи Twilio (начинается с AC)TWILIO_AUTH_TOKENДа Auth Token Twilio (также используется для проверки подлинности вебхука) TWILIO_PHONE_NUMBERДа Ваш номер телефона Twilio (формат E.164) SMS_WEBHOOK_URLДа Публичный URL-адрес для проверки доступности Twilio — должен совпадать с URL-адресом вебхука в вашей консоли Twilio SMS_WEBHOOK_PORTНет Порт прослушивания вебхука (по умолчанию: 8080)SMS_WEBHOOK_HOSTНет Адрес привязки вебхука (по умолчанию: 0.0.0.0)SMS_INSECURE_NO_SIGNATUREНет Установите true, чтобы отключить проверку загрузки (только для локальной разработки — не для продакшена) SMS_ALLOWED_USERSНет Разделённые запятыми номера телефонов в формате E.164, которыми разрешено общение SMS_ALLOW_ALL_USERSНет Установите true, чтобы разрешить все (не рекомендуется) SMS_HOME_CHANNELНет Номер телефона для решения задачи cron / протокол SMS_HOME_CHANNEL_NAMEНет Отражаемое имя для канала домашнего (по умолчанию: Дом)
Поведение, специальное для SMS
- Только обычный текст — Markdown автоматически удаляется, так как SMS отображает его как буквенные символы.
- Ограничение в 1600 символов — Более длинные ответы разбиваются на несколько сообщений на границах (новые строки, затем пробелы).
- Предотвращение эха — Сообщения с вашим собственным номером Twilio отключаются для предотвращения циклов
- Открытие номеров телефонов — Номера телефонов открываются в логах для конфиденциальности.
Безопасность
Проверка вебхука
Гермес впоследствии обнаружил, что входящие вебхуки действительно исходят от 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.</div> --- ## Устранение неполадок ### Сообщения не приходят 1. Убедитесь, что URL-адрес вебхука Twilio правильный и общедоступен. 2. Убедитесь, что `TWILIO_ACCOUNT_SID` и `TWILIO_AUTH_TOKEN` верны. 3. Проверить наличие консоли Twilio → **Монитор → Журналы → Сообщения** на ошибки доставки 4. Убедитесь, что ваш номер телефона есть в `SMS_ALLOWED_USERS` (или `SMS_ALLOW_ALL_USERS=true`) ### Ответы не отправляются 1. Проверьте, правильно ли установлен `TWILIO_PHONE_NUMBER` (формат E.164 с `+`) 2. Убедитесь, что ваша учетная запись Twilio имеет номер с поддержкой SMS. 3. Проверьте логи шлюза Hermes на наличие ошибок API Twilio. ### Конфликты портов вебхука Если порт 8080 уже занят, замените его: ```bash SMS_WEBHOOK_PORT=3001Обновите URL-адрес вебхука в консоли Twilio соответствующим образом.