{"id":48716427,"url":"https://github.com/sfox38/line_ha_bot","last_synced_at":"2026-06-13T02:08:27.740Z","repository":{"id":348012478,"uuid":"1196122693","full_name":"sfox38/line_ha_bot","owner":"sfox38","description":"A Home Assistant custom integration for sending rich messages to LINE users and groups, and to trigger HA automations from incoming LINE messages","archived":false,"fork":false,"pushed_at":"2026-05-01T04:38:08.000Z","size":215,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-01T06:28:51.855Z","etag":null,"topics":["bot","home-assistant","integration","messenger"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sfox38.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-30T11:50:23.000Z","updated_at":"2026-05-01T04:35:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sfox38/line_ha_bot","commit_stats":null,"previous_names":["sfox38/line_ha_bot"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/sfox38/line_ha_bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfox38%2Fline_ha_bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfox38%2Fline_ha_bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfox38%2Fline_ha_bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfox38%2Fline_ha_bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sfox38","download_url":"https://codeload.github.com/sfox38/line_ha_bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sfox38%2Fline_ha_bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34269401,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","home-assistant","integration","messenger"],"created_at":"2026-04-11T17:20:54.191Z","updated_at":"2026-06-13T02:08:27.730Z","avatar_url":"https://github.com/sfox38.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LINE Bot for Home Assistant\n\nA Home Assistant custom integration that connects your LINE Official Account to Home Assistant. Send rich messages to LINE users and groups from automations, and trigger automations from incoming LINE messages.\n\n---\n\n## Index\n\n- [Features](#features)\n- [Prerequisites](#prerequisites)\n- [Supported Languages](#supported-languages)\n- [Installation](#installation)\n- [Setup](#setup)\n- [Recipients](#recipients)\n- [Sending Messages](#sending-messages)\n  - [Standard notify service](#standard-notify-service)\n  - [Custom send service](#custom-send-service)\n  - [Text and title](#text-and-title)\n  - [Image](#image)\n  - [Audio](#audio)\n  - [Video](#video)\n  - [Sticker](#sticker)\n  - [Location](#location)\n  - [Flex message](#flex-message)\n  - [Button template](#button-template)\n  - [Confirm template](#confirm-template)\n  - [Reply token](#reply-token)\n  - [Quick replies](#quick-replies)\n- [Incoming Messages](#incoming-messages)\n  - [line_bot_message_received event](#line_bot_message_received-event)\n  - [Responding to messages](#responding-to-messages)\n  - [Postback events](#postback-events)\n- [Send Error Events](#send-error-events)\n- [Group Chats](#group-chats)\n- [Quota Sensors](#quota-sensors)\n- [Options](#options)\n- [Troubleshooting](#troubleshooting)\n- [Message Quota](#message-quota)\n- [License](#license)\n\n---\n\n## Features\n\n- Send text, images, audio, video, stickers, locations, flex cards, and button/confirm templates to LINE users and groups.\n- Two send interfaces: standard `notify.send_message` for simple text, and `line_ha_bot.send_message` for the full feature set.\n- Trigger HA automations from incoming LINE messages via the `line_bot_message_received` event.\n- Reply to incoming messages using LINE's free Reply API via reply tokens.\n- Group chat support: add a LINE group as a recipient and send to or receive from the whole group.\n- Webhook-based recipient discovery: message the bot and it appears automatically in the setup flow.\n- Monthly quota sensors showing message limit and consumption.\n- Error events (`line_bot_send_failed`) for failed sends, enabling retry or alert automations.\n- Quick reply chips on any message type, giving recipients one-tap response options.\n- Full UI configuration. No YAML required.\n- Lightweight, does not depend on any external libraries\n- Signature-verified webhook for security.\n\n---\n\n## Prerequisites\n\nBefore installing, you need a LINE Official Account with the Messaging API enabled. This takes about 15 minutes the first time.\n\n### 1. Create a LINE Official Account\n\n1. Go to https://account.line.biz/signup and log in with your personal LINE account.\n2. Fill in the form (Account name, Category, Country, Email) and submit.\n\n### 2. Enable the Messaging API\n\n1. Go to https://manager.line.biz and open your new account.\n2. Go to **Settings \u003e Messaging API** and click **Enable**.\n3. Select or create a Developer provider and confirm.\n\n### 3. Get your credentials\n\n1. You will be taken to the LINE Developers Console. If not, go to https://developers.line.biz/console and log in.\n2. Select your provider, then your channel.\n3. On the **Basic settings** tab, copy your **Channel secret**.\n4. On the **Messaging API** tab, scroll to **Channel access token (long-lived)**, click **Issue**, and copy the token.\n\nKeep both values private. Anyone with your Channel Access Token can send messages as your bot.\n\n### 4. Configure your Home Assistant external URL\n\nLINE requires your Home Assistant instance to be reachable from the internet via a **public HTTPS URL with a valid SSL certificate**. A plain HTTP address (e.g. `http://192.168.1.x:8123`) or a self-signed certificate will not work. This is a hard requirement on LINE's side.\n\nYou have several options, listed from easiest to most technical:\n\n**Option A: Nabu Casa (easiest)**\nA Home Assistant Cloud subscription gives you a ready-made HTTPS domain with no configuration required. See https://www.nabucasa.com for current pricing.\n\n**Option B: Cloudflare Tunnel (free)**\nCloudflare Tunnel routes your local HA through Cloudflare's network, giving you a proper HTTPS domain for free. Install the **Cloudflare** add-on from the HA add-on store, create a free Cloudflare account, and follow the add-on instructions.\n\n**Option C: DuckDNS + Let's Encrypt (free)**\nDuckDNS gives you a free dynamic DNS hostname (e.g. `your-name.duckdns.org`). Combined with the **DuckDNS** and **Let's Encrypt** HA add-ons, you get a valid HTTPS URL at no cost. Requires your router to forward port 443 to your HA instance.\n\n**Option D: Reverse proxy with your own domain**\nIf you own a domain name, point it at your home IP, set up a reverse proxy (e.g. NGINX), and use Let's Encrypt for SSL. Most technical option but gives you the most control.\n\nOnce you have a working HTTPS URL, set it in HA at **Settings \u003e System \u003e Network \u003e Home Assistant URL (External)**.\n\n---\n\n## Supported Languages\n\nThe setup and configuration UI is available in the following languages:\n\n- English\n- Thai (ภาษาไทย)\n- Japanese (日本語)\n- Traditional Chinese (正體中文)\n- Indonesian (Bahasa Indonesia)\n- Korean (한국어)\n\nHome Assistant will automatically use your configured language if it is supported, falling back to English otherwise.\n\n---\n\n## Installation\n\n### Via HACS (recommended)\n\n1. In Home Assistant, go to **HACS \u003e Integrations**.\n2. Click the three-dot menu and select **Custom repositories**.\n3. Add `https://github.com/sfox38/line_ha_bot` as an **Integration**.\n4. Search for **LINE Bot** and install it.\n5. Restart Home Assistant.\n\n### Manual installation\n\n1. Download or clone this repository.\n2. Copy the `custom_components/line_ha_bot` folder into your HA `config/custom_components/` directory.\n3. Restart Home Assistant.\n\n---\n\n## Setup\n\n1. Go to **Settings \u003e Devices \u0026 Services \u003e Add Integration** and search for **LINE Bot**.\n2. Enter your **Channel Access Token** and **Channel Secret**.\n3. The next screen shows your **Webhook URL**. Copy it.\n4. In the LINE Developers Console, open your channel's **Messaging API** tab.\n5. Under **Webhook settings**, paste the URL, enable **Use webhook**, and click **Verify**. It should return success.\n6. Tick the confirmation checkbox and click **Submit**.\n\nAfter setup, add recipients via the gear icon on the integration card.\n\n---\n\n## Recipients\n\nEach recipient becomes a `notify` entity named `notify.line_bot_\u003crecipient_name\u003e`. Recipients can be individual LINE users or LINE groups.\n\n### Adding a user recipient\n\n1. Have the person **add your bot as a friend** in LINE (use the QR code or bot Basic ID from the LINE Developers Console).\n2. Have them **send any message** to the bot.\n3. In HA, go to the integration options (gear icon) and select **Add a recipient**. The person will appear in a dropdown automatically.\n4. Select them and enter a name to use in Home Assistant.\n\n### Adding a group recipient\n\n1. Add your bot to a LINE group.\n2. Have someone in the group **send any message**.\n3. In HA, go to the integration options (gear icon) and select **Add a recipient**. The group will appear in the dropdown.\n4. Select it and enter a name.\n\n### Recipient names\n\nWhen adding a recipient, two name fields are shown:\n\n- **Display name** - shown in the HA UI. Accepts any characters including emoji, Thai, Japanese, and other unicode. Defaults to the LINE display name.\n- **Entity name** (`recipient_name`) - used to generate the HA entity ID (`notify.line_bot_\u003crecipient_name\u003e`). Must contain only ASCII letters (a-z, A-Z), digits (0-9), spaces, hyphens, and underscores.\n\nThe integration suggests a safe entity name from the LINE display name automatically. Emoji are converted to their English name (e.g. 🤓 becomes \"nerd\"), Thai and Japanese characters are romanized, and ASCII characters are kept as-is. For example, `\"สวัสดี 🤓 David\"` suggests `\"swasdii_nerd_david\"`. You can override the suggestion with anything that meets the rules.\n\nNote: captured recipients survive HA restarts. If someone messages your bot before you open the options flow, they will still appear in the dropdown after a restart.\n\n---\n\n## Sending Messages\n\nThere are two ways to send messages.\n\n### Standard notify service\n\nUse `notify.send_message` for simple text messages and title. This is the standard HA notify interface and works with any automation.\n\n```yaml\naction: notify.send_message\ntarget:\n  entity_id: notify.line_bot_david\ndata:\n  message: \"Front door opened\"\n  title: \"Security Alert\"\n```\n\n### Custom send service\n\nUse `line_ha_bot.send_message` for the full feature set: images, audio, video, stickers, locations, flex cards, button and confirm templates, and reply tokens. The `entity_id` goes in `data`, not `target`.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  message: \"Front door opened\"\n```\n\nMultiple recipients can be targeted in a single call:\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id:\n    - notify.line_bot_david\n    - notify.line_bot_gretel\n  message: \"Dinner is ready\"\n```\n\n### Text and title\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  title: \"Security Alert\"\n  message: \"Motion detected in the garden\"\n```\n\n### Image\n\nThe image URL must be publicly accessible via HTTPS.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  message: \"Camera snapshot\"\n  image_url: \"https://example.com/snapshot.jpg\"\n```\n\n### Audio\n\nAudio must be in M4A format and accessible via HTTPS. `audio_duration` is in milliseconds and is used by LINE as a cosmetic label on the message.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  audio_url: \"https://example.com/alert.m4a\"\n  audio_duration: 3000\n```\n\n### Video\n\n`video_preview_url` should point to a JPEG or PNG thumbnail image.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  video_url: \"https://example.com/clip.mp4\"\n  video_preview_url: \"https://example.com/clip-thumb.jpg\"\n```\n\n### Sticker\n\nLINE sticker package and sticker IDs can be found in the [LINE sticker list](https://developers.line.biz/en/docs/messaging-api/sticker-list/).\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  message: \"Done!\"\n  sticker_package_id: \"1\"\n  sticker_id: \"1\"\n```\n\n### Location\n\n`location_title` and `location_address` are optional. If `message` is omitted, only the location is sent.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  location_title: \"Home\"\n  location_address: \"123 Main St, Seattle\"\n  location_latitude: 13.7563\n  location_longitude: 100.5018\n```\n\n### Flex message\n\nPass the raw LINE flex message JSON as `flex_message` (the `contents` object). `flex_alt_text` is the fallback text shown in notifications on devices that do not support flex. If a `message` is also provided, it is sent as a text message before the flex card.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  flex_alt_text: \"Motion alert\"\n  flex_message:\n    type: bubble\n    body:\n      type: box\n      layout: vertical\n      contents:\n        - type: text\n          text: Motion detected\n          weight: bold\n          size: xl\n```\n\nSee the [LINE Flex Message documentation](https://developers.line.biz/en/docs/messaging-api/flex-message-overview/) for the full schema.\n\n### Button template\n\nSupports up to 4 buttons. Each button needs `label`, `action` (`message`, `postback`, or `uri`), and `data` (text sent, postback data string, or URL). `flex_alt_text` is used as the template fallback text. `image_url` sets a thumbnail at the top. `template_default_url` opens a URL when the user taps the card body.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  message: \"Choose an action\"\n  template_type: buttons\n  template_title: \"Home Control\"\n  flex_alt_text: \"Home Control\"\n  buttons:\n    - label: \"Lock door\"\n      action: postback\n      data: \"lock=true\"\n    - label: \"Unlock door\"\n      action: postback\n      data: \"lock=false\"\n    - label: \"Camera\"\n      action: uri\n      data: \"https://example.com/camera\"\n```\n\n### Confirm template\n\nRequires exactly 2 buttons. Useful for Yes/No decisions sent to LINE.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  message: \"Motion detected. Turn on the lights?\"\n  template_type: confirm\n  flex_alt_text: \"Motion alert\"\n  buttons:\n    - label: \"Yes\"\n      action: postback\n      data: \"lights=on\"\n    - label: \"No\"\n      action: postback\n      data: \"lights=off\"\n```\n\n### Reply token\n\nWhen responding to an incoming message within 30 seconds, use the `reply_token` from the `line_bot_message_received` event. This uses LINE's free Reply API instead of the paid Push API.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: \"{{ trigger.event.data.entity_id }}\"\n  message: \"Got your message!\"\n  reply_token: \"{{ trigger.event.data.reply_token }}\"\n```\n\nReply tokens expire after 30 seconds and can only be used once. After expiry, omit `reply_token` to fall back to the Push API.\n\n### Quick replies\n\nQuick reply chips appear above the LINE keyboard after any message and disappear once tapped. They work with all message types. Each chip needs `label`, `action` (`message`, `postback`, or `uri`), and `data`.\n\n```yaml\naction: line_ha_bot.send_message\ndata:\n  entity_id: notify.line_bot_david\n  message: \"Motion detected. What would you like to do?\"\n  quick_replies:\n    - label: \"Turn on lights\"\n      action: postback\n      data: \"lights=on\"\n    - label: \"Ignore\"\n      action: postback\n      data: \"lights=ignore\"\n    - label: \"View camera\"\n      action: uri\n      data: \"https://example.com/camera\"\n```\n\n---\n\n## Incoming Messages\n\nWhen a known recipient or group member sends a message to your bot, HA fires a `line_bot_message_received` event.\n\n### line_bot_message_received event\n\n```yaml\nevent_type: line_bot_message_received\ndata:\n  type: text               # message type: text, image, audio, video, file, sticker, location, postback\n  user_id: \"Uabc123...\"   # LINE user ID of the sender\n  group_id: null           # LINE group ID, or null for direct messages\n  entity_id: notify.line_bot_david  # HA entity ID of the matched recipient\n  recipient_name: david    # HA name of the matched recipient\n  display_name: \"David\"   # LINE display name of the recipient\n  message_text: \"hello\"   # message text, or null for non-text types\n  message_id: \"12345\"     # LINE message ID\n  content_url: \"https://api-data.line.me/v2/bot/message/12345/content\"  # for image/audio/video, null otherwise\n  postback_data: null      # postback data string for postback events, null otherwise\n  reply_token: \"abc...\"   # use within 30 seconds for a free reply, null for postbacks from old events\n  timestamp: 1774855568   # Unix timestamp of the event\n```\n\n### Responding to messages\n\nUse the `entity_id` field from the event to reply without hardcoding the recipient:\n\n```yaml\ntriggers:\n  - trigger: event\n    event_type: line_bot_message_received\n    event_data:\n      type: text\nactions:\n  - action: line_ha_bot.send_message\n    data:\n      entity_id: \"{{ trigger.event.data.entity_id }}\"\n      message: \"You said: {{ trigger.event.data.message_text }}\"\n      reply_token: \"{{ trigger.event.data.reply_token }}\"\n```\n\n### Postback events\n\nWhen a user taps a postback button or quick reply with `action: postback`, a `line_bot_message_received` event fires with `type: postback` and the `postback_data` string you defined on the button. Note that postback events from older messages do not carry a `reply_token`. Use `event_data` on the trigger to filter for specific postback values:\n\n```yaml\ntriggers:\n  - trigger: event\n    event_type: line_bot_message_received\n    event_data:\n      type: postback\n      postback_data: \"lights=on\"\nactions:\n  - action: light.turn_on\n    target:\n      entity_id: light.living_room\n```\n\n---\n\n## Send Error Events\n\nWhen a send fails for any reason, HA fires a `line_bot_send_failed` event. You can use this to alert yourself via another channel, retry, or log the failure.\n\n```yaml\nevent_type: line_bot_send_failed\ndata:\n  entity_id: notify.line_bot_david\n  recipient_name: david\n  error_type: connection_error   # token_invalid, bad_request, reply_token_expired, http_error, connection_error\n  error_message: \"Cannot connect to host api.line.me:443...\"\n  http_status: null              # HTTP status code, or null for connection errors\n  timestamp: 1774855568\n```\n\nExample automation to notify on failure:\n\n```yaml\ntriggers:\n  - trigger: event\n    event_type: line_bot_send_failed\nactions:\n  - action: notify.persistent_notification\n    data:\n      title: \"LINE Bot send failed\"\n      message: \"{{ trigger.event.data.error_message }}\"\n```\n\n---\n\n## Group Chats\n\nGroups are added as recipients the same way as individual users. Any message sent to the group fires `line_bot_message_received`. The `group_id` field in the event identifies which group the message came from, and `user_id` identifies which member sent it.\n\nFor dedicated HA groups (e.g. a private group with just your household), all messages fire the event. For larger groups, filter by `message_text` content in your automation conditions.\n\nSending to a group uses the same `line_ha_bot.send_message` service with the group's `notify` entity ID.\n\n---\n\n## Quota Sensors\n\nTwo sensors are created automatically, polling LINE's API once per hour:\n\n- `sensor.line_bot_monthly_message_limit` - your plan's monthly message limit, with `plan_type` as an attribute.\n- `sensor.line_bot_monthly_message_consumption` - messages sent so far this month, with `remaining` as a calculated attribute.\n\nUse these in automations or dashboards to monitor usage and avoid hitting your quota unexpectedly.\n\n---\n\n## Options\n\nClick the gear icon on the integration card to access:\n\n- **Add a recipient** - Webhook-based capture flow for users and groups.\n- **Remove a recipient** - Select a recipient to delete.\n- **Update credentials** - Replace the Channel Access Token and/or Channel Secret.\n\n---\n\n## Troubleshooting\n\n### Webhook Verify returns 404\n\nThe webhook view is not registered yet. Make sure the integration is installed and HA has been restarted before clicking Verify.\n\n### Webhook Verify returns 400 or 403\n\nThis is unlikely to be caused by a wrong Channel Secret - LINE's Verify button sends a request with an empty events array, which bypasses signature verification entirely. A 400 or 403 response typically means the webhook URL is malformed or the integration is not running correctly. Check the HA logs for details, ensure the integration is loaded, and verify the URL was copied exactly from the setup screen.\n\n### No message received in the add recipient spinner\n\nMake sure the person has added your bot as a friend in LINE and sent it a message, or that the group has your bot as a member and someone has sent a message. The webhook URL in the LINE Developers Console must be set correctly and **Use webhook** must be enabled.\n\n### Token invalid or revoked error in logs\n\nYour Channel Access Token has expired or been revoked. Go to the integration options (gear icon) and select **Update credentials** to enter a new one.\n\n### Group messages are not triggering automations\n\nMake sure the group has been added as a recipient via the options flow. The bot must be a member of the group and someone must have sent a message to it to trigger the capture flow.\n\n### send_message fails with \"reply token expired\"\n\nReply tokens are valid for 30 seconds from when the original message was received. If your automation takes longer than that to run, omit `reply_token` and the service will fall back to the Push API.\n\n### Enabling debug logging\n\nAdd the following to `configuration.yaml`:\n\n```yaml\nlogger:\n  default: warning\n  logs:\n    custom_components.line_ha_bot: debug\n```\n\n---\n\n## Message Quota\n\nThe free monthly message limit varies by country and plan. Check your LINE Official Account plan for the exact limit. Each recipient counts as one message per send call, regardless of how many message objects are in the payload (text plus image is still one message). Reply API messages are free and do not count against the quota.\n\nMonitor your usage with the [quota sensors](#quota-sensors).\n\nFor details, see [LINE Messaging API pricing](https://developers.line.biz/en/docs/messaging-api/pricing/).\n\n---\n\n## License\n\nMIT. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfox38%2Fline_ha_bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsfox38%2Fline_ha_bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsfox38%2Fline_ha_bot/lists"}