В amoCRM есть возможность автоматизировать рутинные процессы с помощью создания ботов и, конечно же, мы даем возможность расширения функциональности ботов с помощью виджетов. Для работы виджета в конструкторе ботов необходимо выполнить следующие шаги:
Указать локейшн конструктора ботов в manifest.json:
{
...
"locations": [
"salesbot_designer"
],
...
}
Также в manifest.json добавить объект salesbot_designer. Данный объект описывает поля для отображения интерфейса настроек виджета в конструкторе:
{
...
"salesbot_designer": {
"logo": "/widgets/testWidgetShruk/images/shrek.jpg",
"handler_sms": {
"name": "settings.handler_sms",
"settings": {
"phone": {
"name": "settings.phone",
"default_value": "+7 912 345 67 89",
"type": "text"
},
}
},
"handler_email": {
"name": "settings.handler_email",
"settings": {
"email": {
"name": "settings.email",
"default_value": "example@email.com",
"type": "text"
},
}
}
},
...
}
Как мы видим, один виджет может предоставлять несколько вариантов использования в рамках конструктора, например, виджет может иметь возможность отправить СМС или E-mail как в примере выше.
У полей в свойстве settings могут быть следующие варианты type:
Если данные настройки указаны верно, то виджет появится в модальном окне виджетов конструктора.
При нажатии пользователем на кнопку добавить под виджетом отработает колбэк salesbotDesignerSettings. С помощью данного колбэка вы можете изменить внешний вид кубика своего виджета в конструкторе. На вход колбэк принимает следующие параметры:
Пример реализации данного колбэка:
this.callbacks = {
...
salesbotDesignerSettings: function ($body, renderRow) {
$body.find('[data-field-name="sms"]')
.replaceWith(
$(renderRow('SMS'))
.append('Кастомная разметка здесь')
);
return {
exits: [
{ code: 'success', title: 'При успешном выполнении' },
{ code: 'fail', title: 'При ошибке' }
]
};
},
...
}
Виджета может иметь как один, так и несколько вариантов результата выполнения (например, выполнение может завершиться с ошибкой и бота надо направить по альтернативному сценарию), колбэк salesbotDesignerSettings должен возвращать объект с ключом exits, как в примере выше. Выглядеть это будет так:
После того, как пользователь настроил свою цепочку в конструкторе и нажал на кнопку "Сохранить" в виджете выполяется колбэк onSalesbotDesignerSave, который должен генерировать код для виджета с учетом данных кодов выходов из бота. Пример:
onSalesbotDesignerSave: function (handler_code, params) {
var request_data = {
message: params.message,
amouser: '{{admin.login}}'
};
if (AMOCRM.getBaseEntity() === 'customers') {
request_data.customer = '{{customer.id}}';
} else {
request_data.lead = '{{lead.id}}';
}
return JSON.stringify([
{
question: [
{
handler: 'request',
params: {
url: send_sms_url,
method: 'POST',
json: false,
data: request_data
}
},
{
handler: 'goto',
params: {
type: 'question',
step: 1
}
}
]
},
{
question: [
{
handler: 'conditions',
params: {
logic: 'and',
conditions: [
{
term1: '{{json.status}}',
term2: 'success',
operation: '='
}
],
result: [
{
handler: 'exits',
params: {
value: 'success'
}
}
]
}
},
{
handler: 'exits',
params: {
value: 'fail'
}
}
]
}
]);
}
В данном примере виджет отправки смс отправляет запрос к себе в сервис для отправки сообщения, при получении ответа идет в блок с условием и если статус ответа равен успеху, то идет в выход succes, если же отправка не удалась и пришла ошибка, то идет в fail и если у пользователя в боте настроена цепочка на ошибку (например, если не смогли отправить смс, то отправим клиенту email), то бот пойдет по ней.