LINE (plugin)

LINE se connecte a OpenClaw via la LINE Messaging API. Le plugin fonctionne comme recepteur de webhooks sur la gateway et utilise votre jeton d’acces canal + secret de canal pour l’authentification.

Statut : pris en charge via plugin. Messages prives, discussions de groupe, medias, localisations, messages Flex, messages template et reponses rapides sont pris en charge. Les reactions et les fils de discussion ne sont pas pris en charge.

Plugin requis

Installez le plugin LINE :

openclaw plugins install @openclaw/line

Checkout local (execution depuis un depot git) :

openclaw plugins install ./extensions/line

Configuration

  1. Creez un compte LINE Developers et ouvrez la Console : https://developers.line.biz/console/
  2. Creez (ou choisissez) un Provider et ajoutez un canal Messaging API.
  3. Copiez le Channel access token et le Channel secret depuis les parametres du canal.
  4. Activez Use webhook dans les parametres Messaging API.
  5. Definissez l’URL du webhook sur votre endpoint de gateway (HTTPS requis) :
https://gateway-host/line/webhook

La gateway repond a la verification du webhook LINE (GET) et aux evenements entrants (POST). Si vous avez besoin d’un chemin personnalise, definissez channels.line.webhookPath ou channels.line.accounts.<id>.webhookPath et mettez a jour l’URL en consequence.

Remarque de securite :

  • La verification de signature LINE depend du corps (HMAC sur le corps brut), donc OpenClaw applique des limites strictes de corps pre-authentification et un delai avant la verification.

Configurer

Configuration minimale :

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

Variables d’environnement (compte par defaut uniquement) :

  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET

Fichiers de jeton/secret :

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

tokenFile et secretFile doivent pointer vers des fichiers reguliers. Les liens symboliques sont rejetes.

Comptes multiples :

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

Controle d’acces

Les messages prives utilisent l’appairage par defaut. Les expediteurs inconnus recoivent un code d’appairage et leurs messages sont ignores jusqu’a approbation.

openclaw pairing list line
openclaw pairing approve line <CODE>

Listes d’autorisation et politiques :

  • channels.line.dmPolicy : pairing | allowlist | open | disabled
  • channels.line.allowFrom : IDs utilisateur LINE autorises pour les DMs
  • channels.line.groupPolicy : allowlist | open | disabled
  • channels.line.groupAllowFrom : IDs utilisateur LINE autorises pour les groupes
  • Surcharges par groupe : channels.line.groups.<groupId>.allowFrom
  • Remarque d’execution : si channels.line est completement absent, l’execution se replie sur groupPolicy="allowlist" pour les verifications de groupe (meme si channels.defaults.groupPolicy est defini).

Les IDs LINE sont sensibles a la casse. Les IDs valides ressemblent a :

  • Utilisateur : U + 32 caracteres hex
  • Groupe : C + 32 caracteres hex
  • Salon : R + 32 caracteres hex

Comportement des messages

  • Le texte est decoupe a 5000 caracteres.
  • Le formatage Markdown est supprime ; les blocs de code et tableaux sont convertis en cartes Flex quand c’est possible.
  • Les reponses en streaming sont mises en tampon ; LINE recoit des blocs complets avec une animation de chargement pendant que l’agent travaille.
  • Les telechargements de medias sont limites par channels.line.mediaMaxMb (par defaut 10).

Donnees de canal (messages enrichis)

Utilisez channelData.line pour envoyer des reponses rapides, localisations, cartes Flex ou messages template.

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

Le plugin LINE inclut egalement une commande /card pour les presets de messages Flex :

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

Depannage

  • La verification du webhook echoue : assurez-vous que l’URL du webhook est HTTPS et que le channelSecret correspond a la console LINE.
  • Pas d’evenements entrants : confirmez que le chemin du webhook correspond a channels.line.webhookPath et que la gateway est accessible depuis LINE.
  • Erreurs de telechargement de medias : augmentez channels.line.mediaMaxMb si les medias depassent la limite par defaut.