To broaden the reach of your Business Messages agents, you can add conversation entry points on your websites with the Business Messages widget.
The Business Messages widget only supports mobile devices with Android 5+. Other mobile operating systems and desktop environments aren't supported.
Add a Business Messages widget to a website
To enable conversations from a website, you load the Business Messages JavaScript library, configure widget placement on the page, and specify context values within the widget.
For a list of availability functions, properties, and events, see Business Messages widget. See the Business Messages widget style guide for recommendations in styling and use.
Create a widget
Update the following values to create a Business Messages widget to insert into your website.
Value | Description |
---|---|
LAYOUT | How the button appears on
your website. Can be button , floating , inline , or advanced . To
use your own styles, use advanced , copy the stylesheet to your webpage,
and modify as required. |
AGENT_ID | Your Agent ID. |
BUTTON_TEXT | The text you'd like the button to display. |
<script crossorigin="use-credentials" src="https://businessmessages.google.com/widget/v2/js"></script>
Example widget
This widget is generated by the following code:
<script crossorigin="use-credentials" src="https://businessmessages.google.com/widget/v2/js"></script>
Customizing the Business Messages widget integration
Load the JavaScript library
To load the Business Messages JavaScript library, copy the following code and
paste it immediately within the <head>
tag on every page where you want to
display a Business Messages widget. You need only one JavaScript library
inclusion per page.
<!-- Global Business Messages widget library reference - Business Messages -->
<script crossorigin="use-credentials" src="https://businessmessages.google.com/widget/v2/js?cb=callback">
</script>
The snippet downloads and loads the JavaScript library, which initializes
existing page elements with a data-bm-widget-agent-id
attribute. The
JavaScript library converts the identified page elements into clickable elements
that load the Business Messages conversational surface when tapped.
The optional cb
parameter contains the name of a function that is
automatically called once the JavaScript library loads.
Configure widget placement
When the Business Messages JavaScript library loads, it scans the website for
elements with a data-bm-widget-agent-id
attribute and converts these elements
into tappable Business Messages widgets. Every element you want to be converted
to a widget must include a data-bm-widget-agent-id
attribute with a value
corresponding to the agent ID for your launched agent.
Example: Widget definitions
<!-- Example div element that converts into a Business Messages widget -->
<div data-bm-widget-agent-id="myagentid">
Click for Business Messages
</div>
<!-- Example button element that converts into a Business Messages widget -->
<button data-bm-widget-agent-id="myagentid">
Click for Business Messages
</button>
Pass context values
To configure widget context and pass it to your webhook, include the optional
data-bm-widget-context
attribute in the HTML element that contains the
data-bm-widget-agent-id
attribute. Specify a string value for
data-bm-widget-context
. Messages sent to your webhook include the context
value.
data-bm-widget-context
can have any value, such as a value
relevant to where the widget is shown at runtime on the page. In the following
examples, the attribute value of
"eyJwcm9kdWN0IjoiZHJ5ZXIiLCJvZmZlci1jb2RlIjoiQVNEQURTQSJ9Cg==" is a
base64-encoded JSON string of {"product":"dryer","offer-code":"ASDADSA"}
.
data-bm-widget-context
has a limit of 512 bytes.
Example: Widget definitions with context
<!-- Example div element that converts into a Business Messages widget -->
<div
data-bm-widget-agent-id="myagentid"
data-bm-widget-context="eyJwcm9kdWN0IjoiZHJ5ZXIiLCJvZmZlci1jb2RlIjoiQVNEQURTQSJ9Cg==">
Click for Business Messages
</div>
<!-- Example button element that converts into a Business Messages widget -->
<button
data-bm-widget-agent-id="myagentid"
data-bm-widget-context="eyJwcm9kdWN0IjoiZHJ5ZXIiLCJvZmZlci1jb2RlIjoiQVNEQURTQSJ9Cg==">
Click for Business Messages
</button>
Sample website
The following sample loads the Business Messages JavaScript library within the
<head>
tag, which then automatically scans the HTML page and converts
"myagentid" into Business Messages widgets.
<html>
<head>
<script
crossorigin="use-credentials" src="https://businessmessages.google.com/widget/v2/js">
</script>
</head>
<body>
This is a test widget:
<div
data-bm-widget-agent-id="myagentid"
data-bm-widget-context="eyJwcm9kdWN0IjoiZHJ5ZXIiLCJvZmZlci1jb2RlIjoiQVNEQURTQSJ9Cg==">
Click for Business Messages
</div>
Click it.
And this is a widget:
<button
data-bm-widget-agent-id="myagentid"
data-bm-widget-context="VGhpcyBpcyBhIGJ1dHRvbiB0ZXN0Lgo=">
Click for Business Messages
</button>
</body>
</html>
Programmatic widget initialization
For fine-grained control over your setup, you may choose to initialize your
widget programmatically. To programmatically initialize an element, call
bmwidget.init
after the Business Messages JavaScript library loads. This form of
initialization doesn't require you to mark elements with the
data-bm-widget-agent-id
attribute.
<head> <!-- Global Business Messages widget library reference - Business Messages --> <script crossorigin="use-credentials" src="https://businessmessages.google.com/widget/v2/js?cb=initWidget"> </script> <script type="text/javascript"> // Convert HTML element with ID = myCustomButton into a Business Messages widget function initWidget() { window.bmwidget.init(document.getElementById('myCustomButton'), { 'agentId': 'myagentid', 'context': 'eyJwcm9kdWN0IjoiZHJ5ZXIiLCJvZmZlci1jb2RlIjoiQVNEQURTQSJ9Cg==' }); }; </script> </head>
Check device support
Use
window.bmwidget.supported
to verify Business Messages support for a device. The following sample checks
for device support prior to initializing the HTML element with ID
"myCustomButton" as a Business Messages widget.
<head> <!-- Global Business Messages widget library reference - Business Messages --> <script crossorigin="use-credentials" src="https://businessmessages.google.com/widget/v2/js?cb=initWidget"> </script> <script type="text/javascript"> // Convert HTML element with ID = myCustomButton into a Business Messages widget function initWidget() { // Check that the user has a supported device if (window.bmwidget.supported) { window.bmwidget.init(document.getElementById('myCustomButton'), { 'agentId': 'myagentid', 'context': 'eyJwcm9kdWN0IjoiZHJ5ZXIiLCJvZmZlci1jb2RlIjoiQVNEQURTQSJ9Cg==' }); } }; </script> </head>
Widget initialization for Single Page Applications
For Single Page Applications applications, where the data-bm-widget-agent-id
attribute is created at runtime, the Business Messages JavaScript library
exposes a global object window.bmwidget
.
Whenever a new element is added to the page, call
window.bmwidget.scan()
to initialize the new element as a Business Messages widget.
window.bmwidget.scan();
Call window.bmwidget.scan()
on the DOM update callback to ensure the
data-bm-widget-agent-id
attribute re-initializes when the page changes its state.
Angular Example
The following code initializes window.bmwidget.scan()
during the component loading
callback in Angular.
import { Component, OnInit} from '@angular/core'; export class AppComponent implements onInit { ngOnInit() { // Initialize tag on re-render window.bmwidget.scan(); } }
React Example
The following code initializes the window.bmwidget.scan()
function during the
rendering of an element in React.
import React, { useState, useEffect } from 'react'; function WrapperComponent() { ... useEffect(() => { // Initialize on re-render window.bmwidget.scan(); }); return (<div><button data-bm-widget-agent-id="myagentid">Chat with us</button></div>); }
Next steps
Now that you've integrated a Business Messages widget with your website, you can begin Business Messages conversations from your website and receive widget-specific context values in messages from users.