Создать кастомный блок

Чтобы добавить новый кастомный блок, нажмите кнопку .

Откроется форма Новый кастомный блок.

Укажите параметры блока:

  • Название – обязательное поле, может повторяться. Справа в этом же поле отображается эмоджи блока, выбранная рандомно системой. Вы можете изменить эмоджи. Для этого нажмите на изображение и выберите эмоджи.
  • Категория – категория нужна, чтобы было проще ориентироваться в большом количестве блоков. Вы можете выбрать существующую категорию в списке или создать новую – для этого просто впишите категорию в поле. Обязательное поле.
  • Внешний веб-сервис – установите флаг, если для работы блока нужно задействовать процессы внешнего сервиса.
  • URL – поле отображается, если установле флаг Внешний веб-сервис. Адрес внешнего веб-сервиса для обработки кастомного блока.
  • Описание – описание блока будет отображаться на карточке блока в разделе Кастомные блоки. Обязательное поле. Максимальный размер текста – 128 символов.

После заполнения всех полей нажмите кнопку Создать.

Откроется редактор блока, который содержит три вкладки:

  • Интерфейс;
  • Код;
  • Настройки.

Блок уже создан и доступен для добавления в бот, но пока он пустой и не выполняет никаких действий. Поэтому нужно прописать блоку, какие действия и как выполнять.

Интерфейс

На вкладке Интерфейс пропишите манифест блока в формате JSON, который будет определять внешний вид блока в конструкторе бота. В манифесте нужно описать все секции sections и поля fields, которые в них содержатся. Эти поля в редакторе бота будет заполнять пользователь, который добавит блок в на схему бота.

Пример манифеста блока
{
"sections": [
{
"title": "Выбор валюты",
"name": "currency",
"fields": [
{
"title": "Код валюты (трехбуквеный код)",
"name": "currency_code",
"type": "text",
"defaultValue": "USD"
}
]
},
{
"title": "Настройка блока",
"name": "block_settings",
"fields": [
{
"title": "Название переменной для результата",
"name": "result_var_name",
"type": "text",
"defaultValue": null
}
]
}
]
}

Тип данныхПрописывается на вкладкеОписание
Teкст"type": "text",Текстовые данные. Пользователь в диалоге может вводить любые данные, они будут восприниматься блоком как строка.
Числа"type": "number",Целые и десятичные числа. Поле принимает значения как из переменной, так и вручную. Если типы не совпадают, то блок исполняется с передачей этой переменной как null.
Дата"type": "date",Строковое представление даты или объект Date. Поле принимает значения как из переменной, так и вручную. Если типы не совпадают, то блок исполняется с передачей этой переменной как null.
Файл"type": "file",Передача в блок файла. Поле принимает значения только из переменной. Так как файл приходит из переменной, то ограничения на тип и объем файла отрабатывают в момент добавления файла. Если типы не совпадают, то блок исполняется с передачей этой переменной как null. В переменной передается только один файл. Если в переменной собран массив файлов, то обрабатывается только первый файл из массива.

Код

На вкладке Код напишите js-код для обработки бизнес-логики кастомного блока.

Пример кода кастомного блока

let key = data.activity.currency_code.value;
context.test = key;

let result = '';

let res = fetch({
"url": 'https://www.cbr-xml-daily.ru/daily_json.js',
"method": 'GET'
});

let cur_data = JSON.parse(res.body);

let hasKey = key in cur_data.Valute;
if(hasKey) {
let diff = (cur_data.Valute[key].Value - cur_data.Valute[key].Previous).toFixed(4);
cur_data.Valute[key].Diff = (diff>=0) ? '+'+diff : diff;
result = cur_data.Valute[key];
context[data.activity.result_var_name.value] = result.Nominal+' '+result.Name+' сегодня стоит'+result.Value+' ('+result.Diff+')';
} else {
result = 'Код валюты неверный';
context[data.activity.result_var_name.value] = result;
}
BotOne.completion();

Вы можете обратиться к глобальным переменным, добавив в работу блока данные.

ДанныеМассивОписание
dataМассив, содержит данные по активному диалогу (данные блока, диалога, входящих и исходящих сообщений)
data.activityДанные, заполненные на боковой панели блока в редакторе бота.

В массив не попадают данные:
- незаполненные поля
- поля с типом variable (в эти переменные будет записан результат выполнения кастомного блока)

Этот массив принимает данные двух типов – text и select

Структура text:
key: { // Строковый ключ поля заданный в манифесте блока 'value': string // значение из поля в редакторе блока с учетом преобразования переменных
}


Структура select:
key: { // Строковый ключ поля заданный в манифесте блока 'value': string // выбранное значение из списка 'text': string // выбранное значение из списка с учетом преобразования переменных
}
data.bot_messageВ данный массив будут записаны данные последнего отправленного сообщения сообщений из бота.

Структура:
"bot_message": {
"message_id": int, // идентификатор сообщения
"created_at": timestamp, // дата создания сообщения
"type": string, // тип сообщения
"payload": {
"message": string // текст сообщения
}
}


В данный момент из блока можно отправлять только текстовые сообщения. Его type=message
data.user_messageВ данный массив будут записаны данные отправленного сообщения респондентом.

Структура:
"user_message": {
"message_id": int, // идентификатор сообщения
"created_at": timestamp, // дата создания сообщения
"type": string, // тип сообщения
"payload": {
"message": string // текст сообщения
}
}


В данный момент кастомный блок может принимать от респондента только текстовые сообщения. Его type=message
data.dialogДанные диалога:
"dialog": {
"id": int, // идентификатор диалога
"locale": string // локаль диалога
}
contextОбращение к переменным бота. Например, context.formOneVariable.

Чтобы указать боту, как и какие данные опубликовать в диалоге, используйте команду BotOne.sendTextMessage с двумя параметрами:

  • text – текст сообщения (string|required|min:1|max:4096 )
  • typing – отображать тайпинг после отправки сообщения или нет (true|false)

Пример:

// Отправка текстового сообщения от бота, тайпинг отображается
BotOne.sendTextMessage('Ваши данные:', true);

// Отправка текстового сообщения с полученными данными, тайпинг не отображается BotOne.sendTextMessage('Страна: ' + data.activity.country1.text, false);

Чтобы завершить работу блока, укажите команду BotOne.completion(). После выполнения этой команды работа блока будет закончена, диалог пойдет дальше.

ПримечаниеВкладка Код отображается, только если снят флаг Внешний веб-сервис в свойствах блока. Чтобы снять или установить флаг для уже созданного блока перейдите на вкладку Настройки. Контент на вкладке Код не удаляется при снятии флага и будет доступен при последующей его установке.

Настройки

На вкладке Настройки вы можете просмотреть и изменить свойства блока. Все настройки на вклакде такие же, как при создании блока.

Чтобы сохранить изменения в кастомном блоке, нажмите кнопку .

Кнопка доступна, если:

  • Было внесено изменение хотя бы в одно свойство блока в редакторе.
  • Если указаны все обязательные свойства блока.
ПримечаниеЛюбой новый созданный блок устанавливается автоматически.