{ "title": "LINE (plugin)", "content": "LINE connects to OpenClaw via the LINE Messaging API. The plugin runs as a webhook\nreceiver on the gateway and uses your channel access token + channel secret for\nauthentication.\n\nStatus: supported via plugin. Direct messages, group chats, media, locations, Flex\nmessages, template messages, and quick replies are supported. Reactions and threads\nare not supported.\n\nInstall the LINE plugin:\n\nLocal checkout (when running from a git repo):\n\n1. Create a LINE Developers account and open the Console:\n [https://developers.line.biz/console/](https://developers.line.biz/console/)\n2. Create (or pick) a Provider and add a **Messaging API** channel.\n3. Copy the **Channel access token** and **Channel secret** from the channel settings.\n4. Enable **Use webhook** in the Messaging API settings.\n5. Set the webhook URL to your gateway endpoint (HTTPS required):\n\nThe gateway responds to LINE’s webhook verification (GET) and inbound events (POST).\nIf you need a custom path, set `channels.line.webhookPath` or\n`channels.line.accounts..webhookPath` and update the URL accordingly.\n\nEnv vars (default account only):\n\n* `LINE_CHANNEL_ACCESS_TOKEN`\n* `LINE_CHANNEL_SECRET`\n\nDirect messages default to pairing. Unknown senders get a pairing code and their\nmessages are ignored until approved.\n\nAllowlists and policies:\n\n* `channels.line.dmPolicy`: `pairing | allowlist | open | disabled`\n* `channels.line.allowFrom`: allowlisted LINE user IDs for DMs\n* `channels.line.groupPolicy`: `allowlist | open | disabled`\n* `channels.line.groupAllowFrom`: allowlisted LINE user IDs for groups\n* Per-group overrides: `channels.line.groups..allowFrom`\n\nLINE IDs are case-sensitive. Valid IDs look like:\n\n* User: `U` + 32 hex chars\n* Group: `C` + 32 hex chars\n* Room: `R` + 32 hex chars\n\n* Text is chunked at 5000 characters.\n* Markdown formatting is stripped; code blocks and tables are converted into Flex\n cards when possible.\n* Streaming responses are buffered; LINE receives full chunks with a loading\n animation while the agent works.\n* Media downloads are capped by `channels.line.mediaMaxMb` (default 10).\n\n## Channel data (rich messages)\n\nUse `channelData.line` to send quick replies, locations, Flex cards, or template\nmessages.\n\nThe LINE plugin also ships a `/card` command for Flex message presets:\n\n* **Webhook verification fails:** ensure the webhook URL is HTTPS and the\n `channelSecret` matches the LINE console.\n* **No inbound events:** confirm the webhook path matches `channels.line.webhookPath`\n and that the gateway is reachable from LINE.\n* **Media download errors:** raise `channels.line.mediaMaxMb` if media exceeds the\n default limit.", "code_samples": [ { "code": "Local checkout (when running from a git repo):", "language": "unknown" }, { "code": "## Setup\n\n1. Create a LINE Developers account and open the Console:\n [https://developers.line.biz/console/](https://developers.line.biz/console/)\n2. Create (or pick) a Provider and add a **Messaging API** channel.\n3. Copy the **Channel access token** and **Channel secret** from the channel settings.\n4. Enable **Use webhook** in the Messaging API settings.\n5. Set the webhook URL to your gateway endpoint (HTTPS required):", "language": "unknown" }, { "code": "The gateway responds to LINE’s webhook verification (GET) and inbound events (POST).\nIf you need a custom path, set `channels.line.webhookPath` or\n`channels.line.accounts..webhookPath` and update the URL accordingly.\n\n## Configure\n\nMinimal config:", "language": "unknown" }, { "code": "Env vars (default account only):\n\n* `LINE_CHANNEL_ACCESS_TOKEN`\n* `LINE_CHANNEL_SECRET`\n\nToken/secret files:", "language": "unknown" }, { "code": "Multiple accounts:", "language": "unknown" }, { "code": "## Access control\n\nDirect messages default to pairing. Unknown senders get a pairing code and their\nmessages are ignored until approved.", "language": "unknown" }, { "code": "Allowlists and policies:\n\n* `channels.line.dmPolicy`: `pairing | allowlist | open | disabled`\n* `channels.line.allowFrom`: allowlisted LINE user IDs for DMs\n* `channels.line.groupPolicy`: `allowlist | open | disabled`\n* `channels.line.groupAllowFrom`: allowlisted LINE user IDs for groups\n* Per-group overrides: `channels.line.groups..allowFrom`\n\nLINE IDs are case-sensitive. Valid IDs look like:\n\n* User: `U` + 32 hex chars\n* Group: `C` + 32 hex chars\n* Room: `R` + 32 hex chars\n\n## Message behavior\n\n* Text is chunked at 5000 characters.\n* Markdown formatting is stripped; code blocks and tables are converted into Flex\n cards when possible.\n* Streaming responses are buffered; LINE receives full chunks with a loading\n animation while the agent works.\n* Media downloads are capped by `channels.line.mediaMaxMb` (default 10).\n\n## Channel data (rich messages)\n\nUse `channelData.line` to send quick replies, locations, Flex cards, or template\nmessages.", "language": "unknown" }, { "code": "The LINE plugin also ships a `/card` command for Flex message presets:", "language": "unknown" } ], "headings": [ { "level": "h2", "text": "Plugin required", "id": "plugin-required" }, { "level": "h2", "text": "Setup", "id": "setup" }, { "level": "h2", "text": "Configure", "id": "configure" }, { "level": "h2", "text": "Access control", "id": "access-control" }, { "level": "h2", "text": "Message behavior", "id": "message-behavior" }, { "level": "h2", "text": "Channel data (rich messages)", "id": "channel-data-(rich-messages)" }, { "level": "h2", "text": "Troubleshooting", "id": "troubleshooting" } ], "url": "llms-txt#line-(plugin)", "links": [] }