LINE (плагин)

LINE подключается к OpenClaw через LINE Messaging API. Плагин работает как приёмник вебхуков на шлюзе и использует ваш channel access token + channel secret для аутентификации.

Статус: поддерживается через плагин. Прямые сообщения, групповые чаты, медиа, геолокация, Flex- сообщения, шаблонные сообщения и быстрые ответы поддерживаются. Реакции и потоки (threads) не поддерживаются.

Требуется плагин

Установите плагин LINE:

openclaw plugins install @openclaw/line

Из локальной копии (при работе из git-репозитория):

openclaw plugins install ./extensions/line

Настройка

  1. Создайте аккаунт LINE Developers и откройте Консоль: https://developers.line.biz/console/
  2. Создайте (или выберите) провайдера и добавьте канал Messaging API.
  3. Скопируйте Channel access token и Channel secret из настроек канала.
  4. Включите Use webhook в настройках Messaging API.
  5. Задайте URL вебхука для эндпоинта вашего шлюза (требуется HTTPS):
https://gateway-host/line/webhook

Шлюз отвечает на верификацию вебхука LINE (GET) и входящие события (POST). Если нужен нестандартный путь, задайте channels.line.webhookPath или channels.line.accounts.<id>.webhookPath и обновите URL соответственно.

Заметка по безопасности:

  • Верификация подписи LINE зависит от тела запроса (HMAC по сырому телу), поэтому OpenClaw применяет строгие пред-авторизационные лимиты тела и таймаут перед верификацией.

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

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

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

Переменные окружения (только аккаунт по умолчанию):

  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET

Файлы токена/секрета:

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

tokenFile и secretFile должны указывать на обычные файлы. Символические ссылки отклоняются.

Несколько аккаунтов:

{
  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: список разрешённых ID пользователей LINE для ЛС
  • channels.line.groupPolicy: allowlist | open | disabled
  • channels.line.groupAllowFrom: список разрешённых ID пользователей LINE для групп
  • Переопределения по группам: channels.line.groups.<groupId>.allowFrom
  • Примечание: если channels.line полностью отсутствует, runtime fallback — groupPolicy="allowlist" для групповых проверок (даже если channels.defaults.groupPolicy задан).

ID LINE чувствительны к регистру. Валидные ID выглядят так:

  • Пользователь: U + 32 hex-символа
  • Группа: C + 32 hex-символа
  • Комната: R + 32 hex-символа

Поведение сообщений

  • Текст разбивается на чанки по 5000 символов.
  • Markdown-форматирование убирается; блоки кода и таблицы преобразуются в Flex- карточки, когда возможно.
  • Потоковые ответы буферизуются; LINE получает полные чанки с анимацией загрузки во время работы агента.
  • Загрузка медиа ограничена channels.line.mediaMaxMb (по умолчанию 10).

Данные канала (расширенные сообщения)

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

{
  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-сообщений:

/card info "Welcome" "Thanks for joining!"

Устранение неполадок

  • Верификация вебхука не проходит: убедитесь, что URL вебхука использует HTTPS и channelSecret совпадает с консолью LINE.
  • Нет входящих событий: подтвердите, что путь вебхука совпадает с channels.line.webhookPath и шлюз доступен из LINE.
  • Ошибки загрузки медиа: увеличьте channels.line.mediaMaxMb, если медиа превышает лимит по умолчанию.