Regional platforms

LINE

LINE подключается к OpenClaw через LINE Messaging API. Плагин работает как приёмник Webhook на Gateway и использует токен доступа канала и секрет канала для аутентификации.

Статус: официальный плагин, устанавливаемый отдельно. Поддерживаются личные сообщения, групповые чаты, медиафайлы, местоположения, сообщения 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/ перед передачей агенту в соответствии с общим хранилищем медиафайлов, используемым другими плагинами каналов.

Данные канала (форматированные сообщения)

Используйте channelData.line для отправки быстрых ответов, местоположений, карточек Flex или шаблонных сообщений.

json5
{  text: "Here you go",  channelData: {    line: {      quickReplies: ["Status", "Help"],      location: {        title: "Office",        address: "123 Main St",        latitude: 35.681236,        longitude: 139.767125,      },      flexMessage: {        altText: "Status card",        contents: {/* Flex payload */},      },      templateMessage: {        type: "confirm",        text: "Proceed?",        confirmLabel: "Yes",        confirmData: "yes",        cancelLabel: "No",        cancelData: "no",      },    },  },}

Плагин LINE также предоставляет команду /card для предустановок сообщений Flex:

text
/card info "Добро пожаловать" "Спасибо, что присоединились!"

Поддержка ACP

LINE поддерживает привязки разговоров ACP (Agent Communication Protocol):

  • /acp spawn <agent> --bind here привязывает текущий чат LINE к сеансу ACP без создания дочерней ветки.
  • Настроенные привязки ACP и активные сеансы ACP, привязанные к разговору, работают в LINE так же, как и в других разговорных каналах.

Дополнительные сведения см. в разделе Агенты ACP.

Исходящие медиафайлы

Плагин 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