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
- Crea un account LINE Developers e apri la Console: https://developers.line.biz/console/
- Crea (o seleziona) un Provider e aggiungi un canale Messaging API.
- Copia il Channel access token e il Channel secret dalle impostazioni del canale.
- Abilita Use webhook nelle impostazioni della Messaging API.
- 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_TOKENLINE_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 | disabledchannels.line.allowFrom: ID utente LINE consentiti per i DMchannels.line.groupPolicy:allowlist | open | disabledchannels.line.groupAllowFrom: ID utente LINE consentiti per i gruppi- Sovrascritture per gruppo:
channels.line.groups.<groupId>.allowFrom - Nota runtime: se
channels.linee completamente assente, il runtime usagroupPolicy="allowlist"per i controlli di gruppo (anche sechannels.defaults.groupPolicye 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
channelSecretcorrisponda a quello nella console LINE. - Nessun evento in ingresso: conferma che il percorso del webhook corrisponda a
channels.line.webhookPathe che il gateway sia raggiungibile da LINE. - Errori di download media: aumenta
channels.line.mediaMaxMbse i media superano il limite predefinito.