Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Whatsapp Laravel Package

sevenspan/laravel-whatsapp

A Laravel package for WhatsApp integration. Send text, media, and template messages through a simple fluent API, configure credentials in Laravel, and connect with notifications and webhooks. Streamlines WhatsApp Cloud API messaging for Laravel apps.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. sevenspan/laravel-whatsapp remains a conventional Laravel package — service provider, auto-discovery, publishable config, env credentials, facade over the WhatsApp Business Cloud API. It still slots into our stack with near-zero friction and still does not own inbound webhooks, template lifecycle governance, message-status callbacks, opt-in state, or per-tenant routing. v1.3.1 does not appear to change that boundary; "dynamic component" support is a payload-construction convenience inside the existing outbound call path, not a new architectural surface.

Integration feasibility. Still high and still misleadingly cheap: Composer install, vendor:publish, env vars, facade call. v1.3.1 does not alter the effort estimate. The constraint check (composer.json PHP/Laravel caps, hard-coded Graph API version) remains the correct first gate and remains a five-minute pass/fail.

Technical risk. This is the section v1.3.1 materially affects, and the movement is small and ambiguous.

  • Archived status — now contradicted, not resolved. The prior assessment asserted the repository was read-only as of 2023-12-14. A v1.3.1 release means either the repository was unarchived or the archive claim was wrong. Do not treat "a release exists" as "the project is maintained." One patch release after a multi-year dormancy is a heartbeat, not a cadence. The operative question is unchanged: is there a maintainer with a commitment, or was this a one-off? Verify archived flag, release date, and commit history between the last known release and v1.3.1.
  • Release-notes quality is itself a risk signal. The entire changelog is one line: "Support of dynamic component." No Graph API version statement, no dependency bumps, no security notes, no breaking-change disclosure, no linked PR or diff. A patch-level bump (1.3.1) nominally implies no breaking changes, but semver discipline in a 15-star package is not a guarantee. Assume nothing; read the diff.
  • API version drift — the dominant risk, unaddressed. Nothing in this release suggests the hard-coded Graph API version was updated. If it is still pinned to a 2023-era version, the integration may fail outright (retired version) rather than degrade. This remains the single highest-severity item and v1.3.1 does not retire it.
  • "Dynamic component" is under-specified and needs interpretation. Most plausibly it lets callers assemble WhatsApp template components (header/body parameters, buttons, possibly dynamic URL or copy-code buttons) at call time instead of a fixed shape. If so, this is a genuine improvement — it is the first evidence that the package touches the template message path, which is the only message type permitted outside the 24-hour customer service window. That partly answers former key question 2. But a one-line note does not tell us whether it builds valid Cloud API component objects, whether it validates parameter counts against the approved template, or whether it merely passes an array through. Treat as "unverified partial template support," not "template management."
  • Bus factor / adoption signal — unchanged. 15 stars, 0 dependents. A single release does not create a community, an issue history to mine, or an upstream contribution path. Low opportunity score still corroborates the market's judgement.
  • Net effect on risk posture. Slightly improved in perception (the project is not demonstrably dead), essentially unchanged in substance (no version-drift fix, no dependency maintenance evidenced, no support commitment). Do not let a patch release move this out of the "fork, don't depend" bucket.

Key questions — revised.

  1. Is the repository archived today, and what is the actual publication date of v1.3.1?
  2. What is the diff between the prior release and v1.3.1? Is the change additive only?
  3. Did the Graph API version string change in this release? If not, which version is hard-coded and is it still live?
  4. What exactly does "dynamic component" mean — a typed builder for template components, a raw pass-through array, or button-type support (dynamic URL / copy code / flow)?
  5. Does it validate component parameters against the approved template before sending, or fail at Meta's discretion?
  6. Were composer.json PHP/Laravel constraints or transitive dependencies bumped, and do they intersect our runtime?
  7. Does it expose Meta's structured error payloads (error code, subcode, fbtrace_id), or still swallow them behind a generic exception?
  8. Any retry/backoff, or still a bare synchronous HTTP call?
  9. Multi-phone-number-ID / multi-tenant support, or single global config?
  10. Is there a test suite, and does it mock the HTTP layer — including coverage for the new component path?

Integration Approach

Stack fit. Unchanged: native Laravel, framework fit essentially guaranteed; the binding constraint remains the PHP/Laravel version matrix, not the architecture. v1.3.1 does not alter the matrix question — if anything, a new release is a prompt to re-check constraints rather than assume they moved forward.

Migration path — fork, don't depend. Still the recommendation, now at v1..3.1. MIT licensing still makes this trivial. Vendor the source behind our own WhatsAppClient interface, own the Graph API version string, own the upgrade cadence, retain a one-file swap to Twilio / 360dialog / Infobip / a maintained Laravel package. The new release does not change this calculus — it only changes which commit we fork. Two additions:

  • Fork v1.3.1 only after reading the diff; if the component change is a thin pass-through, cherry-pick the idea rather than the code.
  • Record the forked tag and date in our own changelog so we can distinguish "our divergence" from "upstream movement" later.

Compatibility. Unchanged: verify auto-discovery against config:cache and inside a queued worker, not just Tinker. Assume synchronous Guzzle/HTTP-facade calls; the package will not be queue-aware, and "dynamic component" support does not imply async, batching, or rate-limit awareness.

Sequencing. Largely unchanged, with step 1 tightened and a new step inserted:

  1. Constraint + provenance check — archived flag, v1.3.1 release date, diff vs. prior release, PHP/Laravel constraints, hard-coded Graph API version vs. current Meta docs. Gate: pass/fail.
  2. Sandbox proof of concept — one test WABA, one approved template message (not just free-form text, since that is the path the new feature touches), send + receive a status callback. Confirms whether "dynamic component" produces valid Cloud API payloads and what the error surface looks like.
  3. Gap analysis — inbound webhook controller + signature verification, template registry and approval state, opt-in/opt-out, delivery-status persistence, retry policy.
  4. Fork and wrap — vendor v1.3.1 (or its component logic), extract an internal interface, pin and document the Graph API version explicitly.
  5. Harden — queue all sends, exponential backoff on 429/5xx, structured logging with WAMID correlation, alerting on error rate and quality-rating drops.
  6. Production — one use case, one template, canary volume, then expand.

Steps 1–2 remain a hard time-boxed spike; the expected outcome is still "reference implementation, not dependency."

Operational Impact

Maintenance. Still effectively 100% internal. v1.3.1 does not constitute a maintenance commitment — there is no published cadence, no stated support window, and no evidence of dependency or Graph API version upkeep. Budget remains: CVE triage on transitive dependencies, recurring Graph API version migrations, reconciliation against Meta documentation changes. The single genuine delta is that the archive date can no longer be used as a clean handover marker, which makes ownership slightly murkier — do not let "it's alive again" become a reason to defer naming an owner. If no team will own it, do not adopt it in any form.

Support. No upstream support, no maintainer SLA, no community forum. A one-line release note is not a support channel. Escalation remains internal engineering plus Meta developer documentation and business support. Second-order risk unchanged and still dominant: WABA verification, display-name approval, template rejections, quality-rating downgrades, and messaging-limit tiers are account-level problems the package cannot help with, and they remain the most common cause of production incidents here.

Scaling. Unchanged. Package overhead is negligible; the ceiling is Meta's. Throughput is governed by messaging-limit tiers tied to phone-number quality rating and per-number rate limits. Consequences: (a) all sends queued with rate limiting and backoff — synchronous fan-out will exhaust limits and block request threads; (b) capacity planning is a business process (warm the number, hold quality rating, get templates approved), not an infrastructure one. Multi-tenant scaling still requires per-tenant credential and phone-number isolation the single-config design likely does not model. Note that broader template/component support increases the surface where template approval state matters, which pushes more governance work onto us, not less.

Failure modes to instrument for.

  • Hard failure on Graph API version retirement — silent until the first send, then total. Still the top item; v1.3.1 does not evidence a fix.
  • Silent regression from the new component path — a pass-through component builder can emit malformed payloads that fail only at Meta, with the failure surfacing as a generic error. Test this explicitly in the spike.
  • Token expiry — system-user vs. 24-hour tokens; 401s that no retry recovers.
  • Template rejection or pause — fails at Meta's discretion; must be surfaced, not swallowed.
  • 24-hour window violations — free-form messages outside the customer service window are rejected; the package will not enforce this, so business logic must.
  • Swallowed errors — a thin wrapper returning a boolean or generic exception destroys observability; verify whether the new code path preserves Meta's structured error payload.
  • Maintenance illusion — a single release after dormancy creates false confidence in upstream responsiveness. Treat as at-risk until a second release lands on a stated cadence.
  • Missing inbound path — without webhooks and status callbacks, delivery is unverifiable and opt-out compliance unenforceable.

Ramp-up. Developer ramp-up remains trivial — hours, given Laravel familiarity; the new feature adds no meaningful learning cost beyond reading its diff. Organizational ramp-up remains the real schedule driver: WABA verification, display-name and template approval cycles (days, with rejection loops), opt-in consent capture, per-region messaging policy. Plan the project around those lead times, not around the Composer install.

Recommendation. Unchanged in direction, marginally easier to justify. Adopt the pattern, not the dependency: use v1.3.1 as the reference implementation for the Cloud API surface, fork under MIT behind an internal interface, and pin the Graph API version ourselves. The release is mildly good news — the project is not conclusively abandoned, and template-component handling is now at least partially addressed — but it does not resolve API version drift, dependency maintenance, or the absence of an upstream commitment. The deciding variable remains whether we have a named owner for a permanently self-maintained integration.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin