Телефония

Добавьте Hermes Agent телефонные возможности без изменений в ядре инструментов. Выделите и сохраните номер Twilio, отправляйте и принимайте SMS/MMS, совершайте прямые звонки и исходящие звонки с ИИ-управлением через Bland.ai или Vapi.

Метаданные навыка

ИсточникОпциональный (устанавливается по запросу) — установите командой hermes skills install official/productivity/telephony
Путьoptional-skills/productivity/telephony
Версия1.0.0
АвторNous Research
ЛицензияMIT
Платформыlinux, macos, windows
Тегиtelephony, phone, sms, mms, voice, twilio, bland.ai, vapi, calling, texting
Связанные навыкиmaps, google-workspace, agentmail

Справочник: полный SKILL.md

инфо

Ниже приведено полное определение навыка, которое Hermes загружает при его активации. Именно это агент видит в виде инструкций, когда навык включён.

Telephony — Numbers, Calls, and Texts without Core Tool Changes

Этот опциональный навык даёт Hermes практические телефонные возможности, не добавляя телефонию в основной список инструментов.

В комплекте идёт вспомогательный скрипт scripts/telephony.py, который умеет:

  • сохранять учётные данные провайдеров в ~/.hermes/.env
  • искать и покупать телефонные номера Twilio
  • запоминать купленный номер для последующих сессий
  • отправлять SMS / MMS с этого номера
  • опрашивать входящие SMS без необходимости держать вебхук-сервер
  • совершать прямые звонки через Twilio с использованием TwiML <Say> или <Play>
  • импортировать номер Twilio в Vapi
  • размещать исходящие ИИ-звонки через Bland.ai или Vapi

Что решает этот навык

Навык закрывает практические телефонные задачи, которые реально нужны пользователям:

  • исходящие звонки
  • отправка сообщений
  • постоянный номер агента для повторного использования
  • чтение сообщений, пришедших на этот номер позже
  • сохранение номера и связанных идентификаторов между сессиями
  • устойчивая телефонная идентичность агента для опроса входящих SMS и других автоматизаций

Навык не превращает Hermes в полноценный шлюз входящих звонков в реальном времени. Входящие SMS читаются через опрос Twilio REST API — этого хватает для уведомлений и получения одноразовых кодов без необходимости поднимать вебхук-инфраструктуру.

Правила безопасности — обязательны

  1. Всегда запрашивать подтверждение перед звонком или отправкой сообщения.
  2. Никогда не набирать номера экстренных служб.
  3. Не использовать телефонию для преследования, спама, имперсонации и любых незаконных действий.
  4. Телефонные номера третьих лиц — конфиденциальные операционные данные:
    • не сохранять их в память Hermes
    • не включать в документацию навыков, сводки или заметки, если пользователь явно не попросил об обратном
  5. Сохранять номер Twilio, принадлежащий агенту, — допустимо: это часть конфигурации пользователя.
  6. VoIP-номера не гарантируют работу со всеми 2FA-сервисами сторонних провайдеров. Используйте с осторожностью и заранее предупреждайте пользователя.

Дерево выбора — какой сервис подходит?

Используйте эту логику вместо жёсткого выбора провайдера по умолчанию.

1) «Хочу, чтобы у Hermes был реальный телефонный номер»

Используйте Twilio.

Почему:

  • проще всего купить и удержать номер
  • лучшая поддержка SMS / MMS
  • наиболее простой сценарий опроса входящих SMS
  • самый чистый путь к входящим вебхукам или обработке звонков в будущем

Сценарии использования:

  • получать тексты позже
  • отправлять оповещения о деплоях / уведомления из cron
  • поддерживать переиспользуемую телефонную идентичность агента
  • пробовать телефонные схемы аутентификации в будущем

2) «Мне нужен самый простой исходящий ИИ-звонок прямо сейчас»

Используйте Bland.ai.

Почему:

  • быстрейшая настройка
  • один API-ключ
  • не нужно предварительно покупать или импортировать номер

Компромисс:

  • меньше гибкости
  • качество голоса приемлемое, но не наилучшее

3) «Хочу лучшее качество разговорного ИИ-голоса»

Используйте Twilio + Vapi.

Почему:

  • Twilio даёт собственный номер
  • Vapi обеспечивает более высокое качество ИИ-звонков и больший выбор голосов и моделей

Рекомендуемый процесс:

  1. Купите / сохраните номер Twilio
  2. Импортируйте его в Vapi
  3. Сохраните возвращённый VAPI_PHONE_NUMBER_ID
  4. Используйте ai-call --provider vapi

4) «Хочу позвонить с заранее записанным голосовым сообщением»

Используйте прямой звонок Twilio с публичным URL аудиофайла.

Почему:

  • проще всего воспроизвести собственный MP3
  • хорошо сочетается с text_to_speech в Hermes плюс любым публичным хостингом файлов или туннелем

Файлы и постоянное состояние

Навык хранит состояние телефонии в двух местах.

~/.hermes/.env

Для долгосрочных учётных данных провайдеров и идентификаторов принадлежащих номеров, например:

  • TWILIO_ACCOUNT_SID
  • TWILIO_AUTH_TOKEN
  • TWILIO_PHONE_NUMBER
  • TWILIO_PHONE_NUMBER_SID
  • BLAND_API_KEY
  • VAPI_API_KEY
  • VAPI_PHONE_NUMBER_ID
  • PHONE_PROVIDER (провайдер ИИ-звонков: bland или vapi)

~/.hermes/telephony_state.json

Для состояния только этого навыка, которое должно сохраняться между сессиями, например:

  • запомненный номер Twilio по умолчанию / SID
  • запомненный идентификатор номера Vapi
  • SID / дата последнего входящего сообщения — контрольные точки для опроса входящих

В результате:

  • при следующей загрузке навыка diagnose покажет, какой номер уже настроен
  • twilio-inbox --since-last --mark-seen продолжит с предыдущей контрольной точки

Найти вспомогательный скрипт

После установки навыка найдите скрипт так:

SCRIPT="$(find ~/.hermes/skills -path '*/telephony/scripts/telephony.py' -print -quit)"

Если SCRIPT пустой — навык ещё не установлен.

Установка

Это официальный опциональный навык, устанавливается из Skills Hub:

hermes skills search telephony
hermes skills install official/productivity/telephony

Настройка провайдеров

Twilio — собственный номер, SMS/MMS, прямые звонки, опрос входящих SMS

Зарегистрируйтесь по адресу:

Затем сохраните учётные данные в Hermes:

python3 "$SCRIPT" save-twilio ACXXXXXXXXXXXXXXXXXXXXXXXXXXXX your_auth_token_here

Поиск доступных номеров:

python3 "$SCRIPT" twilio-search --country US --area-code 702 --limit 5

Покупка и запоминание номера:

python3 "$SCRIPT" twilio-buy "+17025551234" --save-env

Список принадлежащих номеров:

python3 "$SCRIPT" twilio-owned

Установить один из них как номер по умолчанию:

python3 "$SCRIPT" twilio-set-default "+17025551234" --save-env
# или
python3 "$SCRIPT" twilio-set-default PNXXXXXXXXXXXXXXXXXXXXXXXXXXXX --save-env

Bland.ai — самые простые исходящие ИИ-звонки

Зарегистрируйтесь по адресу:

Сохраните конфигурацию:

python3 "$SCRIPT" save-bland your_bland_api_key --voice mason

Vapi — более высокое качество разговорного голоса

Зарегистрируйтесь по адресу:

Сначала сохраните API-ключ:

python3 "$SCRIPT" save-vapi your_vapi_api_key

Импортируйте ваш номер Twilio в Vapi и сохраните возвращённый идентификатор номера:

python3 "$SCRIPT" vapi-import-twilio --save-env

Если вы уже знаете идентификатор номера Vapi, сохраните его напрямую:

python3 "$SCRIPT" save-vapi your_vapi_api_key --phone-number-id vapi_phone_number_id_here

Диагностика текущего состояния

В любой момент можно проверить, что навык уже знает:

python3 "$SCRIPT" diagnose

Запускайте это в первую очередь при возобновлении работы в новой сессии.

Типичные рабочие процессы

A. Купить номер агента и использовать его в дальнейшем

  1. Сохраните учётные данные Twilio:
python3 "$SCRIPT" save-twilio AC... auth_token_here
  1. Найдите подходящий номер:
python3 "$SCRIPT" twilio-search --country US --area-code 702 --limit 10
  1. Купите его и сохраните в ~/.hermes/.env + состояние:
python3 "$SCRIPT" twilio-buy "+17025551234" --save-env
  1. В следующей сессии запустите:
python3 "$SCRIPT" diagnose

Команда покажет запомненный номер по умолчанию и состояние контрольных точек входящих.

B. Отправить SMS с номера агента

python3 "$SCRIPT" twilio-send-sms "+15551230000" "Your deployment completed successfully."

С медиафайлом:

python3 "$SCRIPT" twilio-send-sms "+15551230000" "Here is the chart." --media-url "https://example.com/chart.png"

C. Проверить входящие сообщения без вебхук-сервера

Опрос входящих для номера Twilio по умолчанию:

python3 "$SCRIPT" twilio-inbox --limit 20

Показать только сообщения после последней контрольной точки и продвинуть её после прочтения:

python3 "$SCRIPT" twilio-inbox --since-last --mark-seen

Это основной ответ на вопрос «как получить сообщения, пришедшие на номер, при следующей загрузке навыка?»

D. Прямой звонок через Twilio со встроенным TTS

python3 "$SCRIPT" twilio-call "+15551230000" --message "Hello! This is Hermes calling with your status update." --voice Polly.Joanna

E. Звонок с заранее записанным или кастомным голосовым сообщением

Это основной сценарий для повторного использования поддержки text_to_speech в Hermes.

Подходит, когда:

  • звонок должен использовать голос TTS из Hermes, а не Twilio <Say>
  • нужна односторонняя голосовая доставка: брифинг, оповещение, напоминание, обновление статуса
  • живой разговорный звонок не нужен

Сгенерируйте или разместите аудио отдельно, затем:

python3 "$SCRIPT" twilio-call "+155****0000" --audio-url "https://example.com/briefing.mp3"

Рекомендуемый процесс Hermes TTS → Twilio Play:

  1. Сгенерируйте аудио с помощью text_to_speech в Hermes.
  2. Сделайте получившийся MP3 публично доступным.
  3. Разместите звонок через Twilio с --audio-url.

Пример потока агента:

  • Попросите Hermes создать аудио сообщения через text_to_speech
  • При необходимости опубликуйте файл через временный статический хост / туннель / URL объектного хранилища
  • Используйте twilio-call --audio-url ... для доставки по телефону

Подходящие варианты хостинга для MP3:

  • временный публичный URL объектного хранилища
  • короткоживущий туннель к локальному статическому файловому серверу
  • любой существующий HTTPS-URL, доступный провайдеру напрямую

Важное замечание:

  • Hermes TTS хорошо работает для заранее записанных исходящих сообщений
  • Bland/Vapi лучше подходят для живых разговорных ИИ-звонков: они сами ведут стек телефонного аудио в реальном времени
  • STT/TTS в Hermes здесь не используются как полнодуплексный движок телефонного разговора — это потребовало бы куда более тяжёлой стриминг/вебхук-интеграции

F. Навигация по телефонному дереву / IVR через прямой звонок Twilio

Если нужно нажимать цифры после установления соединения, используйте --send-digits. Twilio интерпретирует w как короткую паузу.

python3 "$SCRIPT" twilio-call "+18005551234" --message "Connecting to billing now." --send-digits "ww1w2w3"

Удобно для перехода в конкретную ветку меню перед передачей оператору или коротким статусным сообщением.

G. Исходящий ИИ-звонок через Bland.ai

python3 "$SCRIPT" ai-call "+15551230000" "Call the dental office, ask for a cleaning appointment on Tuesday afternoon, and if they do not have Tuesday availability, ask for Wednesday or Thursday instead." --provider bland --voice mason --max-duration 3

Проверить статус:

python3 "$SCRIPT" ai-status <call_id> --provider bland

Задать аналитические вопросы Bland после завершения звонка:

python3 "$SCRIPT" ai-status <call_id> --provider bland --analyze "Was the appointment confirmed?,What date and time?,Any special instructions?"

H. Исходящий ИИ-звонок через Vapi с вашего номера

  1. Импортируйте номер Twilio в Vapi:
python3 "$SCRIPT" vapi-import-twilio --save-env
  1. Разместите звонок:
python3 "$SCRIPT" ai-call "+15551230000" "You are calling to make a dinner reservation for two at 7:30 PM. If that is unavailable, ask for the nearest time between 6:30 and 8:30 PM." --provider vapi --max-duration 4
  1. Проверьте результат:
python3 "$SCRIPT" ai-status <call_id> --provider vapi

Рекомендуемый порядок действий агента

Когда пользователь просит совершить звонок или отправить сообщение:

  1. Определите подходящий путь по дереву выбора.
  2. Запустите diagnose, если состояние конфигурации не ясно.
  3. Соберите полные сведения о задаче.
  4. Подтвердите с пользователем перед набором номера или отправкой.
  5. Используйте правильную команду.
  6. При необходимости опросите результаты.
  7. Сформулируйте итог, не сохраняя телефонные номера третьих лиц в память Hermes.

Что этот навык пока не умеет

  • отвечать на входящие звонки в реальном времени
  • получать живой push входящих SMS в цикл агента через вебхуки
  • гарантированно работать с произвольными 2FA-сервисами сторонних провайдеров

Всё это требует инфраструктуры, выходящей за рамки чистого опционального навыка.

Подводные камни

  • Пробные аккаунты Twilio и региональные ограничения могут запрещать звонки / SMS определённым адресатам.
  • Некоторые сервисы отклоняют VoIP-номера для 2FA.
  • twilio-inbox опрашивает REST API — это не мгновенная push-доставка.
  • Исходящие звонки через Vapi требуют корректно импортированного номера.
  • Bland проще всего, но не всегда звучит лучше.
  • Не сохраняйте произвольные телефонные номера третьих лиц в память Hermes.

Контрольный список после настройки

После настройки всё перечисленное должно работать только силами этого навыка:

  1. diagnose показывает готовность провайдеров и запомненное состояние
  2. искать и покупать номер Twilio
  3. сохранять его в ~/.hermes/.env
  4. отправлять SMS с этого номера
  5. опрашивать входящие сообщения позже
  6. совершать прямой звонок через Twilio
  7. совершать ИИ-звонок через Bland или Vapi

Ссылки

ESC