SALESBOT

Getting Started with Salesbot

Salesbot is a bot that can be programmed to perform certain actions. It helps to receive data from users via messengers (Telegram, Facebook Messenger, Viber).

To get started, you need to connect the integration with chats in the left column of the Digital pipeline. Instructions for each of the messengers you will find in the settings window. After connecting the integration with the chat rooms, you can activate Salesbot to handle incoming new chats, and configure bots for certain statuses.

Connecting integration with chat rooms and configuring Salesbot for incoming calls to the Digital Pipeline

To configure Salesbot for incoming messages, click on the Salesbot label on the left side of the Digital pipeline.
Move the switch to the on position, and in the input field command or use one of the available workpieces.

Connecting integration with chat rooms and configuring Salesbot for incoming calls to the Digital Pipeline.

To configure Salesbot in statuses, click the add action button and in the window that opens, click the "Salesbot" button.
You can choose one of the conditions for the duration of the action, or specify an exact implementation date.
Attention! Leads in the status before the action in the Digital pipeline will be ignored.

Configuring Salesbot in the status in the Digital Pipeline

Salesbot in statuses can be written in the form of a regular message that will be sent to the user, or as a special code that will make the bot work more interactive and perform certain business tasks. Salesbot supports only special code for processing incoming messages.


Salesbot language

The management language of Salesbot is a structured JSON object with specific keys.
The example below will ask the question "Inform, please, your telephone number and e-mail" and put the tag of the Salesbot lead.
After the user responds, he will validate the data and reply with one of the specified messages. For more information about presets, see the next section.

Example:
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "show",
  6.                 "params": {
  7.                     "type": "text",
  8.                     "value": "Please tell your phone number and e-mail"
  9.                 }
  10.             },
  11.             {
  12.                 "handler": "action",
  13.                 "params": {
  14.                     "name": "set_tag",
  15.                     "params": {
  16.                         "type": 2,
  17.                         "value": "salesbot"
  18.                     }
  19.                 }
  20.             }
  21.         ],
  22.         "answer": [
  23.             {
  24.                 "handler": "preset",
  25.                 "params": {
  26.                     "name": "contacts.validate_base_info",
  27.                     "params": {
  28.                         "empty_email": "Please send your e-mail",
  29.                         "empty_phone": "Please send your phone number",
  30.                         "invalid_phone": "It seems to us that the phone number is incorrect",
  31.                         "success": "Thank you",
  32.                         "empty_all": "Please send your phone number and e-mail"
  33.                     }
  34.                 }
  35.             }
  36.         ]
  37.     }
  38. ]

The object must have a question or answer key.
The data in the question object is responsible for the actions that will occur when the message is sent to the user.
The data in the answer object is responsible for the actions that will occur when the user answers.

The question or answer key may be more than one. However, there is a limit on the size of JSON, no more than 64K.

The question or answer object must contain processing. The handler is an object with the keys handler and params.

Before adding a JSON object to the bot, check it for validity.
You can also get a valid object using PHP. You need to create an array of Salesbot, and then apply the function json_encode with the flags JSON_PRETTY_PRINT and JSON_UNESCAPED_UNICODE.

Example:
  1. <?php
  2. $bot_text = 'Hello World!';
  3. $salesbot = [
  4.     [
  5.         'question' => [
  6.             [
  7.                 'handler' => 'show',
  8.                 'params' => [
  9.                     'type' => 'text',
  10.                     'value' => $bot_text
  11.                 ]
  12.             ]
  13.         ],
  14.         'answer' => [
  15.             [
  16.                 'handler' => 'preset',
  17.                 'params' => [
  18.                     'name' => 'contacts.get_base_info',
  19.                 ]
  20.             ]
  21.         ]
  22.     ]
  23. ];
  24. echo json_encode($salesbot, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

The result of the code above will be a valid JSON object, ready for insertion into the Salesbot's Digital Pipeline.


The Salesbot Error Handler

If the message from the bot can not be delivered to the client, for example, when the client has blocked messages from this chat. The bot can handle the error, and execute any handlers.

Example
  1. {
  2.      "0":{
  3.         "question":[
  4.            ...
  5.         ],
  6.         "answer":[
  7.            ...
  8.         ]
  9.      },
  10.      "error":[
  11.         {
  12.            "handler":"action",
  13.            "params":{
  14.               "name":"change_status",
  15.               "params":{
  16.                  "value":142
  17.               }
  18.            }
  19.         }
  20.      ]
  21.   }

Salesbot Handlers

Code Description
show Sends a message with text
buttons Processing response received from buttons from instant messengers
action Action
meta Meta data processing
condition Condition
preset Processes data for a specific algorithm
goto Transition of the script to a certain step
find Search
filter Filtration
The show handler

Attention! This handler accepts an unparsed handler, in case it is configured in Salesbot's incoming orders.

The show handler sends a message or buttons to the chat with the client Any sent text currently supports the following markup elements:

  • {{contact.name}}, {{name}} - set the name of the contact

  • {{lead.id}} - Set lead id

  • {{origin}} - installation of the source of the lead (telegram,viber, facebook)

  • {{message_text}} - received client message in the response logic

  • {{lead.cf. # custom_field_id #}} - set the value of the custom lead field, instead of # custom_field_id # substitute the id of the additional field

  • {{contact.cf. # custom_field_id #}} - set the value of the custom field of the contact, instead of # custom_field_id # substitute the id of the additional field

  • {{rand}} - setting of a random string

  • {{message_text.email}} - setting up email, if it exists in a message from the client

  • {{message_text.phone}} - installation of the phone, if it exists in the message from the client

  • {{regexp./([ยง]+) things /}} - sets the value of the regular expression from the user's response. Substitute the value from the parentheses. Can be used in the answer block

  • {{lead.price}} - Set lead budget

  • {{current_date}} - setting the current date

  • {{short_rand}} - setting a short random string

  • {{lead.status_id}} - set status id

Parameters of the handler for sending text

Example:
  1. {
  2.   "handler": "show",
  3.   "params": {
  4.     "type": "text",
  5.     "value": "Please tell us your phone number and e-mail"
  6.   }
  7. }
Parameter Type Description
typetextSend text or buttons
valuestringText to be sent to the user

Parameters of the handler for sending buttons

Example
  1. {
  2.   "handler": "show",
  3.   "params": {
  4.     "type": "buttons",
  5.     "value": "Please choose the type of participation:",
  6.     "buttons": [
  7.       "Personal presence",
  8.       "Online"
  9.     ]
  10.   }
  11. }
Parameter Type Description
type button Send text or buttons
value string Text to be sent to the user (In Messenger, text longer than 80 characters will be truncated)
buttons array An array whose elements are the text of the buttons that will be sent
accept_unsorted bool Set to false if you do not need to parse the unresolved at the first response
The buttons handler

The button handler is intended for insertion into the logical block of the response and allows to process the response from the sent buttons or the answer by exact match

Example
  1. {
  2.   "handler": "buttons",
  3.   "params": [
  4.     {
  5.       "value": "Personal presence",
  6.       "params": [
  7.         {
  8.           "handler": "...",
  9.           "params": {...}
  10.         }
  11.       ]
  12.     },
  13.     {
  14.       "value": "Online",
  15.       "params": [
  16.         {
  17.           "handler": "...",
  18.           "params": {...}
  19.         }
  20.       ]
  21.     }
  22.   ]
  23. }

The buttons handler expects an array of objects to enter into parameters, in which any of the handlers specified on this page can be called

The goto handler

The goto handler allows you to go to the desired step in the script, for example, if you need to cycle through some actions. We draw your attention to the fact that the counting of the stages is carried out with 0.

Example
  1. {
  2.     "handler": "goto",
  3.     "params": {
  4.         "type": "question",
  5.         "step": 3
  6.     }
  7. }
Parameter Type Description
type string In which block the transition will be made. Possible values of "question" and "answer"
step int On which step of the bot the transition will be made
The find handler

The find handler lets you find the entity and use its data. If an element is found, you can use the {{founded_id}}

Example
  1. {
  2.   "handler": "find",
  3.   "params": {
  4.     "type": "contact_double",
  5.     "params":{
  6.       "type": "name",
  7.       "actions": [
  8.         {
  9.           "handler": "show",
  10.           "params": {
  11.             "type": "buttons",
  12.             "value": "Is it your number {{contact_double.cf.3574}}?",
  13.             "buttons": [
  14.               "Yes",
  15.               "No"
  16.             ]
  17.           }
  18.         }
  19.       ]
  20.     }
  21.   }
  22. }
Parameter Type Description
type string contact_double - search for a duplicate of the current
contact catalog_elements - search for a catalog entry
params array type - can be name (search is available by name), actions - actions to be performed if an entity was found
value string The word that is looking for, markers from the SHOW block can be used
catalog_id int Id directory - in which we are looking for elements
The filter handler

The filter handler allows you to find the entity and use its data. If an element is found, it can be used in markers by custom fields external_lead and external_contact

Example
  1. {
  2.    "handler": "filter",
  3.    "params": {
  4.      "type": 2,
  5.      "value": "{{lead.cf.111}}",
  6.      "custom_fields_id": 222,
  7.      "actions": [
  8.        {
  9.          "handler": "action",
  10.          "params": {
  11.            "name": "set_custom_fields",
  12.            "params": {
  13.              "type": 1,
  14.              "value": "{{external_contact.cf.333}}",
  15.              "custom_fields_id": 444,
  16.              "enum": "WORK"
  17.            }
  18.          }
  19.        }
  20.      ]
  21.    }
  22.  }
Parameter Type Description
type int The type of the entity on which the filter operates: 1 - contact, 2 - lead
value string The word on which we filter can be used markers from the SHOW block
custom_fields_id int Id of the custom field on which the filter will be produced
Action handler

The action handler allows you to perform one of the possible actions

Code Description
unsorted Actions with Incoming Leads
change_status Change of status
set_tag Setting the tag
unset_tag Deleting a tag
set_custom_fields Setting lead / contact field values
subscribe Subscribing a group of users to chat in entity
add_lead_contact Adding a lead and a contact related to each other
set_budget Setting the leads budget
add_linked_company Add company
add_note Add a note
link Associates elements
change_responsible_user Changes the responsible person
Action unsorted

The unsorted action allows you to accept or reject an Incoming Lead

Example
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "unsorted",
  5.     "params": {
  6.       "value": "accept"
  7.     }
  8.   }
  9. },
  10. {
  11.   "handler": "action",
  12.   "params": {
  13.     "name": "unsorted",
  14.     "params": {
  15.       "value": "decline"
  16.     }
  17.   }
  18. }
Parameter Type Description
value string accept / decline for acceptance / decline
Action change_status

The action change_status allows you to change the status of the lead

Example:
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "change_status",
  5.     "params": {
  6.       "value": 142
  7.     }
  8.   }
  9. }
Parameter Type Description
value int id of the status to which the lead will be transferred
entity int not a required parameter, it can be double, if the find function was used before, then the status will change in the lead of the found match, if it exists
Action set_tag

The set_tag action will set the trade or contact tag, has the {{origin}} layout support, which will put the lead

Example:
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "set_tag",
  5.     "params": {
  6.       "type": 2,
  7.       "value": "Salesbot"
  8.     }
  9.   }
  10. },
  11. {
  12.   "handler": "action",
  13.   "params": {
  14.     "name": "set_tag",
  15.     "params": {
  16.       "type": 2,
  17.       "value": "{{origin}}"
  18.     }
  19.   }
  20. }
Parameter Type Description
type int The type of entity to be tagged (1-contact, 2-leads)
value string name of a tag
Unset_tag action

The unset_tag action removes the tag from a trade or contact

Example:
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "unset_tag",
  5.     "params": {
  6.       "type": 2,
  7.       "value": "Salesbot"
  8.     }
  9.   }
  10. }
Parameter Type Description
type int The type of entity where tag will be deleted (1-contact, 2-leads)
value stringname of a tag to be deleted
Action set_custom_fields

The set_custom_fields action will set the lead or the contact to the values of the custom fields.
You can find the field IDs in the Settings-> Fields section or using the GET accounts / current method. You can use the markers described in the section "The show handler"

Example:
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "set_custom_fields",
  5.     "params": {
  6.       "type": 2,
  7.       "value": "Value of the field",
  8.       "custom_fields_id": 123
  9.     }
  10.   }
  11. },
  12. {
  13.   "handler": "action",
  14.   "params": {
  15.     "name": "set_custom_fields",
  16.     "params": {
  17.       "type": 2,
  18.       "value": "{{message_text}}",
  19.       "custom_fields_id": 987
  20.     }
  21.   }
  22. }
Parameter Type Description
type int The type of entity to be tagged (1-contact, 2-leads)
value string The value of the field to be set
custom_fields_id int id of the field to which the value will be set
calculated bool Is it necessary to try to calculate the value of this custom field using the formula, for example {{lead.cf.123}} * {{lead.cf.456}}
Action subscribe

The subscribe action will sign a group of users to chat

Example
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "subscribe",
  5.     "params": {
  6.       "type": "group",
  7.       "value": 111
  8.     }
  9.   }
  10. }
Parameter Type Description
type string At the moment it should be group
value int id of a group of users
Action add_lead_contact

The action add_lead_contact will add the deal and the contact and link them together. All lead and contact fields can be customized. The values of custom fields are supported by the markup, which is the same as in the show handler. The preset is also supported, so that a contact and a lead can be created only if a message or phone is received from the client.

Example:
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.       "name": "add_lead_contact",
  5.       "params": {
  6.           "preset": "contacts.require_email_or_phone",
  7.           "lead": {
  8.               "name": "Lead name",
  9.               "status_id": 142,
  10.               "responsible_user_id": 123,
  11.               "price": 2000,
  12.               "tags": "",
  13.               "custom_fields": [
  14.                   {
  15.                       "id": 77744111,
  16.                       "values": [
  17.                           {
  18.                               "value": "{{contact.name}}"
  19.                           }
  20.                       ]
  21.                   },
  22.                   {
  23.                       "id": 77744222,
  24.                       "values": [
  25.                           {
  26.                               "value": "{{lead.cf.77744222}}"
  27.                           }
  28.                       ]
  29.                   }
  30.               ]
  31.           },
  32.           "contact": {
  33.               "name": "Contact name",
  34.               "responsible_user_id": 123,
  35.               "tags": "",
  36.               "custom_fields": [
  37.                   {
  38.                       "id": 77744333,
  39.                       "values": [
  40.                           {
  41.                               "value": "{{rand}}"
  42.                           }
  43.                       ]
  44.                   },
  45.                   {
  46.                       "id": 77744444,
  47.                       "values": [
  48.                           {
  49.                               "value": "{{message_text.email}}",
  50.                               "enum": "WORK"
  51.                           }
  52.                       ]
  53.                   },
  54.                   {
  55.                       "id": 77744555,
  56.                       "values": [
  57.                           {
  58.                               "value": "{{message_text.phone}}",
  59.                               "enum": "WORK"
  60.                           }
  61.                       ]
  62.                   }
  63.               ]
  64.           }
  65.       }
  66.   }
  67. }
Parameter Type Description
lead object Set of lead fields
contact object Set of contact fields
preset string Optional parameter. One preset contacts.require_email_or_phone is supported, which checks whether the phone or email is transmitted in a message from the client
Action set_budget

The set_budget action will set the budget for the lead

Example
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "set_budget",
  5.     "params": {
  6.       "value": "{{lead.cf.555123}}*{{lead.cf.555321}}"
  7.     }
  8.   }
  9. }
Parameter Type Description
value string The number that will be recorded in the budget of the lead.
Available operations: +, -, *, /, you can also use parentheses
for example: {{lead.cf.555123}}*{{lead.cf.555321}}
Action add_linked_company

Add_linked_company action Adds a company tied to a deal and a contact

Example
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "add_linked_company",
  5.     "params": {
  6.       "name": "{{message_text}}"
  7.     }
  8.   }
  9. }
Parameter Type Description
name string Company name, markers can be used from the SHOW block
Add_note action

Add_note action adds a note

Example
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "add_note",
  5.     "params": {
  6.       "element_type": 1,
  7.       "note_type": 4,
  8.       "text": "Note text"
  9.     }
  10.   }
  11. }
Parameter Type Description
element_type int The essence to which the note will be attached: 1 - contact, 2 - lead
note_type int Type of note:
4 - the usual note
10 - Incoming call note
11 - Outgoing call note
102 - Note for an incoming text message
103 - Outgoing SMS message note
25 - Service note
text string Note text, markers from the SHOW block can be used in it
Action link

The action link will add a note

Example
  1. {
  2.   "handler": "action",
  3.   "params": {
  4.     "name": "link",
  5.     "params": {
  6.       "from": 2,
  7.       "to": 11,
  8.       "to_id": "{{founded_id}}",
  9.       "to_catalog_id": 123
  10.     }
  11.   }
  12. }
Parameter Type Description
from int The essence to which the fixing will be done: 1 - contact, 2 - lead
to int The essence of the attachment: 1 - contact, 2 - lead, 11 - element of the catalog, 3 - company
to_id string Id of the element to be attached, you can use the markers from the SHOW section
to_catalog_id int An optional parameter, directory id - if the directory element is bound
Action change_responsible_user

The action change_responsible_user changes the responsible

  1. {
  2.     "handler": "action",
  3.     "params": {
  4.         "name": "change_responsible_user",
  5.         "params": {
  6.             "value": 123
  7.         }
  8.     }
  9. }
Parameter Type Description
value int id of the user you want to make responsible
The meta handler

The meta handler is designed to handle additional data that is sent when the chat starts

For more information about sending meta-data, see the messenger documentation:

  • Telegram

  • Viber

  • Messenger

Example
  1. {
  2.   "handler": "meta",
  3.   "params": {
  4.     "delimiter": "-",
  5.     "values": [
  6.       "lead.tags",
  7.       "lead.custom_fields.123",
  8.       "lead.custom_fields.124",
  9.       "lead.tags"
  10.     ]
  11.   }
  12. }
Parameter Type Description
delimiter string The symbol by which incoming content will be divided into elements
values arrayAn array of values in which elements of incoming information will be written.
Values can be written in tags or lead fields
Condition handler

The condition handler is designed to create logical conditions

Example
  1. {
  2.   "handler": "condition",
  3.   "params": {
  4.     "term1": "lead.tags",
  5.     "term2": "telegram",
  6.     "operation": "=",
  7.     "result": [
  8.       {
  9.         "handler": "action",
  10.         "params": {
  11.           "name": "change_status",
  12.           "params": {
  13.             "value": 123
  14.           }
  15.         }
  16.       }
  17.     ]
  18.   }
  19. }
Parameter Type Description
term1 string Condition 1 can be
lead.tags - which returns a list of tags,
chat.origin - which returns the source from where the application came from (facebook, telegram, viber) any handler from the block described in the SHOW section, for example {{contact.name}}
term2 string Condition 2, you can use the markers from the SHOW block
operation string The comparison operator ('=' or '! =')
result array If the comparison is successful, the array of handlers
The preset handler

The preset handler is designed to process incoming messages using predefined templates

Parameter Type Description
name string Name of the handler
params array Parameters of the handler
Preset contacts.validate_base_info

Preset contacts.validate_base_info allows you to get and verify information from the user, and then ask the missing

Example
  1. {
  2.   "handler": "preset",
  3.   "params": {
  4.     "name": "contacts.validate_base_info",
  5.     "params": {
  6.       "empty_email": "Please send your e-mail",
  7.       "empty_phone": "Please send your phone number",
  8.       "invalid_phone": "It seems to us that the phone number is a mistake",
  9.       "success": "Thank you.",
  10.       "empty_all": "Please send your phone number and e-mail"
  11.     }
  12.   }
  13. }
Parameter Type Description
empty_email string Message in the absence of email from the contact
empty_phone string Message in the absence of a phone from a contact
invalid_phone string Message when receiving an invalid phone number
success string Message after receiving all data
empty_all string Message in the absence of all data
Preset contacts.get_base_info

Preset contacts.get_base_info allows you to get information, this preset does not ask additional questions

Example
  1. {
  2.   "handler": "preset",
  3.   "params": {
  4.     "name": "contacts.get_base_info"
  5.   }
  6. }

Examples

Subscribing a group of users to chat.

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "action",
  6.                 "params": {
  7.                     "name": "subscribe",
  8.                     "params": {
  9.                         "type": "group",
  10.                         "value": 111
  11.                     }
  12.                 }
  13.             }
  14.         ]
  15.     }
  16. ]

Lead of the lead to the desired status.

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "action",
  6.                 "params": {
  7.                     "name": "change_status",
  8.                     "params": {
  9.                         "value": 142
  10.                     }
  11.                 }
  12.             }
  13.         ]
  14.     }
  15. ]

Sending any text to the client

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "show",
  6.                 "params": {
  7.                     "type": "text",
  8.                     "value": "Hello"
  9.                 }
  10.             }
  11.         ]
  12.     }
  13. ]

Sending a message with the selection buttons

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "show",
  6.                 "params": {
  7.                     "type": "buttons",
  8.                     "value": "Please choose the type of participation:",
  9.                     "buttons": [
  10.                         "Personal presence",
  11.                         "Online"
  12.                     ]
  13.                 }
  14.             }
  15.         ],
  16.         "answer": [
  17.             {
  18.                 "handler": "buttons",
  19.                 "params": [{
  20.                     "regex": "/personal/iu",
  21.                     "params": [{
  22.                         "handler": "action",
  23.                         "params": {
  24.                             "name": "set_custom_fields",
  25.                             "params": {
  26.                                 "type": 1,
  27.                                 "value": "Personal presence",
  28.                                 "custom_fields_id": 4242
  29.                             }
  30.                         }
  31.                     }]
  32.                 },
  33.                     {
  34.                     "regex": "/online/iu",
  35.                     "params": [{
  36.                         "handler": "action",
  37.                         "params": {
  38.                             "name": "set_custom_fields",
  39.                             "params": {
  40.                                 "type": 1,
  41.                                 "value": "Online",
  42.                                 "custom_fields_id": 4242
  43.                             }
  44.                         }
  45.                     }]
  46.                 }]
  47.             }]
  48.     }
  49. ]

Set the tag for the lead

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "action",
  6.                 "params": {
  7.                     "name": "set_tag",
  8.                     "params": {
  9.                         "type": 2,
  10.                         "value": "salesbot"
  11.                     }
  12.                 }
  13.             }
  14.         ]
  15.     }
  16. ]

Set the value to an additional field.

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "action",
  6.                 "params": {
  7.                     "name": "set_custom_fields",
  8.                     "params": {
  9.                         "type": 2,
  10.                         "custom_fields_id": 123,
  11.                         "value": "Field Value"
  12.                     }
  13.                 }
  14.             }
  15.         ]
  16.     }
  17. ]

Preservation of metadata in the lead card

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "meta",
  6.                 "params": {
  7.                     "delimiter": "-",
  8.                     "values": [
  9.                         "lead.tags",
  10.                         "lead.custom_fields.123",
  11.                         "lead.custom_fields.124",
  12.                         "lead.tags"
  13.                     ]
  14.                 }
  15.             }
  16.         ]
  17.     }
  18. ]

Request email and phone, write to the card only from the first answer.

Example
  1. [
  2.     {
  3.         "question": [
  4.             {
  5.                 "handler": "show",
  6.                 "params": {
  7.                     "type": "text",
  8.                     "value": "Please tell us your phone number and e-mail"
  9.                 }
  10.             }
  11.         ],
  12.         "answer": [
  13.             {
  14.                 "handler": "preset",
  15.                 "params": {
  16.                     "name": "contacts.get_base_info"
  17.                 }
  18.             }
  19.         ]
  20.     }
  21. ]