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

Crm Hangouts Call Bundle Laravel Package

oro/crm-hangouts-call-bundle

Oro CRM Hangouts Call Bundle integrates Google Hangouts calling into Oro CRM, letting users start calls from contact and account records and log call activity in the CRM timeline for faster, context-aware follow-ups.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — still zero, and the 1.0.0 tag does not change it. The new release notes describe an extension that "allows you to call customers directly from the CRM via Google Hangouts," with buttons rendered next to email and phone fields in the contact/customer view and a "Log call" dialog in OroCRM. That is a description of Oro UI behaviour, which confirms rather than revises the core finding: oro/crm-hangouts-call-bundle is a Symfony 2.x bundle for OroCRM/OroPlatform, not a Laravel package. There is no Laravel service provider, no facade, no framework-agnostic API. Its controllers, templates, and ActivityManager/EntityManager wiring assume Oro's DI container, ACL voters, and bundle registration (Resources/config/oro/bundles.yml). Architecture fit with a Laravel codebase remains effectively zero; the only reusable asset is a reference implementation of the interaction pattern and OAuth consent flow.

What actually changed in 1.0.0 — a version label, not a modernisation. A jump to 1.0.0 on a package whose prior release was 2016-02-15 reads as a semver/metadata artifact (tag normalisation, Packagist re-index, or a maintainer housekeeping commit) rather than renewed investment. The release notes contain no PHP version bump, no Symfony constraint change, no dependency refresh, and no changelog of code changes. Treat "new major version" as unverified until a diff of the tag against the previous release shows substantive commits. The practical reading: the code is still ~2016-era, now wearing a 1.0 badge.

Integration feasibility — unchanged (low as-is, moderate only as a port), but the surface that must be replaced just got wider. The release notes reveal the bundle does two distinct jobs, each with its own dead dependency:

  1. Video/voice-over-email Hangouts — the classic Google Hangouts API, deprecated 2017 and shut down. Dead.
  2. PSTN dialing to phone numbers, billed against a Google Wallet balance, free for US/Canada and charged elsewhere, with the call refusing to start on insufficient balance. This routes through the classic Hangouts dialer surface, which Google also retired. Dead, and additionally dependent on a billing product (Google Wallet in that context) that no longer exists in that form.

So the bundle is now confirmed as a two-legged integration where both legs point at retired Google products. The platform coupling is also more explicit than before: the value is hover-button placement in Oro's contact view plus auto-populated call duration written back to the CRM record. None of that has meaning in Laravel without rebuilding models, migrations, and UI.

Technical risk — high, and the false-positive risk has measurably increased. Previously the danger was a team burning weeks getting 2016 code to run before discovering the API was dead. A 1.0.0 release note now provides exactly the wrong signal: it looks mature, it reads like a feature description, and it may survive a package-triage review that screens on "has recent release." The dominant risk is a stakeholder asking "why not just use this — it's at 1.0 now?" The answer is that the release note describes UI behaviour against a shut-down API, and version number is not evidence of maintenance.

Key questions (revised)

  • Which job is actually required — "start a video call from a contact record," "place an outbound PSTN call to a customer's phone number," or "auto-log call activity to the timeline"? The release notes cover all three, and they now map to three different vendors, not one API.
  • Is outbound telephony to non-US/Canada numbers in scope? The bundle charged these against a wallet balance. If yes, this is a Twilio/telephony-provider requirement, not a Meet requirement, and materially changes scope and cost.
  • Is the organization on Google Workspace, and do we already have OAuth consent / service-account infrastructure?
  • What is the recording and consent posture? The bundle opens a notes dialog during the call and stores number, timestamp, and duration. Storing call metadata against a contact is a personal-data processing decision that needs a documented basis regardless of which vendor we pick.
  • Is OroCRM in the estate at all, or is this being evaluated purely because it appeared in a package scan?
  • Would Calendar API conferenceData (auto-generated Meet link) plus a manual "log call" action satisfy the majority of the requirement at a fraction of the effort?

Integration Approach

Stack fit — none directly; selective salvage only. Target stack assumptions (Laravel 10/11, PHP 8.2+, Composer 2, Symfony 6/7 transitive deps) remain incompatible with the bundle's pinned legacy dependencies. The 1.0.0 tag gives no reason to expect otherwise. Run the dependency-conflict spike first to produce written evidence for stakeholders rather than a debate.

What to salvage — now a slightly richer reference than before. Treat the repository as documentation, not a dependency. Read it for:

  • The OAuth2 authorization and token-refresh pattern against Google, including the first-use permission-request flow described in the notes.
  • The UI interaction pattern: hover-revealed action button adjacent to email/phone, grouped with Send Email and Log Call. This is a genuinely good affordance worth copying.
  • The logging loop: dialog opens when the call starts so notes can be captured live, and date/time, dialled number/email, and duration are written back automatically on completion. This is the part of the requirement most likely to be underestimated — design the CallRecord schema around it.
  • How call records were associated to CRM entities, to inform our polymorphic association.

Migration path (recommended, revised for two possible jobs). Do not attempt to install or shim the bundle.

  • If the job is video meetings: google/apiclient + Calendar API conferenceData (or Meet REST API) to create a meeting and return a join link. One vendor, one OAuth flow.
  • If the job is outbound PSTN calling: this is a separate decision. Evaluate Twilio Voice or equivalent, with per-minute costs modelled explicitly and a budget owner named. Do not assume the Google path covers it.
  • Common to both: OAuth credentials stored per user (or a service account for workspace-wide behaviour) using Laravel's encrypted casting and an existing Socialite/Google provider; a Meeting/CallRecord Eloquent model with polymorphic association and a cascade policy; a queued job for creation/retrieval and webhook or polling for status; Blade/Livewire or Inertia UI matching existing patterns.

Compatibility checks to run before committing

  • Diff the 1.0.0 tag against the prior release to confirm whether any code actually changed; attach the result to the triage record.
  • Composer why-not against the current lockfile to document the conflict.
  • Compare PHP and Symfony constraints in the bundle's composer.json against ours.
  • Confirm whether oro/platform and oro/crm are installable at all under PHP 8 — if not, the "run it inside Oro" path is also closed.

Sequencing

  1. Discovery (1 week): resolve the two-jobs question — video meetings vs. PSTN dialing vs. both — and confirm Google Workspace availability and consent model.
  2. Spike (2–3 days): standalone script that creates a Meet link via Calendar API with our credentials. If telephony is in scope, a parallel half-day Twilio call spike.
  3. Decision gate: if the video spike works, the legacy bundle is irrelevant and can be archived as reference. Blockers from here on are Google API access or telephony cost, not the bundle.
  4. Build (2–4 weeks for video; add 2–3 weeks if telephony is in scope).
  5. Retire: record the decision and add the package to a do-not-adopt list, explicitly noting that a 1.0.0 tag was raised and did not reflect modernisation — so the next reviewer does not re-open it.

Operational Impact

Maintenance — total cost of ownership is a rewrite, so budget for it. No maintenance posture makes this bundle a net saving. Inside Oro it means owning a Symfony 2.x application against a retired integration; inside Laravel it means owning a port. The 2016-era pin means no security backports for its transitive dependencies (legacy Guzzle, Symfony, Doctrine), a supply-chain exposure even if the code never executes. The 1.0.0 tag should not be read as a maintenance commitment; there is no evidence of one.

Support. No active maintainers, minimal stars, zero dependents, and no evidence of recent issue activity. Vendor support should be assumed unavailable until confirmed in writing with Oro. The release note is feature prose, not support documentation — it does not describe deprecation, migration, or known limitations. Internal bus factor is effectively 1 and that person has not been hired.

Scaling. The bundle is a config/UI/controller layer and is not itself a scaling concern. The real surfaces are:

  • Google: Calendar API per-project and per-user quotas, OAuth token refresh contention, Meet link creation rate. Queue creation, cache tokens per user, handle 429 with exponential backoff, instrument quota consumption from day one.
  • Telephony, if in scope: concurrent call limits, per-minute spend, and number provisioning lead time. These are contractual and financial constraints, not just technical ones, and must be sized before build.

For high call volume (thousands/day), design for batching and idempotency keys so retries do not create duplicate meetings or duplicate charges.

Failure modes (ranked by likelihood, updated)

  1. Always-fails: Hangouts API shut down — every call attempt errors. Now confirmed across both legs (Hangouts messaging/video and PSTN dialing via wallet balance).
  2. Composer resolution failure on install into a modern Laravel app.
  3. Class-not-found / container errors from Oro services absent at runtime.
  4. Billing refusal on paid PSTN destinations — the notes state the call will not start on insufficient balance. In a rebuilt integration this becomes an unowned-cost failure mode: who tops up, and what happens at zero.
  5. OAuth token revocation or consent-screen/scope changes in Google Workspace policy.
  6. Quota exhaustion (429s) under load if a native build is not queued.
  7. Silent data drift: call records orphaned if the associated CRM entity is deleted without a cascade policy.
  8. Consent and retention gap: call metadata and free-text notes stored against a contact without a documented retention rule.

Each is a "detect and alert" candidate; none is recoverable by configuration. Build the native integration with a daily credential health check, a telephony-balance check if applicable, and surface both in existing monitoring.

Ramp-up. For the legacy bundle: high effort, low transferable value (Symfony 2 + Oro internals are not reusable skills). For a native build: low-to-moderate for the Meet path — the Calendar/Meet APIs are well documented and the OAuth pattern is familiar. The telephony path adds vendor onboarding and billing setup, which is calendar time rather than engineering time. Recommend a one-day spike, not a training plan.

Recommendation. Do not adopt. Archive as a reference implementation — and note that the 1.0.0 release is a version label that does not alter the underlying code's age, framework, or integration target. Confirm the underlying requirement (video meetings, outbound PSTN, or activity logging), then build a small native integration in Laravel against a live Google API and, if needed, a telephony vendor. The bundle's durable value is as a triage case study: "recent release" and "major version bump" must be validated against actual commits and dependency changes before they are allowed to offset old last-commit dates, low stars, and zero dependents.

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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator