/webhooks/sms), memvalidasi tanda tangan permintaan Twilio secara default, dan mengirim balasan kembali melalui Messages API Twilio.
Status: Plugin resmi, dipasang secara terpisah. Hanya teks: tanpa MMS/media, hanya pesan langsung.
Pemasangan
Kebijakan DM default untuk SMS adalah pemasangan.
Keamanan Gateway
Tinjau paparan Webhook dan kontrol akses pengirim.
Pemecahan masalah saluran
Diagnostik lintas saluran dan panduan perbaikan.
Sebelum memulai
Anda memerlukan:- Plugin SMS resmi yang dipasang dengan
openclaw plugins install @openclaw/sms. - Akun Twilio dengan nomor telepon yang mendukung SMS, atau Twilio Messaging Service.
- Account SID dan Auth Token Twilio.
- URL HTTPS publik yang dapat menjangkau Gateway OpenClaw Anda.
- Pilihan kebijakan pengirim:
pairing(default) untuk penggunaan pribadi,allowlistuntuk nomor telepon yang telah disetujui sebelumnya, atauopenhanya untuk akses SMS yang sengaja dibuka untuk publik.
Penyiapan Cepat
1
Pasang Plugin
2
Buat atau pilih pengirim Twilio
Di Twilio, buka Phone Numbers > Manage > Active numbers dan pilih nomor yang mendukung SMS. Simpan:
- Account SID, misalnya
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- Nomor telepon pengirim, misalnya
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
Konfigurasikan saluran SMS
Simpan ini sebagai Terapkan:
sms.patch.json5 dan ubah placeholder:4
Arahkan Twilio ke Webhook Gateway
Di pengaturan nomor telepon Twilio, buka Messaging dan atur A message comes in ke:Gunakan HTTP
POST. Jalur lokal default adalah /webhooks/sms; ubah channels.sms.webhookPath jika Anda memerlukan rute lain.5
Paparkan jalur Webhook SMS yang tepat
URL publik Anda harus merutekan jalur SMS ke proses Gateway (port default Panggilan Suara dan SMS menggunakan jalur Webhook yang berbeda. Jika nomor Twilio yang sama menangani keduanya, pertahankan konfigurasi kedua rute di Twilio dan terowongan Anda.
18789). Jika menggunakan Tailscale Funnel untuk pengujian lokal, paparkan /webhooks/sms secara eksplisit:6
Mulai Gateway dan setujui pengirim pertama
Contoh Konfigurasi
Semua kunci berada di bawahchannels.sms (dan untuk setiap akun di bawah channels.sms.accounts.<id>):
Berkas konfigurasi
Gunakan penyiapan berkas konfigurasi jika Anda ingin definisi saluran disertakan bersama konfigurasi Gateway:Variabel lingkungan
Variabel lingkungan hanya berlaku untuk akun default; nilai konfigurasi lebih diutamakan daripada nilai lingkungan.Auth Token SecretRef
authToken dapat berupa SecretRef (source: "env" | "file" | "exec"). Gunakan ini jika Gateway harus menguraikan Auth Token Twilio dari runtime rahasia OpenClaw alih-alih menyimpan konfigurasi dalam teks biasa:
Pengirim Messaging Service
GunakanmessagingServiceSid alih-alih fromNumber jika Twilio harus memilih pengirim melalui Messaging Service:
fromNumber dan messagingServiceSid keduanya tersedia setelah penguraian konfigurasi dan lingkungan, fromNumber digunakan.
Target keluar default
AturdefaultTo jika otomatisasi atau pengiriman yang dimulai agen harus memiliki tujuan default ketika alur pengiriman tidak menyertakan target eksplisit:
Kontrol akses
channels.sms.dmPolicy mengontrol akses SMS langsung:
pairing(default): pengirim yang tidak dikenal mendapatkan kode pemasangan; setujui denganopenclaw pairing approve sms <CODE>.allowlist: hanya pengirim dalamallowFromyang diproses.allowFromkosong menolak setiap pengirim (Gateway mencatat peringatan saat dimulai).open: validasi konfigurasi mengharuskanallowFrommenyertakan"*". Tanpa wildcard, hanya nomor yang tercantum yang dapat mengobrol.disabled: semua DM masuk dibuang.
allowFrom harus berupa nomor telepon E.164 seperti +15551234567. Awalan sms: dan twilio-sms: diterima dan dinormalisasi. Untuk asisten pribadi, pilih dmPolicy: "allowlist" dengan nomor telepon eksplisit:
Mengirim SMS
Dengan saluran SMS dipilih, target menerima nomor E.164 polos atau awalansms::
twilio-sms: memilih saluran ini tanpa mengambil alih awalan layanan sms:, yang digunakan iMessage untuk memilih pengiriman SMS operator bagi targetnya sendiri:
--target eksplisit. defaultTo ditujukan untuk jalur otomatisasi dan pengiriman yang dimulai agen, tempat target dapat diuraikan dari konfigurasi saluran.
Balasan agen dari percakapan SMS masuk secara otomatis dikirim kembali kepada pengirim melalui pengirim Twilio yang dikonfigurasi.
Keluaran SMS berupa teks biasa. OpenClaw menghapus markdown, meratakan blok kode berpagar, menulis ulang tautan sebagai label (url), dan membagi balasan panjang menjadi potongan yang masing-masing berisi paling banyak textChunkLimit karakter (nilai bawaan 1500) sebelum mengirimkannya melalui Twilio.
Verifikasi Penyiapan
Setelah Gateway dimulai:- Pastikan log Gateway menampilkan rute Webhook SMS.
- Jalankan pemeriksaan dari sisi Twilio (memeriksa URL/metode Webhook Twilio yang dikonfigurasi dan galat masuk terbaru):
- Kirim SMS ke nomor Twilio dari ponsel Anda.
- Jalankan
openclaw pairing list sms. - Setujui kode pemasangan dengan
openclaw pairing approve sms <CODE>. - Kirim SMS lainnya dan pastikan agen membalas.
Pengujian menyeluruh dari iMessage/SMS macOS
Pada Mac yang dapat mengirim SMS operator melalui Messages, Anda dapat menggunakanimsg untuk menjalankan sisi pengirim tanpa menyentuh ponsel:
Keamanan Webhook
Secara bawaan, OpenClaw memvalidasiX-Twilio-Signature menggunakan publicWebhookUrl dan authToken. Pastikan bagian titik akhir dari publicWebhookUrl sama persis byte demi byte dengan URL yang dikonfigurasi di Twilio, termasuk skema, host, jalur, dan string kueri. OpenClaw mengecualikan fragmen penggantian koneksi Twilio (#...) dari penghitungan tanda tangan, sebagaimana diwajibkan oleh Twilio.
Rute Webhook juga memberlakukan hal berikut, secara independen dari validasi tanda tangan:
POSTsaja.- Batas permintaan gagal sebanyak 300 permintaan per menit untuk setiap akun SMS, rute Webhook, dan alamat klien yang ditentukan. Semua permintaan dihitung dalam batas ini, tetapi HTTP 429 hanya diterapkan setelah permintaan gagal mengurai isi, memvalidasi Twilio, atau mencocokkan AccountSid.
- Batas laju panggilan balik yang dapat diteruskan sebanyak 30 panggilan balik yang diterima per menit untuk setiap akun SMS, rute Webhook, dan alamat klien yang ditentukan setelah pemeriksaan tersebut lolos (HTTP 429 jika melampaui batas tersebut). Jika validasi tanda tangan dinonaktifkan, batas 30/menit ini menjadi batas maksimum penerusan tanpa autentikasi.
- Alamat klien ditentukan melalui aturan proksi tepercaya bersama milik Gateway. Jika
gateway.trustedProxiesberisi proksi terbalik yang meneruskan panggilan balik Twilio, OpenClaw mendasarkan batas ini pada alamat klien yang diteruskan; jika tidak, OpenClaw menggunakan alamat soket langsung. AccountSiddalam muatan harus cocok denganaccountSidyang dikonfigurasi (jika tidak, HTTP 403).- Nilai
MessageSidyang diputar ulang dideduplikasi selama 10 menit. - Cache pemutaran ulang setiap akun SMS menyimpan hingga 10,000 SID pesan aktif. Ketika semua slot masih aktif, Webhook baru untuk akun tersebut ditolak secara tertutup dengan HTTP 429 dan header
Retry-Afterhingga slot terlama kedaluwarsa. - Isi permintaan yang melebihi 32 KB ditolak.
Retry-After. Penggantian koneksi #rp=4xx dan #rp=all mengaktifkan percobaan ulang untuk 4xx, tetapi Twilio membatasi keseluruhan transaksi percobaan ulang hingga 15 detik, sehingga percobaan ulang masih dapat berakhir sebelum slot cache pemutaran ulang kedaluwarsa. Konfigurasikan URL cadangan ketika penangan lain harus menerima pengiriman yang gagal; perlakukan 429 sebagai penolakan tertutup saat gagal, bukan tekanan balik yang andal.
Khusus untuk pengujian terowongan lokal, Anda dapat menetapkan:
Konfigurasi Multiakun
Gunakanaccounts jika Anda mengoperasikan lebih dari satu nomor Twilio:
webhookPath yang berbeda; Gateway menolak mendaftarkan rute Webhook yang jalurnya sudah dimiliki akun lain. Nilai cadangan lingkungan TWILIO_*/SMS_* hanya berlaku untuk akun bawaan; tetapkan defaultAccount untuk mengubah akun yang menjadi akun bawaan.
Pemecahan Masalah
Twilio mengembalikan 403 atau OpenClaw menolak Webhook
PastikanpublicWebhookUrl sama persis dengan URL yang dikonfigurasi di Twilio, termasuk skema, host, jalur, dan string kueri. Twilio menandatangani string URL publik, sehingga penulisan ulang oleh proksi dan nama host alternatif dapat menggagalkan validasi tanda tangan.
Respons 403 dengan Invalid account berarti AccountSid dalam muatan masuk tidak cocok dengan accountSid yang dikonfigurasi; pastikan Webhook mengarah ke akun yang memiliki nomor tersebut.
Permintaan pemasangan tidak muncul
Periksa URL dan metode Webhook Messaging milik nomor Twilio. URL tersebut harus mengarah ke URL Webhook SMS dan menggunakanPOST. Pastikan juga Gateway dapat dijangkau dari internet publik atau melalui terowongan Anda.
Jika log pesan Twilio menampilkan galat 11200, Twilio menerima SMS masuk tetapi tidak dapat menjangkau Webhook Anda. Periksa:
- Twilio Messaging > A message comes in mengarah ke
publicWebhookUrl. - Metodenya adalah
POST. - Terowongan atau proksi terbalik mengekspos
webhookPathyang tepat; untuk Tailscale Funnel, jalankantailscale funnel statusdan pastikan/webhooks/smstercantum. publicWebhookUrlmenggunakan skema, host, jalur, dan string kueri yang sama dengan yang dikirim Twilio, sehingga validasi tanda tangan dapat mereproduksi URL yang ditandatangani.
openclaw channels status --channel sms --probe menampilkan ketidakcocokan pengaturan Webhook Twilio dan galat 11200 terbaru.
Pengiriman keluar gagal
PastikanaccountSid, authToken, serta fromNumber atau messagingServiceSid telah ditentukan. Jika Anda menggunakan akun uji coba Twilio, nomor tujuan mungkin perlu diverifikasi di Twilio sebelum SMS keluar dapat dikirim.
Pesan tiba tetapi agen tidak menjawab
PeriksadmPolicy dan allowFrom. Dengan kebijakan pairing bawaan, pengirim harus disetujui sebelum giliran agen normal diproses.