LINE - قناة دردشة

LINE يتصل بـ OpenClaw عبر LINE Messaging API. يعمل المكون الإضافي كمستقبل webhook على Gateway ويستخدم channel access token + channel secret للمصادقة.

الحالة

مدعوم عبر المكون الإضافي. الرسائل المباشرة، محادثات المجموعات، الوسائط، المواقع، رسائل Flex، الرسائل القالبية، والردود السريعة مدعومة.

التفاعلات والمواضيع غير مدعومة.

مكون إضافي مطلوب

قم بتثبيت مكون LINE الإضافي:

openclaw plugins install @openclaw/line

التثبيت المحلي (عند التشغيل من مستودع git):

openclaw plugins install ./extensions/line

الإعداد

  • إنشاء حساب LINE Developers وافتح Console:
    https://developers.line.biz/console/
  • إنشاء (أو اختر) Provider وأضف قناة Messaging API.
  • انسخ Channel access token و Channel secret من إعدادات القناة.
  • فعّل "Use webhook" في إعدادات Messaging API.
  • اضبط URL webhook على نقطة نهاية Gateway الخاصة بك (HTTPS مطلوب):
    https://gateway-host/line/webhook

Gateway يستجيب لتحقق webhook من LINE (GET) والأحداث الواردة (POST).

إذا كنت بحاجة إلى مسار مخصص، اضبط channels.line.webhookPath أو channels.line.accounts.<id>.webhookPath وقم بتحديث URL وفقاً لذلك.

التكوين

التكوين البسيط

{
  channels: {
    line: {
      enabled: true,
      channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",
      channelSecret: "LINE_CHANNEL_SECRET",
      dmPolicy: "pairing",
    },
  },
}

متغيرات البيئة (للحساب الافتراضي فقط)

LINE_CHANNEL_ACCESS_TOKEN
LINE_CHANNEL_SECRET

ملفات Token/Secret

{
  channels: {
    line: {
      tokenFile: "/path/to/line-token.txt",
      secretFile: "/path/to/line-secret.txt",
    },
  },
}

حسابات متعددة

{
  channels: {
    line: {
      accounts: {
        marketing: {
          channelAccessToken: "...",
          channelSecret: "...",
          webhookPath: "/line/marketing",
        },
      },
    },
  },
}

التحكم في الوصول

الرسائل المباشرة تُعيّن افتراضياً على الاقتران. المرسلون غير المعروفون يحصلون على رمز اقتران ويتم تجاهل رسائلهم حتى الموافقة.

openclaw pairing list line
openclaw pairing approve line <CODE>

القوائم البيضاء والسياسات

  • channels.line.dmPolicy: pairing | allowlist | open | disabled
  • channels.line.allowFrom: معرفات مستخدمي LINE المسموح بهم للرسائل المباشرة
  • channels.line.groupPolicy: allowlist | open | disabled
  • channels.line.groupAllowFrom: معرفات مستخدمي LINE المسموح بهم للمجموعات
  • لكل مجموعة: channels.line.groups.<groupId>.allowFrom

معرفات LINE حساسة لحالة الأحرف. المعرفات الصالحة تبدو كالتالي:

  • مستخدم: U + 32 حرف سداسي عشري
  • مجموعة: C + 32 حرف سداسي عشري
  • غرفة: R + 32 حرف سداسي عشري

سلوك الرسائل

  • يتم تقسيم النص عند 5000 حرف.
  • يتم إزالة تنسيق Markdown؛ يتم تحويل كتل الكود والجداول إلى بطاقات Flex عند الإمكان.
  • يتم تخزين الاستجابات المباشرة مؤقتاً؛ LINE يستقبل أجزاء كاملة مع رسوم متحركة للتحميل أثناء عمل الوكيل.
  • تنزيلات الوسائط محددة بـ channels.line.mediaMaxMb (افتراضي 10).

بيانات القناة (الرسائل الغنية)

استخدم channelData.line لإرسال ردود سريعة، مواقع، بطاقات Flex، أو رسائل قالبية.

{
  text: "تفضل",
  channelData: {
    line: {
      quickReplies: ["الحالة", "المساعدة"],
      location: {
        title: "المكتب",
        address: "123 Main St",
        latitude: 35.681236,
        longitude: 139.767125,
      },
      flexMessage: {
        altText: "بطاقة الحالة",
        contents: { /* Flex payload */ },
      },
      templateMessage: {
        type: "confirm",
        text: "المتابعة؟",
        confirmLabel: "نعم",
        confirmData: "yes",
        cancelLabel: "لا",
        cancelData: "no",
      },
    },
  },
}

يأتي مكون LINE الإضافي أيضاً بأمر /card لإعدادات رسائل Flex المسبقة:

/card info "مرحباً" "شكراً على الانضمام!"

استكشاف الأخطاء وإصلاحها

فشل التحقق من Webhook

تأكد من أن URL webhook هو HTTPS وأن channelSecret يطابق وحدة تحكم LINE.

لا توجد أحداث واردة

تأكد من أن مسار webhook يطابق channels.line.webhookPath وأن Gateway يمكن الوصول إليه من LINE.

أخطاء تنزيل الوسائط

ارفع channels.line.mediaMaxMb إذا تجاوزت الوسائط الحد الافتراضي.