/webhooks/sms), по умолчанию проверяет подписи запросов Twilio и отправляет ответы через Messages API Twilio.
Статус: официальный плагин, устанавливается отдельно. Только текст: без MMS и медиафайлов, только личные сообщения.
Сопряжение
Политика по умолчанию для личных сообщений по SMS — сопряжение.
Безопасность Gateway
Проверьте доступность Webhook извне и средства управления доступом отправителей.
Устранение неполадок канала
Диагностика и инструкции по устранению неполадок для разных каналов.
Перед началом
Вам потребуется:- Официальный плагин SMS, установленный с помощью
openclaw plugins install @openclaw/sms. - Учетная запись Twilio с телефонным номером, поддерживающим SMS, или Twilio Messaging Service.
- Account SID и Auth Token Twilio.
- Общедоступный URL-адрес HTTPS, ведущий к вашему OpenClaw Gateway.
- Выбранная политика отправителей:
pairing(по умолчанию) для личного использования,allowlistдля предварительно одобренных телефонных номеров илиopenтолько для намеренно общедоступного доступа по SMS.
Быстрая настройка
1
Установите плагин
2
Создайте или выберите отправителя Twilio
В Twilio откройте Phone Numbers > Manage > Active numbers и выберите номер, поддерживающий SMS. Сохраните:
- Account SID, например
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- Телефонный номер отправителя, например
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
Настройте канал SMS
Сохраните этот файл как Примените его:
sms.patch.json5 и замените заполнители:4
Направьте Twilio на Webhook Gateway
В настройках телефонного номера Twilio откройте Messaging и задайте для A message comes in значение:Используйте HTTP
POST. Локальный путь по умолчанию — /webhooks/sms; измените channels.sms.webhookPath, если вам нужен другой маршрут.5
Опубликуйте точный путь Webhook SMS
Ваш общедоступный URL-адрес должен направлять путь SMS к процессу Gateway (порт по умолчанию — Голосовые вызовы и SMS используют разные пути Webhook. Если один номер Twilio обрабатывает оба типа, сохраните оба маршрута в настройках Twilio и туннеля.
18789). Если для локального тестирования вы используете Tailscale Funnel, явно опубликуйте /webhooks/sms:6
Запустите Gateway и одобрите первого отправителя
Примеры конфигурации
Все ключи находятся вchannels.sms (а для отдельных учетных записей — в channels.sms.accounts.<id>):
Файл конфигурации
Используйте настройку через файл конфигурации, если хотите хранить определение канала вместе с конфигурацией Gateway:Переменные окружения
Переменные окружения применяются только к учетной записи по умолчанию; значения конфигурации имеют приоритет над значениями переменных окружения.Auth Token через SecretRef
authToken может быть SecretRef (source: "env" | "file" | "exec"). Используйте этот вариант, если Gateway должен получать Auth Token Twilio из среды выполнения секретов OpenClaw, а не хранить его в конфигурации открытым текстом:
Отправитель Messaging Service
ИспользуйтеmessagingServiceSid вместо fromNumber, если Twilio должен выбирать отправителя через Messaging Service:
fromNumber, и messagingServiceSid, используется fromNumber.
Исходящий получатель по умолчанию
ЗадайтеdefaultTo, если автоматизация или доставка по инициативе агента должна использовать получателя по умолчанию, когда в процессе отправки не указана явная цель:
Управление доступом
channels.sms.dmPolicy управляет прямым доступом по SMS:
pairing(по умолчанию): неизвестные отправители получают код сопряжения; одобрите его с помощьюopenclaw pairing approve sms <CODE>.allowlist: обрабатываются только отправители изallowFrom. ПустойallowFromотклоняет всех отправителей (Gateway записывает предупреждение при запуске).open: проверка конфигурации требует, чтобыallowFromсодержал"*". Без подстановочного знака общаться могут только указанные номера.disabled: все входящие личные сообщения отбрасываются.
allowFrom должны быть телефонными номерами в формате E.164, например +15551234567. Префиксы sms: и twilio-sms: принимаются и нормализуются. Для личного помощника предпочтительно использовать dmPolicy: "allowlist" с явно указанными телефонными номерами:
Отправка SMS
При выбранном канале SMS в качестве целей принимаются номера E.164 без префикса или с префиксомsms::
twilio-sms: выбирает этот канал, не перехватывая служебный префикс sms:, который iMessage использует для выбора доставки SMS через оператора для собственных целей:
--target. defaultTo предназначен для автоматизации и доставки по инициативе агента, когда цель можно определить из конфигурации канала.
Ответы агента во входящих SMS-диалогах автоматически отправляются обратно отправителю через настроенного отправителя Twilio.
SMS выводятся в виде обычного текста. OpenClaw удаляет разметку Markdown, преобразует блоки кода в обычный текст, переписывает ссылки в виде label (url) и перед отправкой через Twilio разбивает длинные ответы на части размером не более textChunkLimit символов (по умолчанию 1500).
Проверка настройки
После запуска Gateway:- Убедитесь, что в журнале Gateway отображается маршрут Webhook для SMS.
- Запустите проверку на стороне Twilio (она проверяет настроенные URL и метод Webhook Twilio, а также недавние ошибки входящих запросов):
- Отправьте SMS на номер Twilio со своего телефона.
- Выполните
openclaw pairing list sms. - Подтвердите код сопряжения с помощью
openclaw pairing approve sms <CODE>. - Отправьте ещё одно SMS и убедитесь, что агент отвечает.
Сквозное тестирование из iMessage/SMS в macOS
На компьютере Mac, который может отправлять SMS оператора через Messages, можно использоватьimsg для управления стороной отправителя, не используя телефон:
Безопасность Webhook
По умолчанию OpenClaw проверяетX-Twilio-Signature с помощью publicWebhookUrl и authToken. Часть конечной точки в publicWebhookUrl должна побайтно совпадать с URL, настроенным в Twilio, включая схему, хост, путь и строку запроса. В соответствии с требованиями Twilio OpenClaw исключает фрагменты переопределения подключения (#...) из вычисления подписи.
Независимо от проверки подписи маршрут Webhook также применяет следующие ограничения:
- Только
POST. - Лимит неудачных запросов — 300 запросов в минуту для каждой комбинации учётной записи SMS, маршрута Webhook и определённого адреса клиента. Все запросы учитываются в этом лимите, но HTTP 429 возвращается только после того, как запрос не прошёл разбор тела, проверку Twilio или сопоставление AccountSid.
- Ограничение частоты обрабатываемых обратных вызовов — 30 принятых обратных вызовов в минуту для каждой комбинации учётной записи SMS, маршрута Webhook и определённого адреса клиента после успешного прохождения этих проверок (при превышении возвращается HTTP 429). Если проверка подписи отключена, этот лимит 30/мин является максимальной частотой обработки неаутентифицированных запросов.
- Адреса клиентов определяются с помощью общих правил доверенных прокси Gateway. Если
gateway.trustedProxiesсодержит обратный прокси, перенаправляющий обратные вызовы Twilio, OpenClaw применяет эти ограничения по переданному адресу клиента; в противном случае используется адрес непосредственного сокет-соединения. - Значение
AccountSidв полезной нагрузке должно совпадать с настроеннымaccountSid(иначе возвращается HTTP 403). - Повторно полученные значения
MessageSidдедуплицируются в течение 10 минут. - Кэш повторов каждой учётной записи SMS хранит до 10 000 действующих SID сообщений. Когда все слоты заняты действующими значениями, новые Webhook для этой учётной записи отклоняются с HTTP 429 и заголовком
Retry-After, пока не истечёт срок действия самого старого слота. - Тела запросов размером более 32 КБ отклоняются.
Retry-After. Переопределения подключения #rp=4xx и #rp=all включают повторы при ошибках 4xx, однако Twilio ограничивает всю транзакцию повторных попыток 15 секундами, поэтому попытки всё равно могут завершиться до освобождения слота кэша повторов. Настройте резервный URL, если неудачные доставки должен принимать другой обработчик; рассматривайте ответ 429 как отказ с закрытием доступа, а не как надёжный механизм обратного давления.
Только для локального тестирования через туннель можно задать:
Конфигурация нескольких учётных записей
Используйтеaccounts, если вы обслуживаете несколько номеров Twilio:
webhookPath; Gateway отказывается регистрировать маршрут Webhook, путь которого уже принадлежит другой учётной записи. Резервные значения переменных окружения TWILIO_*/SMS_* применяются только к учётной записи по умолчанию; чтобы выбрать другую учётную запись по умолчанию, задайте defaultAccount.
Устранение неполадок
Twilio возвращает 403 или OpenClaw отклоняет Webhook
Убедитесь, чтоpublicWebhookUrl точно совпадает с URL, настроенным в Twilio, включая схему, хост, путь и строку запроса. Twilio подписывает строку общедоступного URL, поэтому перезапись адреса прокси-сервером и альтернативные имена хоста могут нарушить проверку подписи.
Ответ 403 с Invalid account означает, что AccountSid во входящей полезной нагрузке не совпадает с настроенным accountSid; убедитесь, что Webhook указывает на учётную запись, которой принадлежит номер.
Запрос на сопряжение не появляется
Проверьте URL и метод Webhook Messaging для номера Twilio. Он должен указывать на URL Webhook SMS и использоватьPOST. Также убедитесь, что Gateway доступен из общедоступного интернета или через ваш туннель.
Если в журнале сообщений Twilio отображается ошибка 11200, Twilio принял входящее SMS, но не смог подключиться к вашему Webhook. Проверьте следующее:
- Параметр Twilio Messaging > A message comes in указывает на
publicWebhookUrl. - В качестве метода используется
POST. - Туннель или обратный прокси предоставляет доступ точно к
webhookPath; для Tailscale Funnel выполнитеtailscale funnel statusи убедитесь, что в списке присутствует/webhooks/sms. publicWebhookUrlиспользует те же схему, хост, путь и строку запроса, которые отправляет Twilio, чтобы при проверке подписи можно было воспроизвести подписанный URL.
openclaw channels status --channel sms --probe показывает как несоответствия в настройках Webhook Twilio, так и недавние ошибки 11200.
Не удаётся отправить исходящие сообщения
Убедитесь, что разрешены значенияaccountSid, authToken и либо fromNumber, либо messagingServiceSid. Если вы используете пробную учётную запись Twilio, перед отправкой исходящих SMS может потребоваться подтвердить номер получателя в Twilio.
Сообщения приходят, но агент не отвечает
ПроверьтеdmPolicy и allowFrom. При политике pairing, используемой по умолчанию, отправитель должен быть одобрен до обработки обычных обращений к агенту.