/webhooks/sms), validiert standardmäßig Twilio-Anfragesignaturen und sendet Antworten über die Messages API von Twilio zurück.
Status: offizielles Plugin, separat installiert. Nur Text: keine MMS/Medien, nur Direktnachrichten.
Kopplung
Die standardmäßige DM-Richtlinie für SMS ist die Kopplung.
Gateway-Sicherheit
Prüfen Sie die Webhook-Exposition und die Zugriffskontrollen für Absender.
Fehlerbehebung für Kanäle
Kanalübergreifende Diagnose- und Reparaturleitfäden.
Voraussetzungen
Sie benötigen:- Das offizielle SMS-Plugin, installiert mit
openclaw plugins install @openclaw/sms. - Ein Twilio-Konto mit einer SMS-fähigen Telefonnummer oder einem Twilio Messaging Service.
- Die Twilio Account SID und das Auth Token.
- Eine öffentliche HTTPS-URL, über die Ihr OpenClaw Gateway erreichbar ist.
- Eine Auswahl für die Absenderrichtlinie:
pairing(Standard) für die private Nutzung,allowlistfür vorab genehmigte Telefonnummern oderopennur für einen absichtlich öffentlichen SMS-Zugriff.
Schnelleinrichtung
1
Plugin installieren
2
Twilio-Absender erstellen oder auswählen
Öffnen Sie in Twilio Phone Numbers > Manage > Active numbers und wählen Sie eine SMS-fähige Nummer aus. Speichern Sie:
- Account SID, zum Beispiel
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- Absendertelefonnummer, zum Beispiel
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
SMS-Kanal konfigurieren
Speichern Sie Folgendes als Wenden Sie die Konfiguration an:
sms.patch.json5 und ändern Sie die Platzhalter:4
Twilio auf den Gateway-Webhook verweisen
Öffnen Sie in den Einstellungen der Twilio-Telefonnummer Messaging und setzen Sie A message comes in auf:Verwenden Sie HTTP
POST. Der standardmäßige lokale Pfad ist /webhooks/sms; ändern Sie channels.sms.webhookPath, wenn Sie eine andere Route benötigen.5
Exakten SMS-Webhook-Pfad verfügbar machen
Ihre öffentliche URL muss den SMS-Pfad an den Gateway-Prozess weiterleiten (Standardport Sprachanrufe und SMS verwenden separate Webhook-Pfade. Wenn dieselbe Twilio-Nummer beide verarbeitet, lassen Sie beide Routen in Twilio und in Ihrem Tunnel konfiguriert.
18789). Wenn Sie Tailscale Funnel für lokale Tests verwenden, geben Sie /webhooks/sms ausdrücklich frei:6
Gateway starten und ersten Absender genehmigen
Konfigurationsbeispiele
Alle Schlüssel befinden sich unterchannels.sms (und je Konto unter channels.sms.accounts.<id>):
Konfigurationsdatei
Verwenden Sie die Einrichtung per Konfigurationsdatei, wenn die Kanaldefinition zusammen mit der Gateway-Konfiguration übertragen werden soll:Umgebungsvariablen
Umgebungsvariablen gelten nur für das Standardkonto; Konfigurationswerte haben Vorrang vor Umgebungswerten.SecretRef-Auth-Token
authToken kann eine SecretRef (source: "env" | "file" | "exec") sein. Verwenden Sie diese Option, wenn der Gateway das Twilio Auth Token über die Secrets-Laufzeit von OpenClaw auflösen soll, anstatt es als Klartextkonfiguration zu speichern:
Messaging-Service-Absender
Verwenden SiemessagingServiceSid anstelle von fromNumber, wenn Twilio den Absender über einen Messaging Service auswählen soll:
fromNumber als auch messagingServiceSid vorhanden sind, wird fromNumber verwendet.
Standardziel für ausgehende Nachrichten
Legen SiedefaultTo fest, wenn Automatisierungen oder vom Agenten initiierte Zustellungen ein Standardziel verwenden sollen, falls ein Sendeablauf kein ausdrückliches Ziel angibt:
Zugriffskontrolle
channels.sms.dmPolicy steuert den direkten SMS-Zugriff:
pairing(Standard): Unbekannte Absender erhalten einen Kopplungscode; genehmigen Sie ihn mitopenclaw pairing approve sms <CODE>.allowlist: Nur Absender inallowFromwerden verarbeitet. Ein leeresallowFromweist jeden Absender ab (der Gateway protokolliert beim Start eine Warnung).open: Die Konfigurationsvalidierung erfordert, dassallowFromden Wert"*"enthält. Ohne den Platzhalter können nur aufgeführte Nummern chatten.disabled: Alle eingehenden DMs werden verworfen.
allowFrom sollten Telefonnummern im E.164-Format sein, beispielsweise +15551234567. Die Präfixe sms: und twilio-sms: werden akzeptiert und normalisiert. Bevorzugen Sie für einen privaten Assistenten dmPolicy: "allowlist" mit ausdrücklich angegebenen Telefonnummern:
SMS senden
Wenn der SMS-Kanal ausgewählt ist, akzeptieren Ziele reine E.164-Nummern oder das Präfixsms::
twilio-sms: diesen Kanal aus, ohne das Dienstpräfix sms: zu übernehmen, das iMessage zur Auswahl der SMS-Zustellung über den Mobilfunkanbieter für seine eigenen Ziele verwendet:
--target. defaultTo ist für Automatisierungen und vom Agenten initiierte Zustellpfade vorgesehen, bei denen das Ziel aus der Kanalkonfiguration aufgelöst werden kann.
Antworten des Agenten auf eingehende SMS-Unterhaltungen werden automatisch über den konfigurierten Twilio-Absender an den Absender zurückgesendet.
Die SMS-Ausgabe besteht aus reinem Text. OpenClaw entfernt Markdown, vereinfacht mit Code-Fences umschlossene Codeblöcke, schreibt Links als label (url) um und teilt lange Antworten vor dem Versand über Twilio in Abschnitte mit höchstens textChunkLimit Zeichen (Standardwert: 1500) auf.
Einrichtung überprüfen
Nach dem Start des Gateway:- Vergewissern Sie sich, dass das Gateway-Protokoll die SMS-Webhook-Route anzeigt.
- Führen Sie eine Twilio-seitige Prüfung aus (überprüft die konfigurierte Twilio-Webhook-URL/-Methode und aktuelle Fehler bei eingehenden Nachrichten):
- Senden Sie von Ihrem Telefon eine SMS an die Twilio-Nummer.
- Führen Sie
openclaw pairing list smsaus. - Genehmigen Sie den Kopplungscode mit
openclaw pairing approve sms <CODE>. - Senden Sie eine weitere SMS und vergewissern Sie sich, dass der Agent antwortet.
Ende-zu-Ende-Test über macOS iMessage/SMS
Auf einem Mac, der über Nachrichten Mobilfunk-SMS senden kann, können Sieimsg verwenden, um die Absenderseite zu steuern, ohne Ihr Telefon zu verwenden:
Webhook-Sicherheit
Standardmäßig validiert OpenClawX-Twilio-Signature mithilfe von publicWebhookUrl und authToken. Der Endpunktteil von publicWebhookUrl muss Byte für Byte mit der in Twilio konfigurierten URL übereinstimmen, einschließlich Schema, Host, Pfad und Abfragezeichenfolge. OpenClaw schließt Twilio-Verbindungsüberschreibungs-Fragmente (#...) von der Signaturberechnung aus, wie von Twilio vorgeschrieben.
Die Webhook-Route erzwingt unabhängig von der Signaturvalidierung außerdem:
- Nur
POST. - Budget für fehlgeschlagene Anfragen von 300 Anfragen pro Minute und SMS-Konto, Webhook-Route sowie aufgelöster Clientadresse. Alle Anfragen werden auf dieses Budget angerechnet, HTTP 429 wird jedoch erst angewendet, nachdem das Parsen des Anfragetexts, die Twilio-Validierung oder der Abgleich der AccountSid einer Anfrage fehlgeschlagen ist.
- Ratenbegrenzung für weiterleitbare Rückrufe von 30 akzeptierten Rückrufen pro Minute und SMS-Konto, Webhook-Route sowie aufgelöster Clientadresse, nachdem diese Prüfungen erfolgreich waren (darüber HTTP 429). Wenn die Signaturvalidierung deaktiviert ist, stellt dieses Limit von 30 pro Minute die Obergrenze für nicht authentifizierte Weiterleitungen dar.
- Clientadressen werden anhand der gemeinsamen Regeln des Gateway für vertrauenswürdige Proxys aufgelöst. Wenn
gateway.trustedProxiesden Reverse-Proxy enthält, der Twilio-Rückrufe weiterleitet, verwendet OpenClaw für diese Begrenzungen die weitergeleitete Clientadresse; andernfalls wird auf die direkte Socketadresse zurückgegriffen. AccountSidin den Nutzdaten muss mit dem konfiguriertenaccountSidübereinstimmen (andernfalls HTTP 403).- Wiederholte
MessageSid-Werte werden 10 Minuten lang dedupliziert. - Der Wiederholungscache jedes SMS-Kontos bewahrt bis zu 10.000 aktive Nachrichten-SIDs auf. Wenn alle Plätze aktiv sind, werden neue Webhooks für dieses Konto mit HTTP 429 und einem
Retry-After-Header abgelehnt, bis der älteste Platz abläuft. - Anfragetexte über 32 KB werden abgelehnt.
Retry-After. Die Verbindungsüberschreibungen #rp=4xx und #rp=all aktivieren Wiederholungsversuche bei 4xx-Antworten, Twilio begrenzt die gesamte Wiederholungstransaktion jedoch auf 15 Sekunden. Daher können die Wiederholungsversuche abgeschlossen sein, bevor ein Platz im Wiederholungscache abläuft. Konfigurieren Sie eine Fallback-URL, wenn ein anderer Handler fehlgeschlagene Zustellungen empfangen muss; behandeln Sie eine 429-Antwort als sicher ablehnende Zurückweisung und nicht als zuverlässigen Rückstau.
Nur für lokale Tunneltests können Sie Folgendes festlegen:
Konfiguration mehrerer Konten
Verwenden Sieaccounts, wenn Sie mehr als eine Twilio-Nummer betreiben:
webhookPath verwenden; das Gateway verweigert die Registrierung einer Webhook-Route, deren Pfad bereits einem anderen Konto zugeordnet ist. Die Umgebungs-Fallbacks TWILIO_*/SMS_* gelten nur für das Standardkonto; legen Sie defaultAccount fest, um das Standardkonto zu ändern.
Fehlerbehebung
Twilio gibt 403 zurück oder OpenClaw lehnt den Webhook ab
Prüfen Sie, obpublicWebhookUrl exakt mit der in Twilio konfigurierten URL übereinstimmt, einschließlich Schema, Host, Pfad und Abfragezeichenfolge. Twilio signiert die öffentliche URL-Zeichenfolge, sodass Proxy-Umschreibungen und alternative Hostnamen die Signaturvalidierung beeinträchtigen können.
Eine 403-Antwort mit Invalid account bedeutet, dass AccountSid in den eingehenden Nutzdaten nicht mit dem konfigurierten accountSid übereinstimmt; prüfen Sie, ob der Webhook auf das Konto verweist, dem die Nummer gehört.
Es erscheint keine Kopplungsanfrage
Prüfen Sie die Messaging-Webhook-URL und -Methode der Twilio-Nummer. Sie muss auf die SMS-Webhook-URL verweisen undPOST verwenden. Vergewissern Sie sich außerdem, dass das Gateway über das öffentliche Internet oder Ihren Tunnel erreichbar ist.
Wenn das Twilio-Nachrichtenprotokoll den Fehler 11200 anzeigt, hat Twilio die eingehende SMS akzeptiert, konnte Ihren Webhook jedoch nicht erreichen. Prüfen Sie Folgendes:
- Twilio Messaging > A message comes in verweist auf
publicWebhookUrl. - Die Methode lautet
POST. - Der Tunnel oder Reverse-Proxy stellt exakt
webhookPathbereit; führen Sie für Tailscale Funneltailscale funnel statusaus und vergewissern Sie sich, dass/webhooks/smsaufgeführt ist. publicWebhookUrlverwendet dasselbe Schema, denselben Host, Pfad und dieselbe Abfragezeichenfolge, die Twilio sendet, damit die Signaturvalidierung die signierte URL reproduzieren kann.
openclaw channels status --channel sms --probe zeigt sowohl nicht übereinstimmende Twilio-Webhook-Einstellungen als auch aktuelle 11200-Fehler an.
Ausgehende Sendungen schlagen fehl
Vergewissern Sie sich, dassaccountSid, authToken und entweder fromNumber oder messagingServiceSid aufgelöst werden. Wenn Sie ein Twilio-Testkonto verwenden, muss die Zielnummer möglicherweise in Twilio verifiziert werden, bevor ausgehende SMS gesendet werden können.
Nachrichten treffen ein, aber der Agent antwortet nicht
Prüfen SiedmPolicy und allowFrom. Bei der standardmäßigen pairing-Richtlinie muss der Absender genehmigt sein, bevor normale Agenteninteraktionen verarbeitet werden.