In this article, we describe the variables and values generated with every chat conversation and made available for use in Connections and Webhooks.
Every conversation in the Certainly Platform happens between an end user and a chatbot. Certainly tries to collect some metadata about these two actors (end user and bot) by adding variables in a list that also has other conversational details. These variables are very helpful when used for driving the conversation to a different path based on the values returned.
Below, we'll cover:
- Conversational Metadata
- Webhook Execution Metadata
- Multi-language translation
- Channel-specific Metadata
- Zendesk widget switch extension
- Use cases
- Additional considerations
Conversational Metadata
Conversational Variables are generated during conversation time and provided for all channels.
You cannot use them directly in the bot's messages; that is, [[certainly.reply]] will not work. However, you can assign them to another Custom Variable and use that in the bot's messages.
Variable | Description |
{{certainly.lastName}} | Only available in the FB channel |
{{certainly.replyData}} | Validated Response in a Collector Module |
{{certainly.sessionId}} | Unique ID for the conversation |
{{certainly.direction}} | Always "in" for now; "in" if it's a message from a user to the bot, and "out" if it's a message from the bot to a user. |
{{certainly.reply}} | Raw user response |
{{certainly.extractedData|tojson}} | JSON with previously validated responses |
{{certainly.botId}} | Bot UUID |
{{certainly.botDeploymentId}} | Bot deployment UUID |
{{certainly.firstName}} | Only available in FB channel |
{{certainly.customVariables|tojson}} | Previously generated Custom Variables |
{{certainly.moduleId}} | Module ID where the WH is triggered |
{{certainly.to}} | Channel ID |
{{certainly.from}} | Bot User External ID |
{{certainly.botTrainedModelId}} | The UUID string for the AI Model key |
{{certainly.attachedMedia}} | Empty value for now |
{{nlu}} |
Stores detailed information about Intents, entities, and languages recognized: {'intents': ['name': '1434-Hello', 'confidence': 0.38... }
|
Webhook Execution Metadata
Webhook Variables are available in the bot right after the execution of any webhook.
Variable | Example value | Description |
{{wh.status}} | 200 | HTTP status. Numbers other than 200 indicate an error. |
{{wh.name}} | Get Product List | Last executed Webhook's name |
{{wh.response}} | {"status": "OK",....} | JSON object or string |
Multi-language translation
When the bot is configured to translate all its and users messages, the user_language Custom variable controls what language to translate the bot message to and from what language to translate the user message. Read more about Multi-language translation in this article.
Variable | Example value | Description |
{{user_language}} | da | Two letters language code like da, es, fr, etc. |
Channel-specific Metadata
Channel-specific metadata consists of variables provided by each of the respective channels offered in the Certainly Platform.
Certainly Widget (WebChat) Metadata
Only available when the conversation is taking place on the Certainly Widget.
Variable | Example value | Description |
{{web.host}} | certainly.io | The domain part of the website address where the widget was run from |
{{web.hostPageUrl}} | https://certainly.io/about | Full address, including page name of the website where the widget was run from |
Zendesk Chat Metadata
Only available when the conversation is taking place via the Zendesk Chat (Legacy) Web Widget.
Variable | Example value | Description |
{{zd.current_device_type}} | desktop | |
{{zd.current_city}} | Copenhagen | User's city |
{{zd.current_tags}} | null | |
{{zd.current_ip}} | 123.45.67.89 | |
{{zd.page_title}} | Simulate Visitor on Zendesk Chat | |
{{zd.external_id}} | null | |
{{zd.current_country}} | Denmark | User's country |
{{zd.notes}} | null | |
{{zd.current_user_agent}} | Mozilla/5.0... | Browser's ID |
{{zd.page_url}} | https://www.zopim.com | |
{{zd.visitor_id}} | 1234567.abcdefghijlmn | |
{{zd.current_region}} | Copenhagen | |
{{zd.current_department}} | Bot_Department | |
{{zd.current_platform}} | Linux | |
{{zd.visitor_email}} | user@email.com | |
{{zd.display_name}} | John Doe |
Sunshine Conversations and Zendesk Messaging
Certainly exposes metadata related to the ongoing Sunshine Conversations session via object {{sc}}. This conversation may take place on any of the channels supported by Sunshine Conversations, or Zendesk Messaging.
Variable | Example value | Description |
{{sc.appId}} | 5f324eb1acf330000c177713 | The Sunshine Conversations appId associated with the ongoing conversation. |
{{sc.switchboardId}} | 4235dsf4tre55 | The Sunshine Conversations switchboardId associated with the ongoing conversation. |
{{sc.conversation}} |
{
|
A nested object which features the id of the conversation, metadata about the conversation, the user associated with the ongoing conversation, and the object of the last message sent by the user. |
{{sc.conversation.id}} | 65733d483f8e3e50a57a42c0 | The conversation id generated by Sunshine Conversations. Refer to the official Sunshine Conversations REST API Documentation for more details. |
{{sc.conversation.metadata}} |
{
|
The custom Sunshine Conversations metadata linked to the ongoing conversation. |
{{sc.conversation.user}} |
{
|
The Sunshine Conversations object for the user linked to the ongoing conversation, including user-specific metadata. Refer to the official Sunshine Conversations REST API Documentation for more details. |
{{sc.conversation.last_message}} |
{
|
The Sunshine Conversations object for the last message sent by the user in the ongoing conversation, including message-specific metadata. Refer to the official Sunshine Conversations REST API Documentation for more details. |
Here is an example of the content of the sc
variable:
{
"appId": "63ee01a83f8aa50119111111",
"conversation": {
"id": "66bc8ecea4581c4a3d111111",
"type": "personal",
"user": {
"id": "66bc8ecea4581c4a3d111111",
"metadata": null,
"externalId": "",
"displayName": "Web User 66bc8ecea4581c4a3111111"
},
"metadata": null,
"last_message": {
"id": "66bc8ed1ada7d93980a111111",
"source": {
"type": "web",
"device": {
"id": "66bc8ecea4581c4a3d8111111",
"guid": "fab40f51cb2341b4b27ecc2a47111111",
"info": {
"URL": "static.zdassets.com",
"city": "Dublin",
"state": "Leinster",
"vendor": "zendesk",
"country": "Ireland",
"referrer": "https://mydomain.zendesk.com/",
"ipAddress": "3.255.27.111",
"stateCode": "L",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
"currentUrl": "https://static.zdassets.com/admin/contributor/admin_center_framework_web_widget/d56339864e1f97f3b0ab72e9cbeda34911111/e7d54baed37b06d7a525edcca61111f.html#key=66dca387-9072-4c5a-8eab-8b8511111&instructions=Save+your+changes+to+see+them+here.+They+may+take+a+moment+to+appear.&dir=ltr&locale=en-us&hasCustomLauncher=false&customLauncherOpen=Open+Web+Widget&title=Certainly",
"sdkVersion": "0.1",
"countryCode": "IE",
"currentTitle": "Certainly",
"browserLanguage": "en-US"
},
"type": "web",
"status": "active",
"clientId": "66bc8ecea4581c4a3d1111",
"lastSeen": "2024-08-14T11:02:41.412Z",
"integrationId": "6464101f0e984d5e111111"
},
"integrationId": "6464101f0e984d5e7011111"
}
}
},
"switchboardId": "66bc57a5717ed013e59111111"
}
Previously, Sunshine Conversations metadata was accessible via reserved variable {{ss}}. This is set to be deprecated in Q2, 2024. The table below is for reference only, please refer to the {{sc}} object above for your implementations.
Variable | Example value | Description |
{{ss.metadata}} | JSON Object | |
{{ss.user.id}} | 28a4e32b6cccb6132bf79902 | |
{{ss.appId}} | 610c40fe3b505500d3cf8a71 | |
{{ss.userId}} | 28a4e32b6cccb6132bf79901 | |
{{ss.avatarUrl}} | https://www.gravatar.com/avatar... | |
{{ss.displayName}} | John Doe | |
{{ss.integrationId}} | 61116f45bcdb7300d4ead262 | |
{{ss.conversationId}} | 0b7f0b63bd166dab2ce17162 | |
{{ss.currentMessageId}} | 614b807521f91400d34babf3 |
Facebook Metadata
Variable | Example value | Description |
{{fb.first_name}} | John | FB user's first name |
{{fb.last_name}} | Doe | FB user's last name |
{{fb.gender}} | male | FB user's gender |
{{fb.locale}} | en_US | FB user's language preference |
{{fb.profile_pic}} | https://platform-lookaside.fbsbx.com/ | FB user's photo |
{{fb.id}} | 2034502059904829 | FB user's ID |
The best way to benefit from including these values in your Webhooks is to use Jinja2 templating code. We intend to support Jinja2 in all areas of the Certainly Platform, so you might find it useful to get a headstart on using this powerful resource in your Webhooks.
Explore many other examples of using the Jinja code.
Zendesk widget switch extension
This is mostly used for live chat. The extension allows you easily switch from the Certainly widget to Zendesk widget for live chat.
Learn more about handing conversations to Zendesk Chat by switching widgets.
Variable |
Example value |
Description |
{{visitor_name}} |
"John Doe" |
Name that will appear as a user name in Zendesk Chat |
{{visitor_email}} |
"john@email.com" |
Email address to match the user record in Zendesk |
{{zendesk}} | "start_chat" | When assigned "start_chat" triggers switchover to the Zendesk widget |
{{zendesk_department}} | "Support" | Zendesk department name to transfer the chat to |
{{zendesk_tags}} | "order_status, on-hold" | Comma-separated list of tags that will be assigned to the corresponding Zendesk ticket |
Use cases
In this section, we'll address the following use cases:
Search filtering params (in URL)
If you want your bot to be able to retrieve a certain product list based on search criteria passed in a product_query variable, you can easily include the end user response in the query params of your Webhook URL, as displayed in the image below:
Form submission
If your bot needs to fetch information from the end user instead of a form submission, the POST body of that form submission may have some empty values for which you may define some fallback values. In cases such as these, we advise you to refer to the syntax used below.
Fallbacks
In scenarios where you need to insert a fallback value, you have several options available:
{{ variableName or "fallback" }}
or
{{ variableName1 or variableName2 or "fallback" }}
or
{{ variableName |default('fallback') }}
Jinja2 is exceptionally flexible, so please refer to the Jinja2 documentation if you want to explore the different kinds of possibilities it offers.
Additional considerations
CVars override Reserved Variables of the same name
If there is a Webhook that generates a Custom Variable (CVar) with the same name as one of the Reserved Variables, it will override the default Reserved Variable. CVars will always take priority over the default conversational metadata elements.
Jinja2 code used for Reserved Variables and CVars