{"adoption": {"forks": 138, "observed_at": "2026-08-28T04:05:03.494797+00:00", "stars": 1558}, "canonical_url": "https://ross.abutalabs.com/products/openilink-hub", "card": {"archived": false, "artifact_type": "application", "description": "开源微信 Bot 管理平台 + App 应用市场 | Self-hosted WeChat Bot Platform with App Marketplace | Lark · Slack · Discord · DingTalk · GitHub · Notion · 20+ Apps | AI Tools | 7 Language SDKs", "domain": ["chatbots", "messaging-platforms", "self-hosted", "artificial-intelligence", "developer-tools"], "enriched": true, "function": ["chatbot", "webhook", "websocket", "middleware", "self-hosted", "sdk", "chat-interface"], "health_score": 92, "homepage": "https://openilink.com", "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["openilink/openilink-hub"], "name": "openilink/openilink-hub", "platform": ["self-hosted", "go", "python", "php"], "pushed_at": "2026-06-18T17:22:25+00:00", "repo": "openilink/openilink-hub", "stars": 1558, "tags": ["wechat-bot", "ilink-protocol", "app-marketplace", "multi-bot-management", "message-relay", "ai-auto-reply", "message-tracing", "telegram-bridge", "lark", "slack", "discord", "dingtalk", "notion", "github-integration", "js-plugin-engine", "passkey-auth", "sqlite", "automation", "linux", "macos", "docker", "web-server", "nodejs"], "topics": ["chatbot", "wechat", "wechat-bot", "ai-chatbot", "bot-management", "golang", "react", "self-hosted", "webhook", "ai-tools", "app-marketplace", "dingtalk", "discord", "ilink", "lark", "notion", "slack"], "urls": [], "use_cases": ["relay wechat messages to telegram, slack, or lark", "build an ai auto-reply chatbot for wechat", "manage multiple wechat bots from a web console", "receive wechat messages via websocket or webhook in my app", "self-host a wechat bot platform with an app marketplace", "debug wechat bot message flows with tracing", "send images and files to wechat without handling cdn encryption"], "what_it_is": "OpeniLink Hub is a self-hosted, open-source message management platform and app marketplace for WeChat ClawBot (iLink protocol) bots, built in Go with a React web console. It provides multi-bot management, WebSocket/Webhook/AI message routing, message tracing, auto-renewal to prevent bot disconnection, and 7 language SDKs.", "when_to_avoid": ["you need a bot for a platform other than WeChat/iLink", "you require native Windows support (use Docker or WSL2 instead)", "your project cannot accept the legal ambiguity of an unofficial protocol implementation", "you need a fully production-guaranteed solution with official vendor backing"], "when_to_choose": ["you want to programmatically send/receive wechat messages via the official ClawBot iLink protocol without reverse engineering", "you need multi-bot management, message routing, and a web admin console in one self-hosted package", "you want to bridge wechat to other platforms like Telegram, Slack, or Lark", "you want zero-config deployment with built-in SQLite and one-line install"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/openilink-hub", "repo": "openilink/openilink-hub", "role": "main", "score": 73}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "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:05:03.494797+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:03.494797+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:29:55.053159+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bac4d964d5168fc9769656dd8df3664499b57a402d9317d6095110a7e1a6e777", "fetched_at": "2026-08-28T04:05:03.494797+00:00", "kind": "readme", "missing": false, "url": "https://github.com/openilink/openilink-hub"}, {"content_hash": "ac2ea0810df8829bfaeaf67a2b6312b52ba94d1c5be38758100925963b2761c7", "fetched_at": "2026-08-29T11:29:49.448484+00:00", "kind": "homepage", "missing": false, "url": "https://openilink.com"}, {"content_hash": "9d912284279501bd259407b1ba85de83049d0275b43257f4a3a45cd317c7a3f4", "fetched_at": "2026-08-29T11:29:49.451316+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs"}, {"content_hash": "e7643af4817fd045300e7710e4d09551724c4cf0313143a01c0d40a1ac19b0ff", "fetched_at": "2026-08-29T11:29:49.453112+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/hub/tracing"}, {"content_hash": "57d6ad407bbdc55f98a4c4bc79c9081811cd5159f70b8e6f9622cef73a337a8a", "fetched_at": "2026-08-29T11:29:49.455044+00:00", "kind": "site_page", "missing": false, "url": "https://openilink.com/docs/guide/use-cases"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 88, "longevity": 11, "rhythm": 89}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 164, "days_push": 76, "days_rel": 76, "gap_med": 0.0, "n_releases_24m": 43}, "score": 73, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}