Skip to main content

$response

This object is used for filling in system responses.

$response.replies is a list of responses made while processing chatbot reactions. It is an array containing strictly typed elements and utilized in order to transfer chatbot replies to platform-specific chat adapters, such as Telegram, Google Assistant, etc.

replies supports objects of the following types:

  • text is a regular text response. Every element of this type is printed out as a separate message. The tts parameter should contain the same text with special markup rendered by speech synthesis systems. The markup parameter determines text formatting style.
{
"type": "text",
"text": "....",
"tts": "....",
"markup": "html|markdown|plain"
}

  • buttons — renders a regular button.
{
"type": "buttons",
"buttons": [
{
"text": "button" // All the remaining attributes will be directly passed on to the messenger.
}
]
}
  • inlineButtons — renders an inline button. If a url attribute is present, then the specified link will be opened upon pressing the button.
{
"type": "inlineButtons",
"buttons": [
{
"text": "button",
"url": "https://example.com"
}
]
}
  • image — renders an image.
{
"type": "image",
"imageUrl": "http://..."
}
  • raw — is used for passing on methods specific to a particular channel. The mandatory body parameter contains the response body transferred into the chat system. Parameters used for user identification are set up automatically.
{
"type": "raw",
"body": {...},
"method": "sendMessage"
}
  • switch — switches the dialog from the bot to a customer service agent.
{
"type": "switch",
"firstMessage": "...",
"closeChatPhrases": ["..."],
"ignoreOffline":true|false,
"oneTimeMessage": true|false
}
  • location — prints out geographic coordinates. Its attributes are lat and lon.
{
"type": "location",
"lat": 59.934280,
"lon": 30.335099
}
  • timeout — makes a transition to a specified state if the user gives no response.
{
"type": "timeout",
"interval": 10,
"targetState": "/timedout"
}
  • dtmf — is a DTMF message signal (containing figures and characters typed on a touch-tone keypad). Intended for calls only.
$response.replies.push({type:"dtmf"});
  • hangup — cuts off the call. Intended for calls only.
$response.replies.push({type:"hangup"});
  • htmlResponse — is used to output the visual component for the skills created using the Interactive Canvas.
{
"type": "htmlResponse",
"updatedState": "some",
"suppressMic": true|false,
"url": "appUrl"
}

How to use

  • Image rendering.
script:
$response.replies.push({
type: "image",
imageUrl: "https://testimageurl.jpg",
text: "Image" // This field is optional.
});
  • GIF rendering.
$response.replies = $response.replies || [];
$response.replies.push({
"type": "raw",
"body":
{
"animation": "https://www.catgifpage.com/gifs/318.gif"
},
"method": "sendAnimation"
});
  • Switching to a customer service agent.
$response.replies = $response.replies || [];
$response.replies .push({
type:"switch",
phoneNumber:74155,
closeChatPhrases: catchAll.closeChatPhrases,
firstMessage: $client.history,
destination: catchAll.operatorGroup,
});
  • Changing the reply in the post-process if the bot tries to give the same reply for the third time in a row.
init:
bind("postProcess", function(){
var $session = $jsapi.context().session;
var $response = $jsapi.context().response;
var answer = $response.replies ? $response.replies.reduce (function (answers, current) {
answers += " " + current.text;
return answers;
}, "") : "";
if ($session.lastAnswer && (answer == $session.lastAnswer)) {
$session.answerRepetition = $session.answerRepetition || 0;
$session.answerRepetition += 1;
} else {
$session.answerRepetition = 0;
}
if ($session.answerRepetition == 2) {
$response.replies = [{
"type": "text",
"text": "We are going in circles. Could you ask me something else?"
}];
}
$session.lastAnswer = answer;
});