{"adoption": {"forks": 337, "observed_at": "2026-08-28T04:08:41.188757+00:00", "stars": 4280}, "canonical_url": "https://ross.abutalabs.com/products/bottender", "card": {"archived": false, "artifact_type": "framework", "description": "⚡️ A framework for building conversational user interfaces.", "domain": ["chatbots", "messaging-platforms", "web-development"], "enriched": true, "function": ["chatbot", "web-framework", "routing", "middleware", "state-management"], "health_score": 20, "homepage": "https://bottender.js.org", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["Yoctol/bottender"], "name": "Yoctol/bottender", "platform": ["cross-platform"], "pushed_at": "2024-04-10T13:31:04+00:00", "repo": "Yoctol/bottender", "stars": 4280, "tags": ["messenger", "line", "slack", "telegram", "viber", "conversational-ui", "typescript", "multi-channel", "automation", "nodejs", "web-server"], "topics": ["messaging", "messenger", "line", "slack", "telegram", "bot", "chatbot", "framework", "viber"], "urls": [], "use_cases": ["build a chatbot for Facebook Messenger", "create a LINE bot in Node.js", "build a multi-channel bot that works on Slack and Telegram", "handle webhook setup and signature verification for messaging platforms", "manage conversation state and routing for a chatbot", "prototype a bot locally in console mode before deploying", "send messages and replies to users on Viber"], "what_it_is": "Bottender is a TypeScript/Node.js framework for building conversational user interfaces (chatbots) across multiple messaging channels including Messenger, LINE, Slack, Telegram, and Viber. It provides a declarative, router-based approach to handling conversation events and states, built on top of the Messaging APIs library.", "when_to_avoid": ["you need an actively developed framework with frequent updates", "you want AI/LLM-driven agents rather than rule-based conversational flows", "you need channels not supported (e.g., WhatsApp, Discord)", "you prefer a low-level SDK for a single messaging platform"], "when_to_choose": ["you need one codebase serving multiple messaging platforms", "you want a declarative, router-style structure for conversation flows", "you want built-in webhook handling, session, and state management", "you are building production chatbots in Node.js or TypeScript"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bottender", "repo": "Yoctol/bottender", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:41.188757+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:21:58.329986+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c5d717d2fa801154bdd841e337fa6e3c9e21f1908020ddcb100d4cae6569a6f4", "fetched_at": "2026-08-28T04:08:41.188757+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Yoctol/bottender"}, {"content_hash": "3099f5890881bcdcb0fb0bea948e25a989a10d7b21feb1b612ce8944c5b8eeed", "fetched_at": "2026-08-29T09:11:47.655963+00:00", "kind": "homepage", "missing": false, "url": "https://bottender.js.org"}, {"content_hash": "12fea94b641304ad2806a5c975a4dec1689311270058baa8d32680fc48333ff7", "fetched_at": "2026-08-29T09:11:47.658764+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs"}, {"content_hash": "2e80445612beb005b0786d2e2c049e391dd05ac35935a7909e178c1dad6f3a37", "fetched_at": "2026-08-29T09:11:47.660558+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/api-context"}, {"content_hash": "deec0ff9e45be09427ab26985a5de0f6ddaeb87c6c206454b0ef17062d9df26e", "fetched_at": "2026-08-29T09:11:47.662116+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.4"}, {"content_hash": "708649cf267a663de8e392f92a23a6143f39aa10670db6913fe8934c40d3d2c4", "fetched_at": "2026-08-29T09:11:47.663871+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.1"}, {"content_hash": "778babf68282db9377cb2223e66d266b399273c744ded39c9f78d49c75170f19", "fetched_at": "2026-08-29T09:11:47.665656+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.3.0"}, {"content_hash": "8b5b751a3ff5ccf7d35d6093a05f86907f3fedaa809f476053bfecc1a83c36a5", "fetched_at": "2026-08-29T09:11:47.667249+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.2.0"}, {"content_hash": "e052653a678ebaa348d06e926193b511db355b97f55bd99d4531d2868e0f7731", "fetched_at": "2026-08-29T09:11:47.669423+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.1.0"}, {"content_hash": "9250287924a1a418700f102e0b854cfffbae246c7369e7278ad700bda6646d00", "fetched_at": "2026-08-29T09:11:47.671021+00:00", "kind": "site_page", "missing": false, "url": "https://bottender.js.org/docs/1.0.5"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3243, "days_push": 875, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}