Интеграция виджета в Salesbot

Файл manifest.json

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",
      }
    }
  }
}

Файл script.js

Настройки каждого из handler’ов прописываются в файле manifest.json, а затем уже в готовом виде используются в коде
salesbot

Все допустимые параметры handler размещены здесь – Обработчики
Salesbot

События в callbacks:

onSalesbotDesignerSave

Метод срабатывает, когда пользователь в конструкторе Salesbot размещает один из хендлеров, описанных в manifest.json
Метод должен вернуть строку вида JSON кода salesbot’а

Принимает на вход:

  • handler_code – Код хендлера объекта в объекте salesbot_designer
  • params – Передаются настройки виджета формата
{
    "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]);
  }

salesbotDesignerSettings

Метод рендера содержимого окна настроек виджета, вызываемого из конфигуратора salesbot’a. Метод может вернуть объект
с ключом exists, в котором будут содержаться возможные выходы из блока виджета в боте. В массиве exists должны
содержаться объекты с ключами code (код выхода) и title (Название выхода).

Принимает на вход:

  • body – Объект DOM
  • renderRow – Функция описана ниже
  • params – Настройки уже созданного хендлера
function(caption) {
return
  twig({ref: '/tmpl/salesbot_designer/controls/widget_param.twig'}).render({
    caption: caption,
    is_widget: true
  });
}

Пример c jQuery

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 }
          ]
        };
}

Пример интеграции с хуками для Salesbot


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'
                }
              }
            ]
          }
        ]);
    },