/webhooks/sms), mặc định xác thực chữ ký yêu cầu Twilio và gửi phản hồi trở lại qua Messages API của Twilio.
Trạng thái: Plugin chính thức, được cài đặt riêng. Chỉ hỗ trợ văn bản: không hỗ trợ MMS/phương tiện, chỉ hỗ trợ tin nhắn trực tiếp.
Ghép nối
Chính sách DM mặc định cho SMS là ghép nối.
Bảo mật Gateway
Xem xét mức độ công khai của Webhook và các biện pháp kiểm soát quyền truy cập của người gửi.
Khắc phục sự cố kênh
Các quy trình chẩn đoán và khắc phục trên nhiều kênh.
Trước khi bắt đầu
Bạn cần:- Plugin SMS chính thức được cài đặt bằng
openclaw plugins install @openclaw/sms. - Tài khoản Twilio có số điện thoại hỗ trợ SMS hoặc Twilio Messaging Service.
- Account SID và Auth Token của Twilio.
- URL HTTPS công khai có thể truy cập OpenClaw Gateway của bạn.
- Lựa chọn chính sách người gửi:
pairing(mặc định) cho mục đích sử dụng riêng tư,allowlistcho các số điện thoại được phê duyệt trước hoặc chỉ dùngopenkhi chủ ý cho phép truy cập SMS công khai.
Thiết lập nhanh
1
Cài đặt Plugin
2
Tạo hoặc chọn người gửi Twilio
Trong Twilio, mở Phone Numbers > Manage > Active numbers và chọn một số hỗ trợ SMS. Lưu lại:
- Account SID, ví dụ
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- Số điện thoại người gửi, ví dụ
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
Cấu hình kênh SMS
Lưu nội dung này dưới dạng Áp dụng cấu hình:
sms.patch.json5 và thay đổi các phần giữ chỗ:4
Trỏ Twilio đến Webhook của Gateway
Trong phần cài đặt số điện thoại Twilio, mở Messaging và đặt A message comes in thành:Sử dụng HTTP
POST. Đường dẫn cục bộ mặc định là /webhooks/sms; thay đổi channels.sms.webhookPath nếu bạn cần một tuyến khác.5
Công khai chính xác đường dẫn Webhook SMS
URL công khai của bạn phải định tuyến đường dẫn SMS đến tiến trình Gateway (cổng mặc định Cuộc gọi thoại và SMS sử dụng các đường dẫn Webhook riêng biệt. Nếu cùng một số Twilio xử lý cả hai, hãy duy trì cấu hình cho cả hai tuyến trong Twilio và đường hầm của bạn.
18789). Nếu sử dụng Tailscale Funnel để kiểm thử cục bộ, hãy công khai rõ ràng /webhooks/sms:6
Khởi động Gateway và phê duyệt người gửi đầu tiên
Ví dụ cấu hình
Tất cả khóa nằm trongchannels.sms (và trong channels.sms.accounts.<id> đối với từng tài khoản):
Tệp cấu hình
Sử dụng thiết lập bằng tệp cấu hình khi bạn muốn định nghĩa kênh được phân phối cùng cấu hình Gateway:Biến môi trường
Các biến môi trường chỉ áp dụng cho tài khoản mặc định; giá trị cấu hình được ưu tiên hơn giá trị biến môi trường.Auth Token dạng SecretRef
authToken có thể là một SecretRef (source: "env" | "file" | "exec"). Sử dụng tùy chọn này khi Gateway cần phân giải Auth Token của Twilio từ môi trường bí mật OpenClaw thay vì lưu cấu hình dưới dạng văn bản thuần:
Người gửi Messaging Service
Sử dụngmessagingServiceSid thay cho fromNumber khi Twilio cần chọn người gửi thông qua Messaging Service:
fromNumber và messagingServiceSid đều hiện diện sau khi phân giải cấu hình và biến môi trường, fromNumber sẽ được sử dụng.
Đích gửi đi mặc định
ĐặtdefaultTo khi hoạt động tự động hóa hoặc gửi do tác nhân khởi tạo cần có một đích mặc định nếu luồng gửi không chỉ định đích rõ ràng:
Kiểm soát quyền truy cập
channels.sms.dmPolicy kiểm soát quyền truy cập SMS trực tiếp:
pairing(mặc định): người gửi không xác định nhận được mã ghép nối; phê duyệt bằngopenclaw pairing approve sms <CODE>.allowlist: chỉ xử lý người gửi có trongallowFrom.allowFromtrống sẽ từ chối mọi người gửi (Gateway ghi nhật ký cảnh báo khi khởi động).open: quá trình xác thực cấu hình yêu cầuallowFromphải chứa"*". Nếu không có ký tự đại diện, chỉ các số được liệt kê mới có thể trò chuyện.disabled: tất cả DM đến đều bị loại bỏ.
allowFrom phải là số điện thoại E.164, chẳng hạn như +15551234567. Các tiền tố sms: và twilio-sms: được chấp nhận và chuẩn hóa. Đối với trợ lý riêng tư, ưu tiên dmPolicy: "allowlist" với các số điện thoại được chỉ định rõ ràng:
Gửi SMS
Khi chọn kênh SMS, đích chấp nhận số E.164 thuần hoặc tiền tốsms::
twilio-sms: sẽ chọn kênh này mà không chiếm dụng tiền tố dịch vụ sms:, vốn được iMessage sử dụng để chọn hình thức gửi SMS qua nhà mạng cho các đích của riêng mình:
--target rõ ràng. defaultTo dành cho các đường dẫn tự động hóa và gửi do tác nhân khởi tạo, trong đó đích có thể được phân giải từ cấu hình kênh.
Phản hồi của tác tử từ các cuộc trò chuyện SMS đến sẽ tự động được gửi lại cho người gửi thông qua số gửi Twilio đã cấu hình.
Đầu ra SMS là văn bản thuần túy. OpenClaw loại bỏ markdown, chuyển các khối mã có hàng rào thành một dòng, viết lại liên kết thành label (url), đồng thời chia các phản hồi dài thành các phần tối đa textChunkLimit ký tự (mặc định là 1500) trước khi gửi qua Twilio.
Xác minh thiết lập
Sau khi Gateway khởi động:- Xác nhận nhật ký Gateway hiển thị tuyến Webhook SMS.
- Chạy phép kiểm tra phía Twilio (kiểm tra URL/phương thức Webhook Twilio đã cấu hình và các lỗi đầu vào gần đây):
- Gửi một SMS từ điện thoại của bạn đến số Twilio.
- Chạy
openclaw pairing list sms. - Phê duyệt mã ghép nối bằng
openclaw pairing approve sms <CODE>. - Gửi một SMS khác và xác nhận tác tử phản hồi.
Kiểm thử đầu cuối từ iMessage/SMS trên macOS
Trên máy Mac có thể gửi SMS của nhà mạng qua Messages, bạn có thể dùngimsg để điều khiển phía người gửi mà không cần thao tác trên điện thoại:
Bảo mật Webhook
Theo mặc định, OpenClaw xác thựcX-Twilio-Signature bằng publicWebhookUrl và authToken. Hãy giữ phần điểm cuối của publicWebhookUrl khớp từng byte với URL được cấu hình trong Twilio, bao gồm lược đồ, máy chủ, đường dẫn và chuỗi truy vấn. OpenClaw loại trừ các phân mảnh ghi đè kết nối của Twilio (#...) khỏi phép tính chữ ký, theo yêu cầu của Twilio.
Độc lập với việc xác thực chữ ký, tuyến Webhook cũng thực thi:
- Chỉ
POST. - Hạn mức yêu cầu thất bại là 300 yêu cầu mỗi phút cho mỗi tài khoản SMS, tuyến Webhook và địa chỉ máy khách đã phân giải. Mọi yêu cầu đều được tính vào hạn mức này, nhưng HTTP 429 chỉ được áp dụng sau khi yêu cầu không thể phân tích cú pháp nội dung, xác thực Twilio hoặc đối chiếu AccountSid.
- Giới hạn tốc độ lệnh gọi lại có thể phân phối là 30 lệnh gọi lại được chấp nhận mỗi phút cho mỗi tài khoản SMS, tuyến Webhook và địa chỉ máy khách đã phân giải sau khi vượt qua các bước kiểm tra đó (HTTP 429 nếu vượt quá). Nếu xác thực chữ ký bị tắt, giới hạn 30/phút này là mức trần phân phối không xác thực.
- Địa chỉ máy khách được phân giải thông qua các quy tắc proxy tin cậy dùng chung của Gateway. Nếu
gateway.trustedProxieschứa proxy ngược chuyển tiếp các lệnh gọi lại Twilio, OpenClaw xác định các giới hạn này theo địa chỉ máy khách được chuyển tiếp; nếu không, OpenClaw dùng địa chỉ socket trực tiếp. AccountSidtrong tải trọng phải khớp vớiaccountSidđã cấu hình (nếu không sẽ trả về HTTP 403).- Các giá trị
MessageSidđược phát lại sẽ được loại bỏ trùng lặp trong 10 phút. - Bộ nhớ đệm phát lại của mỗi tài khoản SMS lưu tối đa 10.000 SID tin nhắn còn hiệu lực. Khi mọi vị trí đều còn hiệu lực, các Webhook mới của tài khoản đó sẽ bị từ chối theo cơ chế đóng an toàn với HTTP 429 và tiêu đề
Retry-Aftercho đến khi vị trí cũ nhất hết hạn. - Nội dung yêu cầu lớn hơn 32 KB sẽ bị từ chối.
Retry-After. Các ghi đè kết nối #rp=4xx và #rp=all cho phép thử lại lỗi 4xx, nhưng Twilio giới hạn toàn bộ giao dịch thử lại ở 15 giây, vì vậy quá trình thử lại vẫn có thể kết thúc trước khi một vị trí trong bộ nhớ đệm phát lại hết hạn. Hãy cấu hình URL dự phòng khi một trình xử lý khác phải nhận các lần phân phối thất bại; coi 429 là một lần từ chối theo cơ chế đóng an toàn, không phải cơ chế tạo áp lực ngược đáng tin cậy.
Chỉ để kiểm thử đường hầm cục bộ, bạn có thể đặt:
Cấu hình nhiều tài khoản
Dùngaccounts khi bạn vận hành nhiều hơn một số Twilio:
webhookPath riêng biệt; Gateway từ chối đăng ký tuyến Webhook có đường dẫn đã thuộc về tài khoản khác. Các giá trị dự phòng từ môi trường TWILIO_*/SMS_* chỉ áp dụng cho tài khoản mặc định; đặt defaultAccount để thay đổi tài khoản mặc định.
Khắc phục sự cố
Twilio trả về 403 hoặc OpenClaw từ chối Webhook
Kiểm tra để đảm bảopublicWebhookUrl khớp chính xác với URL được cấu hình trong Twilio, bao gồm lược đồ, máy chủ, đường dẫn và chuỗi truy vấn. Twilio ký chuỗi URL công khai, vì vậy việc proxy viết lại URL và các tên máy chủ thay thế có thể làm hỏng quá trình xác thực chữ ký.
Lỗi 403 kèm Invalid account có nghĩa là AccountSid trong tải trọng đầu vào không khớp với accountSid đã cấu hình; hãy kiểm tra để đảm bảo Webhook trỏ đến tài khoản sở hữu số đó.
Không xuất hiện yêu cầu ghép nối
Kiểm tra URL và phương thức Webhook Messaging của số Twilio. URL phải trỏ đến URL Webhook SMS và dùngPOST. Đồng thời xác nhận Gateway có thể được truy cập từ Internet công cộng hoặc thông qua đường hầm của bạn.
Nếu nhật ký tin nhắn Twilio hiển thị lỗi 11200, Twilio đã chấp nhận SMS đến nhưng không thể kết nối với Webhook của bạn. Hãy kiểm tra:
- Mục Messaging > A message comes in của Twilio trỏ đến
publicWebhookUrl. - Phương thức là
POST. - Đường hầm hoặc proxy ngược công khai chính xác
webhookPath; đối với Tailscale Funnel, hãy chạytailscale funnel statusvà xác nhận/webhooks/smsđược liệt kê. publicWebhookUrlsử dụng cùng lược đồ, máy chủ, đường dẫn và chuỗi truy vấn mà Twilio gửi, để quá trình xác thực chữ ký có thể tái tạo URL đã ký.
openclaw channels status --channel sms --probe hiển thị cả các cài đặt Webhook Twilio không khớp và các lỗi 11200 gần đây.
Gửi đi thất bại
Xác nhậnaccountSid, authToken và một trong fromNumber hoặc messagingServiceSid đã được phân giải. Nếu bạn dùng tài khoản Twilio dùng thử, số đích có thể cần được xác minh trong Twilio trước khi có thể gửi SMS đi.
Tin nhắn đến nhưng tác tử không trả lời
Kiểm tradmPolicy và allowFrom. Với chính sách pairing mặc định, người gửi phải được phê duyệt trước khi các lượt tương tác thông thường của tác tử được xử lý.