/webhooks/sms), convalida per impostazione predefinita le firme delle richieste Twilio e invia le risposte tramite l’API Messages di Twilio.
Stato: Plugin ufficiale, installato separatamente. Solo testo: nessun MMS/contenuto multimediale, solo messaggi diretti.
Associazione
Il criterio predefinito per i messaggi diretti SMS è l’associazione.
Sicurezza del Gateway
Esaminare l’esposizione del Webhook e i controlli di accesso dei mittenti.
Risoluzione dei problemi del canale
Diagnostica multicanale e procedure di ripristino.
Prima di iniziare
Sono necessari:- Il Plugin SMS ufficiale installato con
openclaw plugins install @openclaw/sms. - Un account Twilio con un numero di telefono abilitato agli SMS oppure un Twilio Messaging Service.
- L’Account SID e l’Auth Token di Twilio.
- Un URL HTTPS pubblico che raggiunga il Gateway OpenClaw.
- La scelta di un criterio per i mittenti:
pairing(valore predefinito) per uso privato,allowlistper numeri di telefono preapprovati oppureopensolo per un accesso SMS intenzionalmente pubblico.
Configurazione rapida
1
Installare il Plugin
2
Creare o scegliere un mittente Twilio
In Twilio, aprire Phone Numbers > Manage > Active numbers e scegliere un numero abilitato agli SMS. Salvare:
- Account SID, ad esempio
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- Numero di telefono del mittente, ad esempio
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
Configurare il canale SMS
Salvare quanto segue come Applicare la configurazione:
sms.patch.json5 e modificare i segnaposto:4
Indirizzare Twilio al Webhook del Gateway
Nelle impostazioni del numero di telefono Twilio, aprire Messaging e impostare A message comes in su:Utilizzare HTTP
POST. Il percorso locale predefinito è /webhooks/sms; modificare channels.sms.webhookPath se è necessaria una route diversa.5
Esporre il percorso esatto del Webhook SMS
L’URL pubblico deve instradare il percorso SMS al processo del Gateway (porta predefinita Le chiamate vocali e gli SMS utilizzano percorsi Webhook distinti. Se lo stesso numero Twilio gestisce entrambi, mantenere entrambe le route configurate in Twilio e nel tunnel.
18789). Se si utilizza Tailscale Funnel per i test locali, esporre esplicitamente /webhooks/sms:6
Avviare il Gateway e approvare il primo mittente
Esempi di configurazione
Tutte le chiavi si trovano sottochannels.sms (e, per ciascun account, sotto channels.sms.accounts.<id>):
File di configurazione
Utilizzare la configurazione tramite file quando si desidera che la definizione del canale sia inclusa nella configurazione del Gateway:Variabili di ambiente
Le variabili di ambiente si applicano solo all’account predefinito; i valori di configurazione hanno la precedenza sui valori delle variabili di ambiente.Auth Token tramite SecretRef
authToken può essere un SecretRef (source: "env" | "file" | "exec"). Utilizzare questa opzione quando il Gateway deve risolvere l’Auth Token di Twilio tramite il runtime dei segreti di OpenClaw anziché archiviarlo nella configurazione in testo normale:
Mittente tramite Messaging Service
UtilizzaremessagingServiceSid anziché fromNumber quando Twilio deve scegliere il mittente tramite un Messaging Service:
fromNumber sia messagingServiceSid dopo la risoluzione della configurazione e delle variabili di ambiente, viene utilizzato fromNumber.
Destinazione predefinita in uscita
ImpostaredefaultTo quando l’automazione o la consegna avviata dall’agente deve avere una destinazione predefinita se un flusso di invio omette una destinazione esplicita:
Controllo degli accessi
channels.sms.dmPolicy controlla l’accesso diretto tramite SMS:
pairing(valore predefinito): i mittenti sconosciuti ricevono un codice di associazione; approvare conopenclaw pairing approve sms <CODE>.allowlist: vengono elaborati solo i mittenti presenti inallowFrom. Un valoreallowFromvuoto rifiuta ogni mittente (il Gateway registra un avviso all’avvio).open: la convalida della configurazione richiede cheallowFromincluda"*". Senza il carattere jolly, possono comunicare solo i numeri elencati.disabled: tutti i messaggi diretti in ingresso vengono ignorati.
allowFrom devono essere numeri di telefono in formato E.164, come +15551234567. I prefissi sms: e twilio-sms: sono accettati e normalizzati. Per un assistente privato, preferire dmPolicy: "allowlist" con numeri di telefono espliciti:
Invio di SMS
Con il canale SMS selezionato, le destinazioni accettano numeri E.164 senza prefisso oppure il prefissosms::
twilio-sms: seleziona questo canale senza sostituire il prefisso di servizio sms:, utilizzato da iMessage per scegliere la consegna tramite SMS dell’operatore per le proprie destinazioni:
--target esplicito. defaultTo è destinato all’automazione e ai percorsi di consegna avviati dall’agente nei quali la destinazione può essere risolta dalla configurazione del canale.
Le risposte dell’agente alle conversazioni SMS in entrata vengono inviate automaticamente al mittente tramite il mittente Twilio configurato.
L’output SMS è in testo normale. OpenClaw rimuove il Markdown, appiattisce i blocchi di codice delimitati, riscrive i link come label (url) e suddivide le risposte lunghe in parti di al massimo textChunkLimit caratteri (valore predefinito: 1500) prima di inviarle tramite Twilio.
Verificare la configurazione
Dopo l’avvio del Gateway:- Verificare che il log del Gateway mostri la route Webhook per gli SMS.
- Eseguire una verifica dal lato Twilio (controlla l’URL e il metodo del Webhook Twilio configurato e gli errori recenti relativi ai messaggi in entrata):
- Inviare un SMS al numero Twilio dal proprio telefono.
- Eseguire
openclaw pairing list sms. - Approvare il codice di associazione con
openclaw pairing approve sms <CODE>. - Inviare un altro SMS e verificare che l’agente risponda.
Test end-to-end da iMessage/SMS su macOS
Su un Mac in grado di inviare SMS tramite operatore con Messaggi, è possibile utilizzareimsg per controllare il lato mittente senza usare il telefono:
Sicurezza del Webhook
Per impostazione predefinita, OpenClaw convalidaX-Twilio-Signature utilizzando publicWebhookUrl e authToken. Mantenere la parte relativa all’endpoint di publicWebhookUrl identica byte per byte all’URL configurato in Twilio, inclusi schema, host, percorso e stringa di query. OpenClaw esclude i frammenti connection-override di Twilio (#...) dal calcolo della firma, come richiesto da Twilio.
La route del Webhook applica inoltre, indipendentemente dalla convalida della firma:
- Solo
POST. - Un limite di 300 richieste non riuscite al minuto per account SMS, route del Webhook e indirizzo client risolto. Tutte le richieste concorrono a questo limite, ma HTTP 429 viene applicato solo dopo che una richiesta non supera l’analisi del corpo, la convalida Twilio o la verifica della corrispondenza di AccountSid.
- Un limite di 30 callback accettati e distribuibili al minuto per account SMS, route del Webhook e indirizzo client risolto, dopo il superamento di tali controlli (HTTP 429 oltre questa soglia). Se la convalida della firma è disabilitata, questo limite di 30/min rappresenta il tetto massimo per la distribuzione non autenticata.
- Gli indirizzi client vengono risolti tramite le regole condivise del Gateway per i proxy attendibili. Se
gateway.trustedProxiescontiene il reverse proxy che inoltra i callback di Twilio, OpenClaw calcola questi limiti in base all’indirizzo client inoltrato; in caso contrario, utilizza l’indirizzo diretto del socket. - Il valore
AccountSiddel payload deve corrispondere al valoreaccountSidconfigurato (in caso contrario, HTTP 403). - I valori
MessageSidriprodotti vengono deduplicati per 10 minuti. - La cache di riproduzione di ciascun account SMS conserva fino a 10.000 SID di messaggi attivi. Quando tutti gli slot sono attivi, i nuovi Webhook per tale account vengono rifiutati in modalità fail-closed con HTTP 429 e un’intestazione
Retry-Afterfinché non scade lo slot meno recente. - I corpi delle richieste superiori a 32 KB vengono rifiutati.
Retry-After. Gli override di connessione #rp=4xx e #rp=all abilitano i nuovi tentativi per gli errori 4xx, ma Twilio limita l’intera transazione di ripetizione a 15 secondi, quindi i tentativi possono comunque terminare prima della scadenza di uno slot della cache di riproduzione. Configurare un URL di fallback quando un altro gestore deve ricevere le consegne non riuscite; considerare un errore 429 come un rifiuto fail-closed, non come un meccanismo affidabile di backpressure.
Solo per i test con tunnel locale, è possibile impostare:
Configurazione multi-account
Utilizzareaccounts quando si gestisce più di un numero Twilio:
webhookPath distinto; il Gateway rifiuta di registrare una route del Webhook il cui percorso appartiene già a un altro account. I fallback delle variabili di ambiente TWILIO_*/SMS_* si applicano solo all’account predefinito; impostare defaultAccount per scegliere un account diverso come predefinito.
Risoluzione dei problemi
Twilio restituisce 403 oppure OpenClaw rifiuta il Webhook
Verificare chepublicWebhookUrl corrisponda esattamente all’URL configurato in Twilio, inclusi schema, host, percorso e stringa di query. Twilio firma la stringa dell’URL pubblico, pertanto le riscritture del proxy e i nomi host alternativi possono impedire la convalida della firma.
Un errore 403 con Invalid account indica che il valore AccountSid del payload in entrata non corrisponde al valore accountSid configurato; verificare che il Webhook punti all’account proprietario del numero.
Non viene visualizzata alcuna richiesta di associazione
Controllare l’URL e il metodo del Webhook Messaging del numero Twilio. Deve puntare all’URL del Webhook SMS e utilizzarePOST. Verificare inoltre che il Gateway sia raggiungibile da Internet pubblico o tramite il tunnel.
Se il registro dei messaggi di Twilio mostra l’errore 11200, Twilio ha accettato l’SMS in entrata ma non è riuscito a raggiungere il Webhook. Verificare quanto segue:
- In Twilio, Messaging > A message comes in punta a
publicWebhookUrl. - Il metodo è
POST. - Il tunnel o il reverse proxy espone esattamente
webhookPath; per Tailscale Funnel, eseguiretailscale funnel statuse verificare che/webhooks/smssia elencato. publicWebhookUrlutilizza gli stessi schema, host, percorso e stringa di query inviati da Twilio, affinché la convalida della firma possa riprodurre l’URL firmato.
openclaw channels status --channel sms --probe mostra sia le impostazioni del Webhook Twilio non corrispondenti sia gli errori 11200 recenti.
Gli invii in uscita non riescono
Verificare cheaccountSid, authToken e fromNumber oppure messagingServiceSid siano risolti. Se si utilizza un account di prova Twilio, potrebbe essere necessario verificare il numero di destinazione in Twilio prima di poter inviare SMS in uscita.
I messaggi arrivano, ma l’agente non risponde
ControllaredmPolicy e allowFrom. Con la policy pairing predefinita, il mittente deve essere approvato prima che vengano elaborati i normali turni dell’agente.