{"adoption": {"forks": 560, "observed_at": "2026-08-28T04:07:56.713931+00:00", "stars": 3334}, "canonical_url": "https://ross.abutalabs.com/products/easy-sms", "card": {"archived": false, "artifact_type": "library", "description": "📲 一款多渠道的短信发送轮子", "domain": ["messaging-platforms", "apis", "backend"], "enriched": true, "function": ["sdk", "http-client", "developer-tools"], "health_score": 85, "homepage": null, "language": "PHP", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["overtrue/easy-sms"], "name": "overtrue/easy-sms", "platform": ["php", "cross-platform"], "pushed_at": "2026-05-07T13:51:24+00:00", "repo": "overtrue/easy-sms", "stars": 3334, "tags": ["sms", "sms-gateway", "sms-client", "multi-gateway", "failover-strategy", "chinese-sms-providers", "notification", "composer-package", "messaging"], "topics": ["sms", "sms-gateway", "sms-client", "php-sms"], "urls": [], "use_cases": ["send sms verification codes from a php application", "send text messages through multiple sms providers with one api", "failover between sms gateways when one provider is down", "integrate aliyun or tencent cloud sms into a php project", "unify sms sending code across different chinese sms vendors", "add sms notifications to a laravel or php web app"], "what_it_is": "A PHP library that provides a unified API for sending SMS messages through dozens of Chinese and international SMS gateway providers (Alibaba Cloud, Tencent Cloud, Yunpian, SendCloud, Huawei Cloud, and many more). It supports configurable gateway strategies such as ordered or round-robin failover, so a message is automatically retried across providers until one succeeds.", "when_to_avoid": ["you need to send SMS from a non-PHP stack", "you only use a single international provider like Twilio and want a direct SDK", "you need two-way SMS, voice calls, or rich messaging rather than simple SMS sending", "your runtime must be older than PHP 8.4"], "when_to_choose": ["your PHP application needs to send SMS via Chinese SMS providers", "you want a single consistent API across many SMS gateways", "you need automatic failover or round-robin across multiple SMS providers", "you want uniform return values for logging and monitoring of SMS sends"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/easy-sms", "repo": "overtrue/easy-sms", "role": "main", "score": 74}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "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:07:56.713931+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:56.713931+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:41:27.788133+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97797b5a758127216dbb96af9ac8230142f116353d6fc8becd34a9a8babbb5b8", "fetched_at": "2026-08-28T04:07:56.713931+00:00", "kind": "readme", "missing": false, "url": "https://github.com/overtrue/easy-sms"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 81, "longevity": 100, "rhythm": 50}, "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": 3464, "days_push": 118, "days_rel": 258, "gap_med": 89, "n_releases_24m": 4}, "score": 74, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}