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.
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:
new Oro\Bundle\HangoutsCallBundle\OroHangoutsCallBundle() to app/AppKernel.php::registerBundles().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
Resources/config/oro/actions.yml — the button/action definition (entity scope, group, template, conditions). This is where 90% of customization happens.Resources/config/oro/bundles.yml — confirms registration/priority.Resources/views/ — the Twig template for the button; this is where the URL is rendered.DependencyInjection/ and Resources/config/services.yml — the service(s) that build the Hangouts URL; useful if you want to reuse the link generation elsewhere.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.
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.
oro/platform, symfony/*). If you must use it, pin it to an old branch or fork and fix the dependency constraints.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.bundles.yml (or AppKernel). Higher-priority bundles override views with the same path.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.How can I help you explore Laravel packages today?