Если у вас еще нет amoCRM
Создать прямо сейчас1. Указать интерфейс в области видимости
"locations":[
"salesbot_designer"
]
2. В сам манифест добавляется объект salesbot_designer Данный объект описывает поля для отображения интерфейса
настроек виджета в конфигураторе
"salesbot_designer": {
"logo": "/widgets/testWidgetShrek/images/shrek.jpg",
"handler_name": {
"name": "settings.handler_name",
"settings": {
"text": {
"name": "settings.text",
"default_value": "Hello, i am Salesbot!",
"type": "text", //В зависимости от указанного типа будут предложены для выбора поля разного типа. numeric - текстовые и числовые поля, text - текстовые поля, url - поля типа текст и ссылка
"manual": true, //true - пользователь должен ввести значение, false - пользователь выбирает значение поля
},
"link_to": {
"name": "settings.link",
"default_value": "www.amocrm.com",
"type": "url",
}
}
}
}
Настройки каждого из handler’ов прописываются в файле manifest.json, а затем уже в готовом виде используются в коде
salesbot
Все допустимые параметры handler размещены здесь – Обработчики
Salesbot
События в callbacks:
Метод срабатывает, когда пользователь в конструкторе Salesbot размещает один из хендлеров, описанных в manifest.json
Метод должен вернуть строку вида JSON кода salesbot’а
Принимает на вход:
{
"text": "Hello, i am Salesbot!",
"link_to": "www.amocrm.com"
}
onSalesbotDesignerSave:
function (handler_code, params) {
var salesbot_source = {
question: [""],
require: [""]
};
salesbot_source.question.push({"type": "text"});
let values;
params.forEach(element => {
element.forEach(text => {
values.push(text)
});
});
salesbot_source.question.push({
"values": values
});
salesbot_source.question.push({"accept_unsorted": "false"});
return JSON.stringify([salesbot_source]);
}
Метод рендера содержимого окна настроек виджета, вызываемого из конфигуратора salesbot’a. Метод может вернуть объект
с ключом exists, в котором будут содержаться возможные выходы из блока виджета в боте. В массиве exists должны
содержаться объекты с ключами code (код выхода) и title (Название выхода).
Принимает на вход:
function(caption) {
return
twig({ref: '/tmpl/salesbot_designer/controls/widget_param.twig'}).render({
caption: caption,
is_widget: true
});
}
salesbotDesignerSettings: function ($body, renderRow, params) {
var use_catalog = $body.find('[data-field-name="invoice_catalog"][name = "value_manual"]').val() == "true",
$catalog_switcher = $(renderRow())
.append(self.langs.invoice_catalog)
.append(
self.render({
ref:
'/tmpl/controls/switcher.twig'
}, {
checked:
use_catalog,
custom_class_name:
'switcher_blue', id:
'stripe_invoice_catalog'
})
);
return {
exits: [
{ code: 'success', title: self.i18n('salesbot').success_callback_title },
{ code: 'fail', title: self.i18n('salesbot').fail_callback_title }
]
};
}
salesbotDesignerSettings: function ($body, rowTemplate, params) {
//Логика рендера
return {
exits: [
{ code: 'success', title: self.i18n('salesbot').success_callback_title },
{ code: 'fail', title: self.i18n('salesbot').fail_callback_title }
]
};
},
onSalesbotDesignerSave: function (handler_code, params) {
var request_data = {
message: params.message,
};
if (AMOCRM.getBaseEntity() === 'customers') {
request_data.customer = '{{customer.id}}';
} else {
request_data.lead = '{{lead.id}}';
}
return JSON.stringify([
{
question: [
{
handler: 'widget_request',
params: {
url: 'https://example.com/webhook',
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'
}
}
]
}
]);
},