LINE (plugin)

LINE si collega a OpenClaw tramite la LINE Messaging API. Il plugin funziona come ricevitore webhook sul gateway e usa il tuo channel access token + channel secret per l’autenticazione.

Stato: supportato via plugin. Messaggi diretti, chat di gruppo, media, posizioni, messaggi Flex, messaggi template e risposte rapide sono supportati. Reazioni e thread non sono supportati.

Plugin necessario

Installa il plugin LINE:

openclaw plugins install @openclaw/line

Da checkout locale (se stai lavorando da un repo git):

openclaw plugins install ./extensions/line

Setup

  1. Crea un account LINE Developers e apri la Console: https://developers.line.biz/console/
  2. Crea (o seleziona) un Provider e aggiungi un canale Messaging API.
  3. Copia il Channel access token e il Channel secret dalle impostazioni del canale.
  4. Abilita Use webhook nelle impostazioni della Messaging API.
  5. Imposta l’URL del webhook sull’endpoint del tuo gateway (HTTPS obbligatorio):
https://gateway-host/line/webhook

Il gateway risponde alla verifica webhook di LINE (GET) e agli eventi in ingresso (POST). Se hai bisogno di un percorso personalizzato, imposta channels.line.webhookPath o channels.line.accounts.<id>.webhookPath e aggiorna l’URL di conseguenza.

Nota sulla sicurezza:

  • La verifica della firma LINE dipende dal body (HMAC sul body raw), quindi OpenClaw applica limiti rigorosi sul body pre-autenticazione e timeout prima della verifica.

Configurazione

Configurazione minimale:

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

Variabili d’ambiente (solo account predefinito):

  • LINE_CHANNEL_ACCESS_TOKEN
  • LINE_CHANNEL_SECRET

File di token/secret:

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

tokenFile e secretFile devono puntare a file regolari. I symlink sono rifiutati.

Account multipli:

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

Controllo degli accessi

I messaggi diretti usano il pairing per impostazione predefinita. I mittenti sconosciuti ricevono un codice di pairing e i loro messaggi vengono ignorati fino all’approvazione.

openclaw pairing list line
openclaw pairing approve line <CODE>

Allowlist e policy:

  • channels.line.dmPolicy: pairing | allowlist | open | disabled
  • channels.line.allowFrom: ID utente LINE consentiti per i DM
  • channels.line.groupPolicy: allowlist | open | disabled
  • channels.line.groupAllowFrom: ID utente LINE consentiti per i gruppi
  • Sovrascritture per gruppo: channels.line.groups.<groupId>.allowFrom
  • Nota runtime: se channels.line e completamente assente, il runtime usa groupPolicy="allowlist" per i controlli di gruppo (anche se channels.defaults.groupPolicy e impostato).

Gli ID LINE sono case-sensitive. Gli ID validi hanno questo formato:

  • Utente: U + 32 caratteri esadecimali
  • Gruppo: C + 32 caratteri esadecimali
  • Stanza: R + 32 caratteri esadecimali

Comportamento dei messaggi

  • Il testo viene segmentato a 5000 caratteri.
  • La formattazione Markdown viene rimossa; blocchi di codice e tabelle vengono convertiti in card Flex quando possibile.
  • Le risposte in streaming sono bufferizzate; LINE riceve chunk completi con un’animazione di caricamento mentre l’agent lavora.
  • I download di media sono limitati da channels.line.mediaMaxMb (predefinito 10).

Dati del canale (messaggi ricchi)

Usa channelData.line per inviare risposte rapide, posizioni, card Flex o messaggi template.

{
  text: "Ecco qui",
  channelData: {
    line: {
      quickReplies: ["Stato", "Aiuto"],
      location: {
        title: "Ufficio",
        address: "Via Roma 123",
        latitude: 35.681236,
        longitude: 139.767125,
      },
      flexMessage: {
        altText: "Card stato",
        contents: {
          /* Payload Flex */
        },
      },
      templateMessage: {
        type: "confirm",
        text: "Procedere?",
        confirmLabel: "Si",
        confirmData: "yes",
        cancelLabel: "No",
        cancelData: "no",
      },
    },
  },
}

Il plugin LINE include anche un comando /card per preset di messaggi Flex:

/card info "Benvenuto" "Grazie per aver aderito!"

Risoluzione problemi

  • La verifica webhook fallisce: assicurati che l’URL del webhook sia HTTPS e che il channelSecret corrisponda a quello nella console LINE.
  • Nessun evento in ingresso: conferma che il percorso del webhook corrisponda a channels.line.webhookPath e che il gateway sia raggiungibile da LINE.
  • Errori di download media: aumenta channels.line.mediaMaxMb se i media superano il limite predefinito.