/webhooks/sms)، ويتحقق افتراضيًا من توقيعات طلبات Twilio، ويرسل الردود عبر Messages API الخاصة بـ Twilio.
الحالة: Plugin رسمي، يُثبَّت بشكل منفصل. نص فقط: لا يدعم MMS أو الوسائط، والرسائل المباشرة فقط.
الاقتران
سياسة الرسائل المباشرة الافتراضية لرسائل SMS هي الاقتران.
أمان Gateway
راجع إتاحة Webhook وعناصر التحكم في وصول المرسلين.
استكشاف أخطاء القنوات وإصلاحها
إجراءات تشخيص وإصلاح مشتركة بين القنوات.
قبل البدء
تحتاج إلى:- تثبيت Plugin الرسمي لرسائل SMS باستخدام
openclaw plugins install @openclaw/sms. - حساب Twilio يتضمن رقم هاتف يدعم SMS، أو Twilio Messaging Service.
- معرّف حساب Twilio (Account SID) ورمز المصادقة (Auth Token).
- عنوان URL عام يستخدم HTTPS ويصل إلى Gateway الخاص بـ OpenClaw.
- اختيار سياسة للمرسل:
pairing(الافتراضية) للاستخدام الخاص، أوallowlistلأرقام الهواتف المعتمدة مسبقًا، أوopenفقط لإتاحة SMS للعامة عن قصد.
الإعداد السريع
1
ثبّت Plugin
2
أنشئ مرسلًا في Twilio أو اختره
في Twilio، افتح Phone Numbers > Manage > Active numbers واختر رقمًا يدعم SMS. احفظ ما يلي:
- معرّف الحساب (Account SID)، مثل
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - رمز المصادقة (Auth Token)
- رقم هاتف المرسل، مثل
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.3
اضبط قناة SMS
احفظ هذا باسم طبّقه:
sms.patch.json5 وغيّر العناصر النائبة:4
وجّه Twilio إلى Webhook الخاص بـ Gateway
في إعدادات رقم الهاتف في Twilio، افتح Messaging واضبط A message comes in على:استخدم HTTP
POST. المسار المحلي الافتراضي هو /webhooks/sms؛ غيّر channels.sms.webhookPath إذا كنت تحتاج إلى مسار مختلف.5
أتِح مسار Webhook المحدد لرسائل SMS
يجب أن يوجّه عنوان URL العام مسار SMS إلى عملية Gateway (المنفذ الافتراضي تستخدم المكالمات الصوتية ورسائل SMS مسارين منفصلين لـ Webhook. إذا كان رقم Twilio نفسه يتولى كليهما، فأبقِ المسارين مضبوطين في Twilio وفي النفق.
18789). إذا كنت تستخدم Tailscale Funnel للاختبار المحلي، فأتِح /webhooks/sms صراحةً:6
شغّل Gateway واعتمد المرسل الأول
أمثلة الضبط
توجد جميع المفاتيح ضمنchannels.sms (ولكل حساب ضمن channels.sms.accounts.<id>):
ملف الضبط
استخدم الإعداد عبر ملف الضبط عندما تريد أن ينتقل تعريف القناة مع ضبط Gateway:متغيرات البيئة
تنطبق متغيرات البيئة على الحساب الافتراضي فقط؛ وتكون لقيم الضبط الأولوية على قيم البيئة.رمز مصادقة SecretRef
يمكن أن تكونauthToken من النوع SecretRef (source: "env" | "file" | "exec"). استخدم هذا عندما ينبغي أن يحل Gateway رمز مصادقة Twilio من وقت تشغيل أسرار OpenClaw بدلًا من تخزين ضبط بنص صريح:
مرسل Messaging Service
استخدمmessagingServiceSid بدلًا من fromNumber عندما ينبغي أن يختار Twilio المرسل عبر Messaging Service:
fromNumber وmessagingServiceSid بعد تحديد قيم الضبط والبيئة، فسيُستخدم fromNumber.
الهدف الافتراضي للإرسال الصادر
عيّنdefaultTo عندما ينبغي أن تتوفر للأتمتة أو للتسليم الذي يبدأه الوكيل وجهة افتراضية إذا لم يحدد مسار الإرسال هدفًا صريحًا:
التحكم في الوصول
يتحكمchannels.sms.dmPolicy في الوصول المباشر عبر SMS:
pairing(الافتراضية): يحصل المرسلون غير المعروفين على رمز اقتران؛ اعتمدهم باستخدامopenclaw pairing approve sms <CODE>.allowlist: لا تُعالج إلا رسائل المرسلين المدرجين فيallowFrom. ترفض قائمةallowFromالفارغة كل مرسل (يسجّل Gateway تحذيرًا عند بدء التشغيل).open: يتطلب التحقق من صحة الضبط أن تتضمنallowFromالقيمة"*". بدون حرف البدل، لا يمكن إلا للأرقام المدرجة إجراء محادثة.disabled: تُسقط جميع الرسائل المباشرة الواردة.
allowFrom أرقام هواتف بتنسيق E.164، مثل +15551234567. تُقبل بادئتا sms: وtwilio-sms: وتُطبّعان. بالنسبة إلى مساعد خاص، يُفضّل استخدام dmPolicy: "allowlist" مع أرقام هواتف صريحة:
إرسال رسائل SMS
عند تحديد قناة SMS، تقبل الأهداف أرقام E.164 مجردة أو البادئةsms::
twilio-sms: هذه القناة دون الاستحواذ على بادئة الخدمة sms:، التي يستخدمها iMessage لاختيار تسليم SMS عبر شركة الاتصالات لأهدافه الخاصة:
--target صريحة. أما defaultTo فهي لمسارات الأتمتة والتسليم الذي يبدأه الوكيل، حيث يمكن تحديد الهدف من ضبط القناة.
تعود ردود الوكيل على محادثات SMS الواردة تلقائيًا إلى المُرسِل عبر مُرسِل Twilio المُهيأ.
يكون إخراج SMS نصًا عاديًا. يزيل OpenClaw تنسيق Markdown، ويسطّح كتل التعليمات البرمجية المسيّجة، ويعيد كتابة الروابط بصيغة label (url)، ويقسّم الردود الطويلة إلى أجزاء لا يزيد كل منها على textChunkLimit حرفًا (الافتراضي 1500) قبل إرسالها عبر Twilio.
التحقق من الإعداد
بعد بدء Gateway:- تأكد من أن سجل Gateway يعرض مسار Webhook الخاص بـ SMS.
- شغّل فحصًا من جانب Twilio (يتحقق من عنوان URL وطريقة Webhook المهيأين في Twilio ومن أخطاء الوارد الحديثة):
- أرسل رسالة SMS إلى رقم Twilio من هاتفك.
- شغّل
openclaw pairing list sms. - وافق على رمز الاقتران باستخدام
openclaw pairing approve sms <CODE>. - أرسل رسالة SMS أخرى وتأكد من أن الوكيل يرد.
اختبار شامل من macOS iMessage/SMS
على جهاز Mac يمكنه إرسال رسائل SMS عبر شركة الاتصالات باستخدام Messages، يمكنك استخدامimsg لتشغيل جانب المُرسِل دون لمس هاتفك:
أمان Webhook
يتحقق OpenClaw افتراضيًا منX-Twilio-Signature باستخدام publicWebhookUrl وauthToken. أبقِ جزء نقطة النهاية من publicWebhookUrl مطابقًا بايتًا ببايت لعنوان URL المهيأ في Twilio، بما في ذلك المخطط والمضيف والمسار وسلسلة الاستعلام. يستبعد OpenClaw أجزاء تجاوز الاتصال الخاصة بـ Twilio (#...) من حساب التوقيع، كما يتطلب Twilio.
يفرض مسار Webhook أيضًا، بصورة مستقلة عن التحقق من التوقيع، ما يلي:
POSTفقط.- ميزانية للطلبات الفاشلة قدرها 300 طلب في الدقيقة لكل حساب SMS ومسار Webhook وعنوان عميل محلول. تُحتسب جميع الطلبات ضمن هذه الميزانية، لكن لا يُطبّق HTTP 429 إلا بعد فشل طلب في تحليل النص الأساسي أو التحقق من Twilio أو مطابقة AccountSid.
- حد لمعدل الاستدعاءات القابلة للإرسال قدره 30 استدعاءً مقبولًا في الدقيقة لكل حساب SMS ومسار Webhook وعنوان عميل محلول بعد اجتياز تلك الفحوصات (يُرجع HTTP 429 عند تجاوز ذلك). إذا كان التحقق من التوقيع معطّلًا، فإن حد 30/دقيقة هذا هو سقف الإرسال غير المصادق عليه.
- تُحل عناوين العملاء من خلال قواعد الوكيل الموثوق المشتركة في Gateway. إذا كان
gateway.trustedProxiesيتضمن الوكيل العكسي الذي يعيد توجيه استدعاءات Twilio، يستخدم OpenClaw عنوان العميل المُمرَّر لتحديد مفاتيح هذه الحدود؛ وإلا فيعود إلى عنوان المقبس المباشر. - يجب أن يطابق
AccountSidفي الحمولة قيمةaccountSidالمهيأة (وإلا يُرجع HTTP 403). - تُزال ازدواجية قيم
MessageSidالمعاد تشغيلها لمدة 10 دقائق. - تحتفظ ذاكرة التخزين المؤقت لإعادة التشغيل في كل حساب SMS بما يصل إلى 10,000 من معرّفات SID الحية للرسائل. عندما تكون جميع الخانات حية، تفشل Webhooks الجديدة لذلك الحساب بصورة مغلقة مع HTTP 429 وترويسة
Retry-Afterحتى انتهاء صلاحية أقدم خانة. - تُرفض النصوص الأساسية للطلبات التي تتجاوز 32 KB.
Retry-After. تفعّل تجاوزات الاتصال #rp=4xx و#rp=all إعادة محاولة أخطاء 4xx، لكن Twilio يحد معاملة إعادة المحاولة الكاملة بـ 15 ثانية، لذلك قد تنتهي عمليات إعادة المحاولة قبل انتهاء صلاحية خانة في ذاكرة التخزين المؤقت لإعادة التشغيل. هيّئ عنوان URL احتياطيًا عندما يلزم أن يتلقى معالج آخر عمليات التسليم الفاشلة؛ وتعامل مع 429 بوصفه رفضًا مغلقًا عند الفشل، لا ضغطًا عكسيًا موثوقًا.
لاختبار النفق المحلي فقط، يمكنك تعيين:
تهيئة حسابات متعددة
استخدمaccounts عند تشغيل أكثر من رقم Twilio واحد:
webhookPath مميزًا؛ يرفض Gateway تسجيل مسار Webhook إذا كان مساره مملوكًا بالفعل لحساب آخر. لا تنطبق القيم الاحتياطية للبيئة TWILIO_*/SMS_* إلا على الحساب الافتراضي؛ عيّن defaultAccount لتغيير الحساب الافتراضي.
استكشاف الأخطاء وإصلاحها
يُرجع Twilio الخطأ 403 أو يرفض OpenClaw الـ Webhook
تحقق من أنpublicWebhookUrl يطابق تمامًا عنوان URL المهيأ في Twilio، بما في ذلك المخطط والمضيف والمسار وسلسلة الاستعلام. يوقّع Twilio سلسلة عنوان URL العام، لذلك يمكن أن تؤدي عمليات إعادة الكتابة في الوكيل وأسماء المضيفين البديلة إلى تعطيل التحقق من التوقيع.
يعني الخطأ 403 المصحوب بـ Invalid account أن AccountSid في الحمولة الواردة لا يطابق accountSid المهيأ؛ تحقق من أن Webhook يشير إلى الحساب الذي يملك الرقم.
لا يظهر طلب اقتران
تحقق من عنوان URL وطريقة Webhook ضمن Messaging لرقم Twilio. يجب أن يشير إلى عنوان URL الخاص بـ Webhook لـ SMS وأن يستخدمPOST. وتأكد أيضًا من إمكانية الوصول إلى Gateway من الإنترنت العام أو عبر نفقك.
إذا أظهر سجل رسائل Twilio الخطأ 11200، فهذا يعني أن Twilio قبل رسالة SMS الواردة لكنه لم يتمكن من الوصول إلى Webhook الخاص بك. تحقق مما يلي:
- يشير Twilio Messaging > A message comes in إلى
publicWebhookUrl. - الطريقة هي
POST. - يكشف النفق أو الوكيل العكسي
webhookPathالدقيق؛ بالنسبة إلى Tailscale Funnel، شغّلtailscale funnel statusوتأكد من إدراج/webhooks/sms. - يستخدم
publicWebhookUrlالمخطط والمضيف والمسار وسلسلة الاستعلام نفسها التي يرسلها Twilio، بحيث يمكن للتحقق من التوقيع إعادة إنتاج عنوان URL الموقّع.
openclaw channels status --channel sms --probe كلًا من إعدادات Webhook غير المتطابقة في Twilio وأخطاء 11200 الحديثة.
تفشل عمليات الإرسال الصادرة
تأكد من حلaccountSid وauthToken وأحد fromNumber أو messagingServiceSid. إذا كنت تستخدم حساب Twilio تجريبيًا، فقد يلزم التحقق من رقم الوجهة في Twilio قبل إرسال رسائل SMS الصادرة.
تصل الرسائل لكن الوكيل لا يجيب
تحقق منdmPolicy وallowFrom. مع سياسة pairing الافتراضية، يجب الموافقة على المُرسِل قبل معالجة تفاعلات الوكيل العادية.