Regional platforms

LINE

LINE підключається до OpenClaw через LINE Messaging API. Plugin працює як отримувач Webhook на Gateway і використовує ваш токен доступу до каналу та секрет каналу для автентифікації.

Статус: офіційний Plugin, встановлюється окремо. Підтримуються особисті повідомлення, групові чати, медіафайли, розташування, повідомлення Flex, шаблонні повідомлення та швидкі відповіді. Реакції та гілки не підтримуються.

Встановлення

Установіть LINE перед налаштуванням каналу:

bash
openclaw plugins install @openclaw/line

Локальна робоча копія (під час запуску з репозиторію git):

bash
openclaw plugins install ./path/to/local/line-plugin

Налаштування

  1. Створіть обліковий запис LINE Developers і відкрийте Console: https://developers.line.biz/console/
  2. Створіть (або виберіть) Provider і додайте канал Messaging API.
  3. Скопіюйте Channel access token і Channel secret з налаштувань каналу.
  4. Увімкніть Use webhook у налаштуваннях Messaging API.
  5. Укажіть як URL-адресу Webhook кінцеву точку вашого Gateway (потрібен HTTPS):
text
https://gateway-host/line/webhook

Gateway відповідає на перевірку Webhook від LINE (GET) і негайно підтверджує підписані вхідні події (POST) після перевірки підпису та корисного навантаження; обробка агентом триває асинхронно. Якщо потрібен власний шлях, задайте channels.line.webhookPath або channels.line.accounts.<id>.webhookPath і відповідно оновіть URL-адресу.

Примітки щодо безпеки:

  • Перевірка підпису LINE залежить від тіла запиту (HMAC над необробленим тілом), тому OpenClaw застосовує суворе обмеження розміру тіла до автентифікації (64 КБ) і тайм-аут читання перед перевіркою.
  • OpenClaw обробляє події Webhook із перевірених необроблених байтів запиту. Значення req.body, перетворені проміжним ПЗ вище за потоком, ігноруються задля збереження цілісності підпису.

Конфігурація

Мінімальна конфігурація:

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

Конфігурація загальнодоступних особистих повідомлень:

json5
{  channels: {    line: {      enabled: true,      channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",      channelSecret: "LINE_CHANNEL_SECRET",      dmPolicy: "open",      allowFrom: ["*"],    },  },}

Змінні середовища (лише для облікового запису за замовчуванням):

  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET

Файли токена й секрету:

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

tokenFile і secretFile мають указувати на звичайні файли. Символічні посилання відхиляються. Значення безпосередньо в конфігурації мають пріоритет над файлами; змінні середовища є останнім резервним варіантом для облікового запису за замовчуванням.

Кілька облікових записів:

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

Керування доступом

Для особистих повідомлень типовим режимом є спарювання. Невідомі відправники отримують код спарювання, а їхні повідомлення ігноруються до схвалення:

bash
openclaw pairing list lineopenclaw pairing approve line &lt;CODE&gt;

Списки дозволених і політики:

  • channels.line.dmPolicy: pairing | allowlist | open | disabled (типове значення — pairing)
  • channels.line.allowFrom: дозволені ідентифікатори користувачів LINE для особистих повідомлень; dmPolicy: "open" потребує ["*"]
  • channels.line.groupPolicy: allowlist | open | disabled (типове значення — allowlist)
  • channels.line.groupAllowFrom: дозволені ідентифікатори користувачів LINE для груп; записи особистих повідомлень allowFrom не надають доступу відправникам у групах
  • Перевизначення для окремих груп: channels.line.groups.<groupId>.allowFrom (а також enabled, requireMention, systemPrompt, skills). З groupPolicy: "allowlist" задайте groupAllowFrom або груповий параметр allowFrom; порожній список дозволених для групи блокує групові повідомлення, навіть якщо особисті повідомлення відкриті.
  • На статичні групи доступу відправників можна посилатися з allowFrom, groupAllowFrom і групового параметра allowFrom за допомогою accessGroup:<name>; див. Групи доступу.
  • Примітка щодо середовища виконання: якщо channels.line повністю відсутній, середовище виконання використовує groupPolicy="allowlist" як резервний варіант для перевірок груп (навіть якщо задано channels.defaults.groupPolicy).

Ідентифікатори LINE чутливі до регістру. Допустимі ідентифікатори мають такий вигляд:

  • Користувач: U + 32 шістнадцяткові символи
  • Група: C + 32 шістнадцяткові символи
  • Кімната: R + 32 шістнадцяткові символи

Поведінка повідомлень

  • Текст розбивається на частини по 5000 символів.
  • Форматування Markdown вилучається; блоки коду й таблиці за можливості перетворюються на картки Flex.
  • Потокові відповіді буферизуються; LINE отримує повні частини з анімацією завантаження, доки агент працює.
  • Розмір завантажуваних медіафайлів обмежено параметром channels.line.mediaMaxMb (типове значення — 10).
  • Вхідні медіафайли зберігаються в ~/.openclaw/media/inbound/, перш ніж передаватися агенту, відповідно до спільного сховища медіафайлів, яке використовують інші Plugin каналів.

Дані каналу (форматовані повідомлення)

Використовуйте channelData.line для надсилання швидких відповідей, розташувань, карток Flex або шаблонних повідомлень.

json5
{  text: "Ось, будь ласка",  channelData: {    line: {      quickReplies: ["Статус", "Довідка"],      location: {        title: "Офіс",        address: "123 Main St",        latitude: 35.681236,        longitude: 139.767125,      },      flexMessage: {        altText: "Картка статусу",        contents: {/* Корисне навантаження Flex */},      },      templateMessage: {        type: "confirm",        text: "Продовжити?",        confirmLabel: "Так",        confirmData: "yes",        cancelLabel: "Ні",        cancelData: "no",      },    },  },}

Plugin LINE також містить команду /card для попередньо налаштованих повідомлень Flex:

text
/card info "Вітаємо" "Дякуємо, що приєдналися!"

Підтримка ACP

LINE підтримує прив’язування розмов ACP (Agent Communication Protocol):

  • /acp spawn <agent> --bind here прив’язує поточний чат LINE до сеансу ACP без створення дочірньої гілки.
  • Налаштовані прив’язування ACP й активні сеанси ACP, прив’язані до розмови, працюють у LINE так само, як в інших каналах розмов.

Докладніше див. у розділі Агенти ACP.

Вихідні медіафайли

Plugin LINE надсилає зображення, відео й аудіо за допомогою інструмента повідомлень агента:

  • Зображення: надсилаються як повідомлення із зображеннями LINE; типовим зображенням попереднього перегляду є URL-адреса медіафайлу.
  • Відео: потребують зображення попереднього перегляду; задайте для channelData.line.previewImageUrl URL-адресу зображення.
  • Аудіо: надсилається як аудіоповідомлення LINE; типова тривалість становить 60 секунд, якщо не задано channelData.line.durationMs.

Тип медіафайлу береться з channelData.line.mediaKind, якщо його задано; інакше він визначається з інших параметрів LINE або суфікса файлу в URL-адресі, а резервним варіантом є зображення.

URL-адреси вихідних медіафайлів мають бути загальнодоступними URL-адресами HTTPS завдовжки не більш ніж 2000 символів. OpenClaw перевіряє ім’я цільового хоста перед передаванням URL-адреси до LINE і відхиляє цілі зі зворотним зв’язком, локальними адресами каналу та адресами приватної мережі.

Для звичайного надсилання медіафайлів без параметрів, специфічних для LINE, використовується маршрут зображень.

Усунення несправностей

  • Не вдається перевірити Webhook: переконайтеся, що URL-адреса Webhook використовує HTTPS, а channelSecret відповідає значенню в консолі LINE.
  • Немає вхідних подій: переконайтеся, що шлях Webhook відповідає channels.line.webhookPath і що Gateway доступний із LINE.
  • Помилки завантаження медіафайлів: збільште channels.line.mediaMaxMb, якщо розмір медіафайлів перевищує типове обмеження.

Пов’язані матеріали

Was this useful?
On this page

On this page