Настройка SMS (Twilio)
VibeOS подключается к SMS через API Twilio. Люди отправляют сообщения на ваш номер Twilio и получают ответы от ИИ — тот же диалоговый опыт, что и в Telegram или Discord, но через обычные текстовые сообщения.
SMS-шлюз использует общие учётные данные с опциональным навыком телефонии. Если вы уже настроили Twilio для голосовых звонков или разовых SMS, шлюз работает с теми же TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN и TWILIO_PHONE_NUMBER.
Предварительные требования
- Аккаунт Twilio — Зарегистрируйтесь на twilio.com (доступна бесплатная пробная версия)
- Номер телефона Twilio с поддержкой SMS
- Публично доступный сервер — Twilio отправляет вебхуки на ваш сервер при получении SMS
- aiohttp —
cd ~/.vibeos/vibeos-agent && uv pip install -e ".[sms]"
Шаг 1: Получите учётные данные Twilio
- Перейдите в Консоль Twilio
- Скопируйте Account SID и Auth Token с панели управления
- Перейдите в Phone Numbers → Manage → Active Numbers — запишите ваш номер телефона в формате E.164 (например,
+15551234567)
Шаг 2: Настройте VibeOS
Интерактивная настройка (рекомендуется)
vibeos gateway setup
Выберите SMS (Twilio) из списка платформ. Мастер запросит ваши учётные данные.
Ручная настройка
Добавьте в ~/.vibeos/.env:
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=ваш_токен_авторизации
TWILIO_PHONE_NUMBER=+15551234567
# Безопасность: ограничение по конкретным номерам (рекомендуется)
SMS_ALLOWED_USERS=+15559876543,+15551112222
# Опционально: домашний канал для доставки заданий cron
SMS_HOME_CHANNEL=+15559876543
Шаг 3: Настройте вебхук Twilio
Twilio необходимо знать, куда отправлять входящие сообщения. В Консоли Twilio:
- Перейдите в Phone Numbers → Manage → Active Numbers
- Нажмите на ваш номер телефона
- В разделе Messaging → A MESSAGE COMES IN укажите:
- Webhook:
https://ваш-сервер:8080/webhooks/twilio - HTTP Method:
POST
- Webhook:
Если вы запускаете VibeOS локально, используйте туннель для открытия вебхука:
# Используя 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://ваш-сервер:8080/webhooks/twilio
Порт вебхука по умолчанию — 8080. Измените с помощью:
SMS_WEBHOOK_PORT=3000
Шаг 4: Запустите шлюз
vibeos 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).
Отправьте сообщение на ваш номер Twilio — VibeOS ответит через SMS.
Переменные окружения
| Переменная | Обязательная | Описание |
|---|---|---|
TWILIO_ACCOUNT_SID | Да | Account 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 | Нет | Адрес привязки вебхука (по умолчанию: 127.0.0.1) |
SMS_INSECURE_NO_SIGNATURE | Нет | Установите true для отключения проверки подписи (только для локальной разработки — не для продакшена) |
SMS_ALLOWED_USERS | Нет | Разделённые запятыми номера телефонов в формате E.164, которым разрешено общаться |
SMS_ALLOW_ALL_USERS | Нет | Установите true, чтобы разрешить всем (не рекомендуется) |
SMS_HOME_CHANNEL | Нет | Номер телефона для доставки заданий cron / уведомлений |
SMS_HOME_CHANNEL_NAME | Нет | Отображаемое имя для домашнего канала (по умолчанию: Home) |
Особенности работы SMS
- Только обычный текст — Markdown автоматически удаляется, так как SMS отображает его как буквальные символы
- Ограничение в 1600 символов — Длинные ответы разбиваются на несколько сообщений по естественным границам (переносы строк, затем пробелы)
- Предотвращение эха — Сообщения с вашего собственного номера Twilio игнорируются для предотвращения циклов
- Сокрытие номеров телефонов — Номера телефонов скрываются в логах для конфиденциальности
Безопасность
Проверка подписи вебхука
VibeOS проверяет, что входящие вебхуки действительно исходят от 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.
Устранение неполадок
Сообщения не приходят
- Проверьте, что URL вебхука Twilio корректен и публично доступен
- Убедитесь, что
TWILIO_ACCOUNT_SIDиTWILIO_AUTH_TOKENверны - Проверьте в Консоли Twilio → Monitor → Logs → Messaging на наличие ошибок доставки
- Убедитесь, что ваш номер телефона есть в
SMS_ALLOWED_USERS(или установленSMS_ALLOW_ALL_USERS=true)
Ответы не отправляются
- Проверьте, что
TWILIO_PHONE_NUMBERустановлен корректно (формат E.164 с+) - Убедитесь, что ваш аккаунт Twilio имеет номера с поддержкой SMS
- Проверьте логи шлюза VibeOS на наличие ошибок API Twilio
Конфликты портов вебхука
Если порт 8080 уже занят, измените его:
SMS_WEBHOOK_PORT=3001
Обновите URL вебхука в Консоли Twilio соответствующим образом.