LINE (plugin)

LINE laczy sie z OpenClaw przez LINE Messaging API. Plugin dziala jako odbiornik webhooka na gateway i uzywa tokenu dostepu kanalu + sekretu kanalu do uwierzytelniania.

Status: obslugiwany przez plugin. Wiadomosci bezposrednie, czaty grupowe, media, lokalizacje, wiadomosci Flex, wiadomosci szablonowe i szybkie odpowiedzi sa obslugiwane. Reakcje i watki nie sa obslugiwane.

Wymagany plugin

Zainstaluj plugin LINE:

openclaw plugins install @openclaw/line

Lokalny checkout (przy uruchomieniu z repozytorium git):

openclaw plugins install ./extensions/line

Konfiguracja

  1. Utworz konto LINE Developers i otworz Konsole: https://developers.line.biz/console/
  2. Utworz (lub wybierz) Dostawce i dodaj kanal Messaging API.
  3. Skopiuj Channel access token i Channel secret z ustawien kanalu.
  4. Wlacz Use webhook w ustawieniach Messaging API.
  5. Ustaw URL webhooka na endpoint twojego gateway (wymagany HTTPS):
https://gateway-host/line/webhook

Gateway odpowiada na weryfikacje webhooka LINE (GET) i zdarzenia przychodzace (POST). Jesli potrzebujesz niestandardowej sciezki, ustaw channels.line.webhookPath lub channels.line.accounts.<id>.webhookPath i odpowiednio zaktualizuj URL.

Uwaga bezpieczenstwa:

  • Weryfikacja podpisu LINE zalezy od ciala (HMAC po surowym ciele), wiec OpenClaw stosuje scisle limity ciala pre-auth i timeout przed weryfikacja.

Konfigurowanie

Minimalna konfiguracja:

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

Zmienne srodowiskowe (tylko domyslne konto):

  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET

Pliki z tokenem/sekretem:

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

tokenFile i secretFile musza wskazywac na zwykle pliki. Dowiazania symboliczne sa odrzucane.

Wiele kont:

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

Kontrola dostepu

Wiadomosci bezposrednie domyslnie uzywaja parowania. Nieznani nadawcy otrzymuja kod parowania, a ich wiadomosci sa ignorowane do momentu zatwierdzenia.

openclaw pairing list line
openclaw pairing approve line <CODE>

Listy dozwolonych i polityki:

  • channels.line.dmPolicy: pairing | allowlist | open | disabled
  • channels.line.allowFrom: dozwolone ID uzytkownikow LINE dla DM
  • channels.line.groupPolicy: allowlist | open | disabled
  • channels.line.groupAllowFrom: dozwolone ID uzytkownikow LINE dla grup
  • Nadpisania per grupe: channels.line.groups.<groupId>.allowFrom
  • Uwaga runtime: jesli channels.line calkowicie brakuje, runtime stosuje zastepczym groupPolicy="allowlist" dla sprawdzen grupowych (nawet jesli channels.defaults.groupPolicy jest ustawione).

ID LINE rozrozniaja wielkosc liter. Prawidlowe ID wygladaja tak:

  • Uzytkownik: U + 32 znaki hex
  • Grupa: C + 32 znaki hex
  • Pokoj: R + 32 znaki hex

Zachowanie wiadomosci

  • Tekst jest dzielony na kawalki po 5000 znakow.
  • Formatowanie markdown jest usuwane; bloki kodu i tabele sa konwertowane na karty Flex gdy to mozliwe.
  • Odpowiedzi strumieniowe sa buforowane; LINE otrzymuje pelne kawalki z animacja ladowania podczas pracy agenta.
  • Pobieranie mediow jest ograniczone przez channels.line.mediaMaxMb (domyslnie 10).

Dane kanalu (bogate wiadomosci)

Uzyj channelData.line do wysylania szybkich odpowiedzi, lokalizacji, kart Flex lub wiadomosci szablonowych.

{
  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",
      },
    },
  },
}

Plugin LINE dostarcza rowniez polecenie /card dla presetow wiadomosci Flex:

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

Rozwiazywanie problemow

  • Weryfikacja webhooka nie udaje sie: upewnij sie, ze URL webhooka jest HTTPS, a channelSecret pasuje do konsoli LINE.
  • Brak zdarzen przychodzacych: potwierdz, ze sciezka webhooka pasuje do channels.line.webhookPath i ze gateway jest osiagalny z LINE.
  • Bledy pobierania mediow: zwieksz channels.line.mediaMaxMb jesli media przekraczaja domyslny limit.