
OpenClaw Integration with LINE

By Sarah Jenkins


By Sarah Jenkins
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.
Install the LINE plugin:
openclaw plugins install @openclaw/lineLocal checkout (when running from a git repo):
openclaw plugins install ./path/to/local/line-pluginhttps://gateway-host/line/webhookThe 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:
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_TOKENLINE_CHANNEL_SECRETToken/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",
},
},
},
},
}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 | 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>.allowFromchannels.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:
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!"LINE supports ACP (Agent Communication Protocol) conversation bindings:
/acp spawn <agent> --bind here binds the current LINE chat to an ACP session without creating a child thread.The LINE plugin supports sending images, videos, and audio files through the agent message tool. Media is sent via the LINE-specific delivery path with appropriate preview and tracking handling:
Generic media sends fall back to the existing image-only route when a LINE-specific path is not available.
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.About the author

Sarah Jenkins is a seasoned OpenClaw developer with a strong focus on optimizing high-performance computing solutions. Her work primarily involves crafting efficient parallel algorithms and enhancing GPU acceleration for complex scientific simulations. Jenkins is renowned for her meticulous attention to detail and her ability to translate intricate theoretical concepts into practical, robust OpenClaw implementations.