Модерация виджетов

Общие требования:

  • Простота в использовании. Технически не подготовленный пользователь должен понимать, как включить виджет, как его настроить, как с ним работать и где получить поддержку. Чем работа с виджетом понятнее, тем больше пользователей его будет использовать.
  • Качество изготовления. Не должно быть известных разработчикам ошибок. При возникновении внештатных ситуаций виджет должен выдавать сообщения пользователю о сбое и контактными данными для обращение.
  • Безопасность. Виджет не должен собирать пользовательскую информацию (API ключ, email и другие данные), если в ней нет необходимости для функционирования виджета. Если данная информация нужна для работы — при установке, пользователь должен быть уведомлен о том, что данные будут отправлены на сервер виджета. При этом, пользователь должен подтвердить данный пункт, без подтверждения виджет не должен устанавливаться! Пример реализации проверки согласия на передачу данных вы можете посмотреть по ссылке
  • Если виджет работает только на конкретных тарифах, данная информация должна быть в описании виджета.
  • Разработчик интеграции не должен вести разработку, схожих с amoCRM, систем.
  • Виджет не должен изменять страницы, которые не включены в разрешенный список. Запрещается скрывать/изменять/подменять рейтинги и отзывы в разделе интеграции и модальном окне настроек виджетов.
  • В архиве не должно быть неиспользуемых файлов картинок, скриптов и прочих файлов, которые не задействованы в работе виджета.
  • При использовании каналов чатов, необходимо указать данные зарегистрированного канала и оставить пометку о доступности функционала только на RU.

Технические требования:

  • Файл manifest.json должен быть корректно составлен:

    – Количество используемых локализаций должно быть равно количеству lang-файлов и они должны быть корректно заполнены.
    – Если виджет носит информационный характер, то есть не устанавливается напрямую widget/installation должен быть false, widget/is_showcase true.
    – С ноября 2018 появился новый обязательный раздел в manifest.json widget/support/ содержащий ключи:
    widget/support/link – ссылка на поддержку интеграции,
    widget/support/email – email технической поддержки.

  • Код не должен быть минимизирован или обфусцирован (за исключением подключаемых библиотек).
  • Кодировка файлов – UTF-8 без BOM. Все файлы должны использовать перевод строки Unix LF.
  • Нет комментариев кода, кроме поясняющих.

    Можно

    // получим id аккаунта.

    Нельзя

    // var a = AMOCRM.constant('account').id
  • Виджет не должен в css файлах иметь общие классы с нашей системой. Все стили должны быть указаны относительно
    корневого селектора виджета. Это даёт возможность внутри виджета переопределять какие угодно стили, не затрагивая
    системные.

    Можно

    #amo_widget_code,
    .control-select { color: green }

    Нельзя

    .control-select { color: red }
  • Запрещены манипуляции с глобальными селекторами CSS.

    Например: $(“.widget_settings_block__fields”).hide();

  • Код виджета не должен опираться на стили switcher’a (switcher__on, switcher__off) – они подлежат удалению из системы.
  • Дополнительные плагины виджета не должны ссылаться на временную папку виджета – upl, так как эта папка будет доступна только в private, при переводе в public данная папка будет недоступна. 
  • Не должно быть тестовых данных, дебагов, конструкций типа console (log, debug, error и т.п.), alert(), print_r и др.
  • В виджете не должно быть подключения внешних файлов-зависимостей через document.createElement(‘script’) и вставку этого элемента напрямую в head. Все внешние зависимости должны подключаться через requirejs в блоке зависимостей в define. 
  • Дополнительные плагины или иные внешние подключения в виджет не должны грузиться с внешних ресурсов за исключением публичных библиотек, наподобие cdnjs.com. Подключение сторонней библиотеки для php-части обсуждается отдельно.
  • Отсутствуют непроверенные обращения к элементам основного приложения

    (Например: var i = AMOCRM.setting.new.another).

  • Виджет не должен влиять на данные в глобальной переменной AMOCRM, он может только читать данные оттуда. 
  • Если используется php-часть, все переменные и действия должны быть проверенны, не должно быть пустых методов. Уделите особое внимание проверке переменных на существование – любой warning или notice приведёт к падению виджета. 
  • В php-части необходимо реализовать проверку SSL-сертификатов подключаемого внешнего ресурса.
  • Запрещены ajax-запросы, XMLHttpRequest, WebSockets в циклах. URL-запрос должен содержать timeout не более 2 секунд.