/webhooks/sms), valida as assinaturas de solicitação da Twilio por padrão e envia as respostas pela Messages API da Twilio.
Status: Plugin oficial, instalado separadamente. Somente texto: sem MMS/mídia, apenas mensagens diretas.
Pareamento
A política padrão de MD para SMS é o pareamento.
Segurança do Gateway
Revise a exposição do Webhook e os controles de acesso dos remetentes.
Solução de problemas do canal
Diagnósticos entre canais e procedimentos de reparo.
Antes de começar
É necessário ter:- O Plugin oficial de SMS instalado com
openclaw plugins install @openclaw/sms. - Uma conta da Twilio com um número de telefone compatível com SMS ou um Twilio Messaging Service.
- O Account SID e o Auth Token da Twilio.
- Uma URL HTTPS pública que alcance o Gateway do OpenClaw.
- Uma política de remetentes:
pairing(padrão) para uso privado,allowlistpara números de telefone pré-aprovados ouopensomente para acesso público a SMS configurado intencionalmente.
Configuração rápida
1
Instale o Plugin
2
Crie ou escolha um remetente da Twilio
Na Twilio, abra Phone Numbers > Manage > Active numbers e escolha um número compatível com SMS. Salve:
- Account SID, por exemplo,
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- Número de telefone do remetente, por exemplo,
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
Configure o canal de SMS
Salve o conteúdo a seguir como Aplique-o:
sms.patch.json5 e altere os espaços reservados:4
Direcione a Twilio ao Webhook do Gateway
Nas configurações do número de telefone da Twilio, abra Messaging e defina A message comes in como:Use HTTP
POST. O caminho local padrão é /webhooks/sms; altere channels.sms.webhookPath se precisar de outra rota.5
Exponha o caminho exato do Webhook de SMS
A URL pública deve encaminhar o caminho de SMS ao processo do Gateway (porta padrão Chamada de voz e SMS usam caminhos de Webhook distintos. Se o mesmo número da Twilio operar ambos, mantenha as duas rotas configuradas na Twilio e no túnel.
18789). Se usar o Tailscale Funnel para testes locais, exponha /webhooks/sms explicitamente:6
Inicie o Gateway e aprove o primeiro remetente
Exemplos de configuração
Todas as chaves ficam emchannels.sms (e, para cada conta, em channels.sms.accounts.<id>):
Arquivo de configuração
Use a configuração por arquivo quando quiser que a definição do canal acompanhe a configuração do Gateway:Variáveis de ambiente
As variáveis de ambiente se aplicam somente à conta padrão; os valores da configuração têm precedência sobre os valores do ambiente.Auth Token com SecretRef
authToken pode ser uma SecretRef (source: "env" | "file" | "exec"). Use essa opção quando o Gateway precisar resolver o Auth Token da Twilio pelo runtime de segredos do OpenClaw, em vez de armazenar a configuração em texto simples:
Remetente do Messaging Service
UsemessagingServiceSid em vez de fromNumber quando a Twilio precisar escolher o remetente por meio de um Messaging Service:
fromNumber e messagingServiceSid estiverem presentes após a resolução da configuração e do ambiente, fromNumber será usado.
Alvo de saída padrão
DefinadefaultTo quando a automação ou a entrega iniciada pelo agente precisar ter um destino padrão caso um fluxo de envio omita um alvo explícito:
Controle de acesso
channels.sms.dmPolicy controla o acesso direto por SMS:
pairing(padrão): remetentes desconhecidos recebem um código de pareamento; aprove comopenclaw pairing approve sms <CODE>.allowlist: somente remetentes emallowFromsão processados. UmallowFromvazio rejeita todos os remetentes (o Gateway registra um aviso na inicialização).open: a validação da configuração exige queallowFrominclua"*". Sem o curinga, somente os números listados podem conversar.disabled: todas as MDs de entrada são descartadas.
allowFrom devem ser números de telefone no formato E.164, como +15551234567. Os prefixos sms: e twilio-sms: são aceitos e normalizados. Para um assistente privado, prefira dmPolicy: "allowlist" com números de telefone explícitos:
Envio de SMS
Com o canal de SMS selecionado, os alvos aceitam números E.164 simples ou o prefixosms::
twilio-sms: seleciona este canal sem substituir o prefixo de serviço sms:, que o iMessage usa para escolher a entrega de SMS pela operadora para seus próprios alvos:
--target explícito. defaultTo destina-se a caminhos de automação e entrega iniciada pelo agente nos quais o alvo pode ser resolvido pela configuração do canal.
As respostas do agente em conversas de SMS recebidas retornam automaticamente ao remetente por meio do remetente da Twilio configurado.
A saída de SMS é texto simples. O OpenClaw remove o Markdown, achata blocos de código delimitados, reescreve links como label (url) e divide respostas longas em partes de, no máximo, textChunkLimit caracteres (padrão: 1500) antes de enviá-las pela Twilio.
Verificar a configuração
Após o Gateway iniciar:- Confirme se o log do Gateway mostra a rota do Webhook de SMS.
- Execute uma verificação no lado da Twilio (verifica a URL/o método do Webhook da Twilio configurado e erros recentes de entrada):
- Envie um SMS do seu telefone para o número da Twilio.
- Execute
openclaw pairing list sms. - Aprove o código de pareamento com
openclaw pairing approve sms <CODE>. - Envie outro SMS e confirme se o agente responde.
Teste de ponta a ponta pelo iMessage/SMS do macOS
Em um Mac que possa enviar SMS da operadora pelo Mensagens, é possível usarimsg para controlar o lado do remetente sem tocar no telefone:
Segurança do Webhook
Por padrão, o OpenClaw validaX-Twilio-Signature usando publicWebhookUrl e authToken. Mantenha a parte do endpoint de publicWebhookUrl idêntica, byte por byte, à URL configurada na Twilio, incluindo esquema, host, caminho e string de consulta. O OpenClaw exclui da computação da assinatura os fragmentos de substituição de conexão da Twilio (#...), conforme exigido pela Twilio.
A rota do Webhook também impõe, independentemente da validação da assinatura:
- Somente
POST. - Orçamento de solicitações com falha de 300 solicitações por minuto, por conta de SMS, rota do Webhook e endereço de cliente resolvido. Todas as solicitações são contabilizadas nesse orçamento, mas o HTTP 429 só é aplicado depois que uma solicitação falha na análise do corpo, na validação da Twilio ou na correspondência de AccountSid.
- Limite de taxa de callbacks despacháveis de 30 callbacks aceitos por minuto, por conta de SMS, rota do Webhook e endereço de cliente resolvido, após essas verificações serem aprovadas (HTTP 429 acima desse limite). Se a validação da assinatura estiver desativada, esse limite de 30/min será o teto de despacho não autenticado.
- Os endereços dos clientes são resolvidos pelas regras compartilhadas de proxies confiáveis do Gateway. Se
gateway.trustedProxiescontiver o proxy reverso que encaminha os callbacks da Twilio, o OpenClaw associa esses limites ao endereço de cliente encaminhado; caso contrário, recorre ao endereço direto do soquete. - O
AccountSidda carga útil deve corresponder aoaccountSidconfigurado (caso contrário, HTTP 403). - Valores de
MessageSidrepetidos são desduplicados por 10 minutos. - O cache de repetição de cada conta de SMS retém até 10.000 SIDs de mensagens ativas. Quando todos os espaços estão ativos, novos Webhooks dessa conta são rejeitados de forma segura com HTTP 429 e um cabeçalho
Retry-Afteraté que o espaço mais antigo expire. - Corpos de solicitações com mais de 32 KB são rejeitados.
Retry-After. As substituições de conexão #rp=4xx e #rp=all habilitam repetições para erros 4xx, mas a Twilio limita a transação completa de repetição a 15 segundos; portanto, as repetições ainda podem terminar antes que um espaço do cache de repetição expire. Configure uma URL alternativa quando outro manipulador precisar receber entregas com falha; trate um 429 como uma rejeição segura em caso de falha, não como contrapressão confiável.
Somente para testes com túnel local, é possível definir:
Configuração de várias contas
Useaccounts ao operar mais de um número da Twilio:
webhookPath distinto; o Gateway se recusa a registrar uma rota de Webhook cujo caminho já pertença a outra conta. Os fallbacks de ambiente TWILIO_*/SMS_* aplicam-se somente à conta padrão; defina defaultAccount para alterar qual conta é a padrão.
Solução de problemas
A Twilio retorna 403 ou o OpenClaw rejeita o Webhook
Verifique sepublicWebhookUrl corresponde exatamente à URL configurada na Twilio, incluindo esquema, host, caminho e string de consulta. A Twilio assina a string da URL pública; portanto, reescritas feitas pelo proxy e nomes de host alternativos podem interromper a validação da assinatura.
Um erro 403 com Invalid account significa que o AccountSid da carga útil recebida não corresponde ao accountSid configurado; verifique se o Webhook aponta para a conta proprietária do número.
Nenhuma solicitação de pareamento aparece
Verifique a URL e o método do Webhook de Messaging do número da Twilio. Ele deve apontar para a URL do Webhook de SMS e usarPOST. Confirme também se o Gateway está acessível pela internet pública ou pelo seu túnel.
Se o log de mensagens da Twilio mostrar o erro 11200, a Twilio aceitou o SMS recebido, mas não conseguiu acessar seu Webhook. Verifique:
- Na Twilio, Messaging > A message comes in aponta para
publicWebhookUrl. - O método é
POST. - O túnel ou proxy reverso expõe o
webhookPathexato; para o Tailscale Funnel, executetailscale funnel statuse confirme se/webhooks/smsestá listado. publicWebhookUrlusa o mesmo esquema, host, caminho e string de consulta enviados pela Twilio, para que a validação da assinatura possa reproduzir a URL assinada.
openclaw channels status --channel sms --probe apresenta tanto configurações incompatíveis do Webhook da Twilio quanto erros recentes de 11200.
Falha nos envios de saída
Confirme seaccountSid, authToken e fromNumber ou messagingServiceSid estão resolvidos. Se você usar uma conta de avaliação da Twilio, talvez seja necessário verificar o número de destino na Twilio antes que o SMS de saída possa ser enviado.
As mensagens chegam, mas o agente não responde
VerifiquedmPolicy e allowFrom. Com a política padrão pairing, o remetente deve ser aprovado antes que as interações normais do agente sejam processadas.