Belco Javascript API
Loading the Belco JavaScript library gives you access to the Belco Javascript object, which allows you to interact with the widget.
Initialize the widget
// Belco will automatically initialize when there's
// a global defined 'belcoConfig' variable
window.belcoConfig = {
shopId: 'your-shop-id'
}
// Manually initialize the widget by omitting
// the 'belcoConfig' global variable.
// This can be usefull if you want to load
// some custom data with Javascript for example.
Belco.load(function() {
var config = {
shopId: 'your-shop-id'
}
var customer = Belco.customer()
if (customer && customer.email) {
config.customUrl = 'https://shopbackend.com/customers?search=' + customer.email
}
Belco.init(config)
})
Get the visitor id
Belco.anonymousId()
// Sync with Google Analytics
Belco.once('ready', function() {
analytics.once('ready', function () {
try {
analytics.setAnonymousId(Belco.anonymousId());
} catch (e) { console.error(e) }
});
})
Opening the main Belco window.
Belco.open()
Opening other windows.
Supported actions are chat
, call
, callback
.
Belco.open(action, [options])
// Open a specific conversation.
Belco.open('chat', {conversationId: 'uYgrWNqqaw2GybxH9'})
// Start new conversation about 'Product X' with a specific agent.
Belco.open('chat', {
userId: 'uYgrWNqqaw2GybxH9',
subject: 'Product X'
})
// Start a new conversation with tags.
Belco.open('chat', {tags: ['pricing']})
Closing the widget
Belco.close()
Toggle the widget
Belco.toggle()
Custom action buttons
If you want to control the widget with custom links or buttons, you can use the following html attribute to open specific windows.
Supported options are chat
, call
, callback
.
<a href="#" data-belco-action="chat">Chat with us</a>
Event listeners
Currently we support the following events:
ready
, open
, close
, started-conversation
, placed-call
, requested-callback
, status-changed
, cobrowse-session-started
, cobrowse-session-ended
Add an event listener
Belco.on('event-name', function onEventName() {})
// Or trigger once
Belco.once('event-name', function onEventName() {})
// Trigger when chat status changes
Belco.on('status-changed', function onStatuschanged(e) {
if (e.status === 'online') {
// chat is online
} else {
// chat is offline
}
})
Remove an event listener
Belco.off('event-name', function onEventName() {});
Tracking events
When tracking events it's important to run the track call after the init method, other wise events might not get tracked.
Belco.load(function() {
var config = {
shopId: '[your shopid]'
}
Belco.init(config)
Belco.track('Order Completed', {
'orderId': '1234',
'date': '2021-01-01T00:00:00Z',
'total': 10.00,
'status': 'completed'
})
})
Send a message on behalf of the visitor
In case you want to automatically send out an message to Belco you can do this by using the sendMessage
function.
Sending out a message without a conversationId
field would always initialize a new conversation.
In order to get the conversationId to continue the message you can call the getConversationId
function, this would return a undefined on a non-existing conversation, or an id when there is an active chat happening in the browser session.
Belco.sendMessage(options, [callback]);
Belco.getConversationId();
Belco.sendMessage({
conversationId: 'id_of_conversation', // optional
firstName: 'First name', // optional
lastName: 'Last name', // optional
email: '[email protected]', // optional
tags: ['tag'], // Conversation tags, optional
subject: 'Subject of the conversation', // optional
message: 'The message'
}, function(err, conversationId) {
if (err) {
console.error(err)
} else {
// this Id can be used in the next call, or get it through getConversationId() method
console.log(conversationId)
}
});
Example submitting a contact form using jQuery
<div id="contact">
<form action="/" id="contact-form">
<input name="department" type="radio" value="Sales" required />
<input name="department" type="radio" value="Returns" required />
<input name="firstName" type="text" required />
<input name="lastName" type="text" required />
<input name="email" type="email" required />
<input name="subject" type="text" required />
<textarea name="message" required></textarea>
<button type="submit">Submit</button>
</form>
</div>
<script>
jQuery(function($) {
var $form = $('#contact-form')
$form.on('submit', function(e) {
e.preventDefault()
Belco.sendMessage({
firstName: $form.find('[name="firstName"]').val(),
lastName: $form.find('[name="lastName"]').val(),
email: $form.find('[name="email"]').val(),
tags: [$form.find('[name="department"]').val()],
subject: $form.find('[name="subject"]').val(),
message: $form.find('[name="message"]').val()
}, function(err, result) {
if (err) {
alert(err)
} else {
$('#contact').html('<div class="success">Thanks! We received your message and we will contact you shortly.</div>')
}
})
})
})
</script>
Example of submitting a new conversation through callbacks
This is for when you want to send out a new conversation and send a second message directly.
Belco.sendMessage({
firstName: 'John',
lastName: 'Doe',
email: '[email protected]',
message: 'Hello I want to get in contact',
}, function (err, conversationId) {
if (err) {
alert(err)
} else {
// here you use the conversationId from the callback to sendout a second message.
Belco.sendMessage({
conversationId,
message: 'could you please send me an email?'
})
Belco.sendMessage({
conversationId,
message: 'Thanks :D'
})
}
}
Example of submitting to a existing conversation, or as backup a new one.
In this flow you can add messages on behave of the visitor on an existing conversation, or a new one if none was initialized.
let conversationId = Belco.getConversationId(); // this could be undefined or a string of an id.
Belco.sendMessage({
conversationId,
message: "Form answer A'
})
// some other code in between waiting for the second click
// Check if the previous conversationId was undefined,
// and update it to the current conversationId
if (conversationId === undefined) {
conversationId = Belco.getConversationId();
}
// send out the second message
Belco.sendMessage({
conversationId,
message: "second answer B'
})
// or you can also do the following format, calling getConversationId() on every call.
Belco.sendMessage({
conversationId: Belco.getConversationId(),
message: "this message would trigger a message on a new conversation or existing one if there is any"
})
Get the ID of the conversation
Sometimes you want to do more with the data and in case you want to extract the conversationId from your webpage, you can use the getConversationId
function.
This can be used as a input for the belco api or sending additional messages on behave of the visitor.
/**
* Get the conversation Id:
* null = no active conversation in the current session
* 'randomId' = the current Id of the conversation.
**/
Belco.getConversationId();
Connecting visitors to Google Analytics
Belco.once('ready', function() {
analytics.once('ready', function () {
analytics.setAnonymousId(Belco.anonymousId());
});
})
Updated about 2 years ago