LINE (plugin)
LINE connects to OpenClaw via the LINE Messaging API. The plugin runs as a webhook
receiver on the gateway and uses your channel access token + channel secret for
authentication.
Status: supported via plugin. Direct messages, group chats, media, locations, Flex
messages, template messages, and quick replies are supported. Reactions and threads
are not supported.
Plugin required
Install the LINE plugin:
openclaw plugins install @openclaw/line
Local checkout (when running from a git repo):
openclaw plugins install ./extensions/line
Setup
- Create a LINE Developers account and open the Console:
https://developers.line.biz/console/
- Create (or pick) a Provider and add a Messaging API channel.
- Copy the Channel access token and Channel secret from the channel settings.
- Enable Use webhook in the Messaging API settings.
- Set the webhook URL to your gateway endpoint (HTTPS required):
https://gateway-host/line/webhook
The gateway responds to LINE’s webhook verification (GET) and inbound events (POST).
If you need a custom path, set channels.line.webhookPath or
channels.line.accounts.<id>.webhookPath and update the URL accordingly.
Security note:
- LINE signature verification is body-dependent (HMAC over the raw body), so OpenClaw applies strict pre-auth body limits and timeout before verification.
- OpenClaw processes webhook events from the verified raw request bytes. Upstream middleware-transformed
req.body values are ignored for signature-integrity safety.
Minimal config:
{
channels: {
line: {
enabled: true,
channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",
channelSecret: "LINE_CHANNEL_SECRET",
dmPolicy: "pairing",
},
},
}
Env vars (default account only):
LINE_CHANNEL_ACCESS_TOKEN
LINE_CHANNEL_SECRET
Token/secret files:
{
channels: {
line: {
tokenFile: "/path/to/line-token.txt",
secretFile: "/path/to/line-secret.txt",
},
},
}
tokenFile and secretFile must point to regular files. Symlinks are rejected.
Multiple accounts:
{
channels: {
line: {
accounts: {
marketing: {
channelAccessToken: "...",
channelSecret: "...",
webhookPath: "/line/marketing",
},
},
},
},
}
Access control
Direct messages default to pairing. Unknown senders get a pairing code and their
messages are ignored until approved.
openclaw pairing list line
openclaw pairing approve line <CODE>
Allowlists and policies:
channels.line.dmPolicy: pairing | allowlist | open | disabled
channels.line.allowFrom: allowlisted LINE user IDs for DMs
channels.line.groupPolicy: allowlist | open | disabled
channels.line.groupAllowFrom: allowlisted LINE user IDs for groups
- Per-group overrides:
channels.line.groups.<groupId>.allowFrom
- Runtime note: if
channels.line is completely missing, runtime falls back to groupPolicy="allowlist" for group checks (even if channels.defaults.groupPolicy is set).
LINE IDs are case-sensitive. Valid IDs look like:
- User:
U + 32 hex chars
- Group:
C + 32 hex chars
- Room:
R + 32 hex chars
Message behavior
- Text is chunked at 5000 characters.
- Markdown formatting is stripped; code blocks and tables are converted into Flex
cards when possible.
- Streaming responses are buffered; LINE receives full chunks with a loading
animation while the agent works.
- Media downloads are capped by
channels.line.mediaMaxMb (default 10).
Channel data (rich messages)
Use channelData.line to send quick replies, locations, Flex cards, or template
messages.
{
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",
},
},
},
}
The LINE plugin also ships a /card command for Flex message presets:
/card info "Welcome" "Thanks for joining!"
Troubleshooting
- Webhook verification fails: ensure the webhook URL is HTTPS and the
channelSecret matches the LINE console.
- No inbound events: confirm the webhook path matches
channels.line.webhookPath
and that the gateway is reachable from LINE.
- Media download errors: raise
channels.line.mediaMaxMb if media exceeds the
default limit.
Last modified on March 22, 2026