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

Getting Started

What this bundle actually does (read this first). oro/crm-hangouts-call-bundle is a small OroCRM 1.x-era add-on that surfaces a "Google Hangouts" call action on CRM records — typically a button/link that opens a Hangouts call URL using an email address stored on the record. There is no SDK, OAuth handshake, telephony, or call recording. It is a UI action that builds and opens a URL. Treat it as a convenience integration, not a communications platform.

Minimal install

composer require oro/crm-hangouts-call-bundle

Then register the bundle the way your Oro version expects:

  • OroCRM 1.x / early 2.x: add new Oro\Bundle\HangoutsCallBundle\OroHangoutsCallBundle() to app/AppKernel.php::registerBundles().
  • Newer Oro (bundle auto-discovery): confirm Resources/config/oro/bundles.yml exists in the package so the platform registers it, then run:
php app/console cache:clear
# or on newer versions
php bin/console cache:clear

If you have a multi-app setup, also run php app/console oro:platform:update or at least clear the prod cache — Oro caches actions.yml and route/action metadata aggressively.

Where to look first

  1. Resources/config/oro/actions.yml — the button/action definition (entity scope, group, template, conditions). This is where 90% of customization happens.
  2. Resources/config/oro/bundles.yml — confirms registration/priority.
  3. Resources/views/ — the Twig template for the button; this is where the URL is rendered.
  4. DependencyInjection/ and Resources/config/services.yml — the service(s) that build the Hangouts URL; useful if you want to reuse the link generation elsewhere.
  5. If the bundle registers an activity type, check Resources/config/oro/entity.yml and any Entity/ or Model/ classes.

First use case. Open a Contact (or Lead — check actions.yml for the exact entity list) that has an email address. You should see a Hangouts call button in the page header or the "Call" action group. Click it: the browser should open a Google Hangouts call URL pre-populated with the record's email. If the button doesn't appear, the record has no email (see Gotchas), or the action is scoped to a different entity.


Implementation Patterns

1. Default "call from the record" flow. The intended pattern is simply: user opens a Contact/Lead detail page → clicks the Hangouts action → Hangouts opens in a new tab with the contact's email. No server-side call state, no callback. If your team's workflow is "click, talk, then manually log a call activity," this fits, but the logging is on you.

2. Scoping and placing the action. In actions.yml you can typically control:

  • entities / for_all_datatypes — which entities show the button (Contact only vs. Contact + Lead + Account).
  • group_name and button_options — where it appears (e.g., in the "Call" group next to Phone).
  • template — which Twig file renders the button.

Example shape (verify against the bundle's actual file before copying):

operations:
  hangouts_call:
    label: oro.hangouts_call.action.label
    entities:
      - Oro\Bundle\ContactBundle\Entity\Contact
      - Oro\Bundle\SalesBundle\Entity\Lead
    routes:
      - oro_contact_view
      - oro_lead_view
    groups:
      - call
    template: OroHangoutsCallBundle:Call:button.html.twig

3. Conditional visibility (only when there's an email). Use Oro action conditions/preconditions rather than shipping a button that fails silently. A common approach is a precondition on the record's email field (e.g., @not_empty on primaryEmail or a custom condition service). If the bundle doesn't already do this, add it — it's the single biggest UX improvement.

4. Reusing the link builder in your own code. The bundle's value is really the URL construction. Pull the relevant service from the container (inspect with php app/console debug:container | grep -i hangouts) and use it from a custom controller, a Twig extension, or a workflow step. This lets you add the button to custom pages without duplicating URL logic.

$url = $this->get('oro_hangouts_call.link_builder')
    ->buildForEmail($contact->getPrimaryEmail());
return $this->redirect($url);

5. Pairing with call-activity logging. Since the bundle only opens a URL, a common pattern is to wrap it: add a small controller or a JavaScript handler that (a) records an Activity of type "call" via Oro's activity manager and (b) redirects/opens the Hangouts URL. This gives you the "call logged in CRM timeline" behavior users expect.

$activityManager = $this->get('oro_activity.manager');
$activityManager->createActivity('call', $contact, [
    'subject' => 'Hangouts call',
    'owner'  => $this->getUser(),
]);

6. Template override for branding/behavior. To change the button icon, label, or to add a confirmation modal, copy Resources/views/.../button.html.twig into your own bundle at the same path and give your bundle higher priority in Resources/config/oro/bundles.yml. Avoid editing the vendor file directly.

7. Extension point: swap the provider. If you're modernizing, the cleanest pattern is to keep the action/button UX and replace the URL builder service with one that emits Google Meet, Zoom, or Teams links. Decorate the existing service with a compiler pass rather than forking the bundle.


Gotchas and Tips

  • It is effectively abandoned. Last release was February 2016; it targets OroCRM 1.x / Symfony 2.x and will not install cleanly on modern Oro (4.x/5.x/6.x, Symfony 4/5/6). Expect Composer conflicts (oro/platform, symfony/*). If you must use it, pin it to an old branch or fork and fix the dependency constraints.
  • Google Hangouts is gone. Consumer Hangouts was shut down in 2022 in favor of Google Chat/Meet. The generated URL may no longer start a call as intended. Test the exact URL the bundle produces before relying on it in production; in most greenfield cases, reimplementing the link (or pointing it at Meet) is cheaper than adopting this bundle.
  • No email = no useful button. The action depends on the record having an email. Contact records with multiple emails may use only the primary — verify which field the template resolves. Add a precondition to hide the button when empty rather than opening a broken URL.
  • Action metadata is cached hard. After editing actions.yml, always clear cache (dev + prod) and, if routes changed, run the platform update command. "My change didn't apply" is almost always a stale cache.
  • ACL is easy to miss. Oro action visibility and permissions are separate. A button can be visible to a user who can't view the underlying record data, or vice versa. Check the action's ACL/permission settings if you need role-based visibility.
  • Bundle priority matters for template overrides. If your override isn't winning, it's bundle load order in bundles.yml (or AppKernel). Higher-priority bundles override views with the same path.
  • It is just a link. Do not expect automatic call logging, call duration, recording, or an activity in the timeline. If stakeholders assume "Hangouts integration" means CRM-tracked calls, set expectations or build the logging wrapper described above.
  • No tests, no maintainer, 0 dependents. Don't build critical workflows on top of it without vendoring/forking into your own namespace. Keep the fork minimal and document the patch.
  • Debugging checklist: grep -R hangouts vendor/oro/crm-hangouts-call-bundle, debug:container for the link service, var/logs/ for Twig/action errors, and confirm the entity's email field name matches what the template expects.
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.
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
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums