LINE (Plugin)

LINE verbindet sich über die LINE Messaging API mit OpenClaw. Das Plugin läuft als Webhook-Empfänger auf dem Gateway und nutzt dein Channel Access Token + Channel Secret für die Authentifizierung.

Status: Unterstützt via Plugin. Direktnachrichten, Gruppenchats, Medien, Standorte, Flex Messages, Template Messages und Quick Replies werden unterstützt. Reactions und Threads werden nicht unterstützt.

Plugin erforderlich

Installiere das LINE Plugin:

openclaw plugins install @openclaw/line

Lokaler Checkout (wenn du aus einem Git-Repo arbeitest):

openclaw plugins install ./extensions/line

Setup

  1. Erstelle einen LINE Developers Account und öffne die Console: https://developers.line.biz/console/
  2. Erstelle (oder wähle) einen Provider und füge einen Messaging API Channel hinzu.
  3. Kopiere das Channel access token und Channel secret aus den Channel-Einstellungen.
  4. Aktiviere Use webhook in den Messaging API Einstellungen.
  5. Setze die Webhook-URL auf deinen Gateway-Endpunkt (HTTPS erforderlich):
https://gateway-host/line/webhook

Das Gateway antwortet auf LINEs Webhook-Verifizierung (GET) und eingehende Events (POST). Falls du einen eigenen Pfad brauchst, setze channels.line.webhookPath oder channels.line.accounts.<id>.webhookPath und passe die URL entsprechend an.

Konfiguration

Minimale Config:

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

Umgebungsvariablen (nur für den Standard-Account):

  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET

Token/Secret aus Dateien:

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

Mehrere Accounts:

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

Zugriffskontrolle

Direktnachrichten nutzen standardmäßig Pairing. Unbekannte Absender bekommen einen Pairing-Code und ihre Nachrichten werden ignoriert, bis sie freigegeben werden.

openclaw pairing list line
openclaw pairing approve line <CODE>

Allowlists und Policies:

  • channels.line.dmPolicy: pairing | allowlist | open | disabled
  • channels.line.allowFrom: Allowlist mit LINE User-IDs für DMs
  • channels.line.groupPolicy: allowlist | open | disabled
  • channels.line.groupAllowFrom: Allowlist mit LINE User-IDs für Gruppen
  • Gruppenspezifische Overrides: channels.line.groups.<groupId>.allowFrom

LINE IDs sind case-sensitive. Gültige IDs sehen so aus:

  • User: U + 32 Hex-Zeichen
  • Group: C + 32 Hex-Zeichen
  • Room: R + 32 Hex-Zeichen

Nachrichtenverhalten

  • Text wird bei 5000 Zeichen aufgeteilt.
  • Markdown-Formatierung wird entfernt; Code-Blöcke und Tabellen werden wenn möglich in Flex Cards umgewandelt.
  • Streaming-Antworten werden gepuffert; LINE erhält vollständige Chunks mit einer Lade-Animation, während der Agent arbeitet.
  • Medien-Downloads sind durch channels.line.mediaMaxMb begrenzt (Standard: 10).

Channel Data (Rich Messages)

Nutze channelData.line, um Quick Replies, Standorte, Flex Cards oder Template Messages zu senden.

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

Das LINE Plugin enthält auch einen /card Befehl für Flex Message Presets:

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

Troubleshooting

  • Webhook-Verifizierung schlägt fehl: Stelle sicher, dass die Webhook-URL HTTPS nutzt und das channelSecret mit der LINE Console übereinstimmt.
  • Keine eingehenden Events: Prüfe, ob der Webhook-Pfad mit channels.line.webhookPath übereinstimmt und das Gateway von LINE aus erreichbar ist.
  • Medien-Download-Fehler: Erhöhe channels.line.mediaMaxMb, falls Medien das Standard-Limit überschreiten.