LINE connects to CoderClaw 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.
Install the LINE plugin:
coderclaw plugins install @coderclaw/line
Local checkout (when running from a git repo):
coderclaw plugins install ./extensions/line
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.
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_TOKENLINE_CHANNEL_SECRETToken/secret files:
{
channels: {
line: {
tokenFile: "/path/to/line-token.txt",
secretFile: "/path/to/line-secret.txt",
},
},
}
Multiple accounts:
{
channels: {
line: {
accounts: {
marketing: {
channelAccessToken: "...",
channelSecret: "...",
webhookPath: "/line/marketing",
},
},
},
},
}
Direct messages default to pairing. Unknown senders get a pairing code and their messages are ignored until approved.
coderclaw pairing list line
coderclaw pairing approve line <CODE>
Allowlists and policies:
channels.line.dmPolicy: pairing | allowlist | open | disabledchannels.line.allowFrom: allowlisted LINE user IDs for DMschannels.line.groupPolicy: allowlist | open | disabledchannels.line.groupAllowFrom: allowlisted LINE user IDs for groupschannels.line.groups.<groupId>.allowFromLINE IDs are case-sensitive. Valid IDs look like:
U + 32 hex charsC + 32 hex charsR + 32 hex charschannels.line.mediaMaxMb (default 10).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!"
channelSecret matches the LINE console.channels.line.webhookPath
and that the gateway is reachable from LINE.channels.line.mediaMaxMb if media exceeds the
default limit.