{
  "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.<id>.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.<groupId>.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.<id>.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.<groupId>.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": []
}