Разработка плагинов
Плагин - это мини-приложение, расширяющее базовый функционал SalesMan CRM и разработанное для выполнения конкретных задач.
Схема работы
Предусмотрено 2 способа подключения плагина к интерфейсу CRM:
- фоновое подключение (в основном для скриптов PHP) - плагин подключается к системе Webhook и выполняет работу в фоновом режиме
- подключение к интерфейсу (в основном для JS-скриптов) - плагин подключается к интерфейсу системы и расширяет её функционал с помощью собственных js-скриптов
Важно
Более широкие возможности кастомизации системы предоставляет система Хуков и Фильтров.
Подключение плагина
Подключение плагина происходит с помощью системы Хуков и фильтров. При этом в папке с плагином должны присутсвовать 3 файла:
-
plugin.json - файл с описанием плагина
- package - название пакета ( латиница )
- version - версия плагина
- author - автор
- authorurl - ссылка на сайт автора
- link - ссылка на документацию по плагину
- request - минимально требуемая версия
- name - наименование плагина
- description - описание плагина
- screenshot - ссылка на изображение скриншота
- menu - добавлять ли пункт в меню системы ( true/false )
- icon - иконка для пункта меню ( см. /font/fontello/demo.html )
- iconSVGinBase64 - иконка плагина в формате Base64
- uninstall.php - файл удаления плагина
- {pluginname}.php - файл, содержащий основную логику плагина, в т.ч. подключение к интерфейсу (название должно быть в нижнем регистре, без заглавных букв)
Пример описания:
{
"package": "userNotifier",
"version": "2.0",
"author": "SalesMan Team",
"authorurl": "https://salesman.pro/",
"link": "https://salesman.pro/docs/124",
"request": "2019.4",
"name": "Уведомление пользователей CRM (Боты)",
"description": "Плагин позволяет отправлять уведомления по событиям в SalesMan CRM в поддерживаемые мессенджеры (Telegram, Viber, Slack). Пользователь самостоятельно может подписаться или отписаться на уведомления. Все сообщения отправляются приватно.",
"textdomain": "usernotifier",
"screenshot": "https://salesman.pro/docs.img/docs/usernotifier_telegram.png",
"menu": true,
"icon": "icon-paper-plane-empty",
"iconSVGinBase64": "PHN2ZyBpZD0iTGF5ZXJfMSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0yMzQuMDMgMzYwLjY4MXYtOTIuOTk3YzAtMTAuMDA0IDEuNTMzLTE5LjY1NyA0LjM3Ni0yOC43NDdoLTIyNC45NTljLTMuMjg1IDAtNS45NDcgMi42ODUtNS45NDcgNS45OTd2MTMwLjExNmMwIDMuMzEyIDIuNjYzIDUuOTk3IDUuOTQ3IDUuOTk3aDI3Ljk1M3Y0My41OWMwIDIuNDI2IDEuNDQ5IDQuNjEzIDMuNjcxIDUuNTQxLjczNi4zMDcgMS41MDkuNDU3IDIuMjc1LjQ1NyAxLjU0NyAwIDMuMDY5LS42MDkgNC4yMDctMS43NTZsNDcuNDM3LTQ3LjgzMWgxMjAuNjJ6IiBmaWxsPSIjNjJkYWZhIi8+PHBhdGggZD0ibTM0IDM3NS4wNDl2LTEzMC4xMTZjMC0zLjMxMiAyLjY2My01Ljk5NyA1Ljk0Ny01Ljk5N2gtMjYuNWMtMy4yODUgMC01Ljk0NyAyLjY4NS01Ljk0NyA1Ljk5N3YxMzAuMTE2YzAgMy4zMTIgMi42NjMgNS45OTcgNS45NDcgNS45OTdoMjYuNWMtMy4yODQgMC01Ljk0Ny0yLjY4NS01Ljk0Ny01Ljk5N3oiIGZpbGw9IiMwMWNmZmEiLz48cGF0aCBkPSJtMzMzLjc5OSAxNjkuNzk0aDE0LjAzYzYuODE2IDAgMTMuNDcyLjY3NiAxOS45MDMgMS45NTV2LTE2LjAyNGMwLTEwLjg2LTkuMDU3LTE5Ljc0NS0yMC4xMjUtMTkuNzQ1aC0xMy41ODVjLTExLjA2OSAwLTIwLjEyNSA4Ljg4NS0yMC4xMjUgMTkuNzQ1djE2LjAyYzYuNDMyLTEuMjc4IDEzLjA4Ny0xLjk1MSAxOS45MDItMS45NTF6IiBmaWxsPSIjZmRlMzVhIi8+PHBhdGggZD0ibTMzMy43OTkgMTY5Ljc5NGg0LjM2NnYtMTQuMDdjMC05LjA0NCA2LjI4OS0xNi42OTkgMTQuNzgzLTE5LjAxMi0xLjcwNS0uNDY1LTMuNDkxLS43MzMtNS4zNDEtLjczM2gtMTMuNTg1Yy0xMS4wNjkgMC0yMC4xMjUgOC44ODUtMjAuMTI1IDE5Ljc0NXYxNi4wMmM2LjQzMi0xLjI3NyAxMy4wODctMS45NSAxOS45MDItMS45NXoiIGZpbGw9IiNmOWM1MDAiLz48cGF0aCBkPSJtMjk4LjM1NyA0MzkuMzU5Yy42MjIgMjMuMTE0IDE5LjM4NiA0MS42NjIgNDIuNDU4IDQxLjY2MiAyMy4wNzMgMCA0MS44MzYtMTguNTQ4IDQyLjQ1Ny00MS42NjJ6IiBmaWxsPSIjZmRkMzAyIi8+PHBhdGggZD0ibTMzMC4wMjIgNDM5LjM1OWgtMzEuNjY2Yy42MjIgMjMuMTE0IDE5LjM4NiA0MS42NjIgNDIuNDU4IDQxLjY2MiA1LjYgMCAxMC45NDEtMS4xMDMgMTUuODM3LTMuMDg4LTE1LjI3Ni02LjE5NC0yNi4xNTgtMjEuMDctMjYuNjI5LTM4LjU3NHoiIGZpbGw9IiNlN2I3MDAiLz48cGF0aCBkPSJtNDk1LjczOSA0MjguNjY3LTQ4LjE0MS02Ny45ODZ2LTc2Ljc5OWMtMS4xNjUuMDY3LTIuMzM1LjExLTMuNTE2LjExLTMzLjM2OSAwLTYwLjQxOC0yNy4yNzUtNjAuNDE4LTYwLjkyIDAtMTUuMjIgNS41NDgtMjkuMTI1IDE0LjY5OS0zOS44MDItMTQuODIxLTguNTYtMzIuMDkyLTEzLjQ3Ni01MC41MzQtMTMuNDc2aC0xNC4wM2MtNTUuMTAyIDAtOTkuNzY5IDQzLjgyNy05OS43NjkgOTcuODl2OTIuOTk3bC00OC4xNDEgNjcuOTg2Yy0xLjQ5NCAyLjA2NS0xLjY4OCA0Ljc3Ni0uNTA1IDcuMDI4IDEuMTg2IDIuMjUxIDMuNTUyIDMuNjY1IDYuMTMzIDMuNjY1aDI5OC41OTNjMi41ODMgMCA0Ljk0OC0xLjQxNCA2LjEzMi0zLjY2NSAxLjE4Ni0yLjI1Mi45OTEtNC45NjQtLjUwMy03LjAyOHoiIGZpbGw9IiNmZGQzMDIiLz48cGF0aCBkPSJtNDk1LjczOSA0MjguNjY3LTQ4LjE0MS02Ny45ODZoLTIxMy41NjhsLTQ4LjE0MSA2Ny45ODZjLTEuNDk0IDIuMDY1LTEuNjg4IDQuNzc2LS41MDUgNy4wMjggMS4xODYgMi4yNTEgMy41NTIgMy42NjUgNi4xMzMgMy42NjVoMjk4LjU5M2MyLjU4MyAwIDQuOTQ4LTEuNDE0IDYuMTMyLTMuNjY1IDEuMTg2LTIuMjUyLjk5MS00Ljk2NC0uNTAzLTcuMDI4eiIgZmlsbD0iI2ZkZTM1YSIvPjxwYXRoIGQ9Im0yNzYgMjY3LjY4NGMwLTQ5LjQxIDM3LjMxMi05MC4yNjMgODUuNzk5LTk2LjkzLTQuNTY1LS42MjgtOS4yMjgtLjk2LTEzLjk3LS45NmgtMTQuMDNjLTU1LjEwMiAwLTk5Ljc2OSA0My44MjctOTkuNzY5IDk3Ljg5djkyLjk5N2g0MS45N3oiIGZpbGw9IiNlN2I3MDAiLz48cGF0aCBkPSJtMjI3LjM3MiA0MzUuNjk0Yy0xLjE4My0yLjI1MS0uOTg5LTQuOTYzLjUwNS03LjAyOGw0OC4xNDEtNjcuOTg2aC00MS45ODhsLTQ4LjE0MSA2Ny45ODZjLTEuNDk0IDIuMDY1LTEuNjg4IDQuNzc2LS41MDUgNy4wMjggMS4xODYgMi4yNTEgMy41NTIgMy42NjUgNi4xMzMgMy42NjVoNDEuOTg3Yy0yLjU4IDAtNC45NDYtMS40MTMtNi4xMzItMy42NjV6IiBmaWxsPSIjZjljNTAwIi8+PGVsbGlwc2UgY3g9IjQ0NC4wODIiIGN5PSIyMjMuMDcyIiBmaWxsPSIjZDczMTMxIiByeD0iNjAuNDE4IiByeT0iNjAuOTIiLz48cGF0aCBkPSJtNDE4LjM0NiAyNDMuMTA2Yy0yLjQ1My0uMjU3LTQuNzMxLTEuNzA1LTUuOTI0LTQuMDcyLTEuNzktMy41NTEtLjQ4NS03Ljg0MiAyLjg5NC05LjgzMS0uMi0yLjAxOC0uMzE1LTQuMDYxLS4zMTUtNi4xMzJzLjExNS00LjExNC4zMTUtNi4xMzJjLTMuMzc5LTEuOTg4LTQuNjgzLTYuMjc5LTIuODkzLTkuODMgMS4xOTMtMi4zNjcgMy40NzItMy44MjIgNS45MjYtNC4wNzkgNi41MzQtMTguOTEgMjIuMDUzLTMzLjU3MyA0MS40MDItMzguNzk5LTQuOTk5LTEuMzUtMTAuMjQ4LTIuMDgxLTE1LjY2OC0yLjA4MS0zMy4zNjkgMC02MC40MTggMjcuMjc0LTYwLjQxOCA2MC45MiAwIDMzLjY0NSAyNy4wNDkgNjAuOTIgNjAuNDE4IDYwLjkyIDUuNDIgMCAxMC42NjktLjczMSAxNS42NjgtMi4wODEtMTkuMzUyLTUuMjI0LTM0Ljg3My0xOS44OS00MS40MDUtMzguODAzeiIgZmlsbD0iI2E2MmIyYiIvPjxwYXRoIGQ9Im02OS43MjEgMzAuOTc5aDE4MC41MzFjNC41MTMgMCA4LjIwNSAzLjY1NSA4LjIwNSA4LjEyMXYxMTYuMTE4YzAgNC40NjYtMy42OTIgOC4xMi04LjIwNSA4LjEyaC0yNi45Mzh2MzIuMDQ0YzAgNC40NjYtMi42MTEgNS41MzUtNS44MDMgMi4zNzhsLTM0Ljc4NS0zNC40MjFoLTExMy4wMDVjLTQuNTEzIDAtOC4yMDYtMy42NTQtOC4yMDYtOC4xMnYtMTE2LjExOWMwLTQuNDY2IDMuNjkzLTguMTIxIDguMjA2LTguMTIxeiIgZmlsbD0iIzA1OTJmYiIvPjxwYXRoIGQ9Im05MyAxNTUuMjE3di0xMTYuMTE3YzAtNC40NjYgMy42OTMtOC4xMjEgOC4yMDYtOC4xMjFoLTMxLjQ4NWMtNC41MTMgMC04LjIwNiAzLjY1NS04LjIwNiA4LjEyMXYxMTYuMTE4YzAgNC40NjYgMy42OTMgOC4xMiA4LjIwNiA4LjEyaDMxLjQ4NWMtNC41MTMtLjAwMS04LjIwNi0zLjY1NC04LjIwNi04LjEyMXoiIGZpbGw9IiMwMTgxZmIiLz48cGF0aCBkPSJtNDU1LjA5OCAzNTguMjk0di02Ny43MTVjMzIuMjI4LTUuMzIgNTYuOTAyLTMzLjU1OSA1Ni45MDItNjcuNTA3IDAtMzcuNzI3LTMwLjQ2OC02OC40Mi02Ny45MTgtNjguNDItMTguMzQyIDAtMzQuOTk3IDcuMzc1LTQ3LjIyOSAxOS4zMTktNi44MTYtMy40NTYtMTQuMDU2LTYuMjEtMjEuNjItOC4xNzZ2LTEwLjA3MWMwLTE1LjAyMy0xMi4zOTMtMjcuMjQ1LTI3LjYyNS0yNy4yNDVoLTEzLjU4NWMtMTUuMjMyIDAtMjcuNjI1IDEyLjIyMi0yNy42MjUgMjcuMjQ1djEwLjA2Yy0zMy45NDEgOC44MTctNjEuMzQ1IDMzLjYwNS03My4zMjkgNjUuNjUyaC0yMTkuNjIyYy03LjQxNSAwLTEzLjQ0NyA2LjA1NS0xMy40NDcgMTMuNDk3djEzMC4xMTZjMCA3LjQ0MiA2LjAzMiAxMy40OTcgMTMuNDQ3IDEzLjQ5N2gyMC40NTN2MzYuMDljMCA1LjQ3IDMuMjUxIDEwLjM2MSA4LjI4NCAxMi40NjIgMS42NDYuNjg3IDMuMzgzIDEuMDM1IDUuMTYzIDEuMDM1IDMuNjA2IDAgNi45OTItMS40MTMgOS41MzItMy45NzVsNDUuMjM2LTQ1LjYxMmgxMDIuOTk1bC0yNS4yOTYgMzUuNzI0Yy0zLjE4MSA0LjM5Ny0zLjU5MSAxMC4xMS0xLjA2NSAxNC45MiAyLjQ5MiA0LjczIDcuMzg1IDcuNjY5IDEyLjc2OSA3LjY2OWgxMDAuMDY5YzQuMDk1IDIzLjYzNiAyNC42MDQgNDEuNjYyIDQ5LjIyOCA0MS42NjIgMjQuNjIzIDAgNDUuMTMyLTE4LjAyNiA0OS4yMjctNDEuNjYyaDEwMC4wNjljNS4zODcgMCAxMC4yOC0yLjk0IDEyLjc2OS03LjY3MiAyLjUyNy00LjggMi4xMTktMTAuNTE2LTEuMDItMTQuODU1em0tMTEuMDE2LTE4OC42NDJjMjkuMTc5IDAgNTIuOTE4IDIzLjk2NCA1Mi45MTggNTMuNDJzLTIzLjczOSA1My40Mi01Mi45MTggNTMuNDItNTIuOTE4LTIzLjk2NC01Mi45MTgtNTMuNDIgMjMuNzM5LTUzLjQyIDUyLjkxOC01My40MnptLTEyMi42ODUtMTMuOTI4YzAtNi43NTIgNS42NjQtMTIuMjQ1IDEyLjYyNS0xMi4yNDVoMTMuNTg1YzYuOTYxIDAgMTIuNjI1IDUuNDkzIDEyLjYyNSAxMi4yNDV2Ny4yODRjLTQuMDcxLS40NjMtOC4yMDgtLjcxNC0xMi40MDMtLjcxNGgtMTQuMDNjLTQuMTk1IDAtOC4zMzEuMjQ2LTEyLjQwMi43MDh6bS0yMjIuNDA3IDIxNy44MjJjLTIgMC0zLjkxNy43OTktNS4zMjUgMi4yMTlsLTQ0Ljc2NSA0NS4xMzZ2LTM5Ljg1NWMwLTQuMTQyLTMuMzU4LTcuNS03LjUtNy41aC0yNi40di0xMjcuMTFoMjEzLjcyMWMtMS40MzYgNi44NjUtMi4xOTEgMTMuOTcxLTIuMTkxIDIxLjI0N3YxMS42MWgtODQuNTNjLTQuMTQyIDAtNy41IDMuMzU4LTcuNSA3LjVzMy4zNTggNy41IDcuNSA3LjVoODQuNTN2MjMuMzhoLTE3MC4yNmMtNC4xNDIgMC03LjUgMy4zNTgtNy41IDcuNXMzLjM1OCA3LjUgNy41IDcuNWgxNzAuMjZ2MjUuNjJsLTEwLjggMTUuMjUyaC0xMTYuNzR6bTI0MS44MjUgOTkuOTc1Yy0xNi4zMjYgMC0zMC4wNi0xMS4zNTktMzMuOS0yNi42NjJoNjcuNzk5Yy0zLjgzOSAxNS4zMDMtMTcuNTczIDI2LjY2Mi0zMy44OTkgMjYuNjYyem0tMTQ3Ljk5Ni00MS42NjIgNDUuMDktNjMuNjc5aDEzOC4wOTFjNC4xNDIgMCA3LjUtMy4zNTggNy41LTcuNXMtMy4zNTgtNy41LTcuNS03LjVoLTEzNC40N3YtODUuNDk3YzAtNDkuODQxIDQxLjM5Mi05MC4zOSA5Mi4yNjktOTAuMzloMTQuMDNjMTQuMDM4IDAgMjcuMzQ4IDMuMDk4IDM5LjI3MiA4LjYxNS02LjkwNyAxMC43MS0xMC45MzcgMjMuNDY4LTEwLjkzNyAzNy4xNjMgMCAzNi4zNzkgMjguMzMyIDY2LjIwNyA2My45MzQgNjguMjkzdjYxLjgxNWgtMjguMDk4Yy00LjE0MiAwLTcuNSAzLjM1OC03LjUgNy41czMuMzU4IDcuNSA3LjUgNy41aDMxLjcxOWw0NS4wOTEgNjMuNjc5aC0yOTUuOTkxeiIvPjxwYXRoIGQ9Im00MTIuNDIxIDIzOS4wMzVjMS4zMTkgMi42MTYgMy45NjEgNC4xMjUgNi43MDMgNC4xMjUgMS4xMzUgMCAyLjI4OC0uMjU5IDMuMzcxLS44MDRsMTQuMDg4LTcuMTAzdjEyLjk5YzAgNC4xNDIgMy4zNTggNy41IDcuNSA3LjVzNy41LTMuMzU4IDcuNS03LjV2LTEyLjk5bDE0LjA4NyA3LjEwMmMxLjA4My41NDYgMi4yMzUuODA0IDMuMzcxLjgwNCAyLjc0MiAwIDUuMzg0LTEuNTA5IDYuNzAzLTQuMTI1IDEuODY0LTMuNjk5LjM3OC04LjIwOS0zLjMyMS0xMC4wNzRsLTExLjY4LTUuODg5IDExLjY4LTUuODg4YzMuNjk5LTEuODY1IDUuMTg1LTYuMzc1IDMuMzIxLTEwLjA3NC0xLjg2NS0zLjY5OS02LjM3NS01LjE4NS0xMC4wNzQtMy4zMjFsLTE0LjA4NyA3LjEwMnYtMTIuOTljMC00LjE0Mi0zLjM1OC03LjUtNy41LTcuNXMtNy41IDMuMzU4LTcuNSA3LjV2MTIuOTkxbC0xNC4wODgtNy4xMDNjLTMuNjk4LTEuODY1LTguMjA5LS4zNzgtMTAuMDc0IDMuMzIxLTEuODY0IDMuNjk5LS4zNzggOC4yMDkgMy4zMjEgMTAuMDc0bDExLjY4IDUuODg4LTExLjY4IDUuODg5Yy0zLjY5OSAxLjg2Ni01LjE4NSA2LjM3Ni0zLjMyMSAxMC4wNzV6Ii8+PHBhdGggZD0ibTU2LjI3IDI5NC4yOTNoNDkuOTU4YzQuMTQyIDAgNy41LTMuMzU4IDcuNS03LjVzLTMuMzU4LTcuNS03LjUtNy41aC00OS45NThjLTQuMTQyIDAtNy41IDMuMzU4LTcuNSA3LjVzMy4zNTcgNy41IDcuNSA3LjV6Ii8+PHBhdGggZD0ibTY5LjcyMSAxNzAuODM3aDEwOS45MjJsMzIuNTk0IDMyLjI1M2MzLjE3NSAzLjE0MiA2LjIxOSAzLjk4NCA4LjU3IDMuOTg0IDEuNjI4IDAgMi45MjUtLjQwNCAzLjcwMy0uNzI5IDEuODk2LS43OTEgNi4zMDUtMy40NDMgNi4zMDUtMTAuOTY0di0yNC41NDRoMTkuNDM4YzguNjYgMCAxNS43MDUtNy4wMDcgMTUuNzA1LTE1LjYydi02MS4yMTdjMC00LjE0Mi0zLjM1OC03LjUtNy41LTcuNXMtNy41IDMuMzU4LTcuNSA3LjV2NjEuMjE3YzAgLjI5My0uMzAyLjYyLS43MDUuNjJoLTI2LjkzOGMtNC4xNDIgMC03LjUgMy4zNTgtNy41IDcuNXYyMi4xOWwtMjcuODEzLTI3LjUyMWMtMS40MDQtMS4zOS0zLjMtMi4xNjktNS4yNzUtMi4xNjloLTExMy4wMDZjLS40MDQgMC0uNzA2LS4zMjctLjcwNi0uNjJ2LTExNi4xMTdjMC0uMjkzLjMwMi0uNjIxLjcwNi0uNjIxaDE4MC41MzFjLjQwMyAwIC43MDUuMzI4LjcwNS42MjF2MTkuOWMwIDQuMTQyIDMuMzU4IDcuNSA3LjUgNy41czcuNS0zLjM1OCA3LjUtNy41di0xOS45YzAtOC42MTMtNy4wNDUtMTUuNjIxLTE1LjcwNS0xNS42MjFoLTE4MC41MzFjLTguNjYgMC0xNS43MDYgNy4wMDctMTUuNzA2IDE1LjYyMXYxMTYuMTE4YzAgOC42MTIgNy4wNDYgMTUuNjE5IDE1LjcwNiAxNS42MTl6Ii8+PHBhdGggZD0ibTIxNy4wNTEgNjIuMTMxaC0xMTQuMTMxYy00LjE0MiAwLTcuNSAzLjM1OC03LjUgNy41czMuMzU4IDcuNSA3LjUgNy41aDExNC4xMzFjNC4xNDIgMCA3LjUtMy4zNTggNy41LTcuNXMtMy4zNTgtNy41LTcuNS03LjV6Ii8+PHBhdGggZD0ibTIxNy4wNTEgOTEuNDc5aC0xMTQuMTMxYy00LjE0MiAwLTcuNSAzLjM1OC03LjUgNy41czMuMzU4IDcuNSA3LjUgNy41aDExNC4xMzFjNC4xNDIgMCA3LjUtMy4zNTggNy41LTcuNXMtMy4zNTgtNy41LTcuNS03LjV6Ii8+PHBhdGggZD0ibTIxNy4wNTEgMTIwLjgyN2gtMTE0LjEzMWMtNC4xNDIgMC03LjUgMy4zNTgtNy41IDcuNXMzLjM1OCA3LjUgNy41IDcuNWgxMTQuMTMxYzQuMTQyIDAgNy41LTMuMzU4IDcuNS03LjVzLTMuMzU4LTcuNS03LjUtNy41eiIvPjwvc3ZnPg=="
}
Подключение плагина к интерфейсу
Подключение плагина к интерфейсу происходит в Панели управления, раздел Интеграция / Плагины
После активации плагина требуется обновить окно браузера. Если у плагина есть веб-интерфейс, то доступ к нему будет доступен в верхнем меню системы в разделе "Сервисы" / "Дополнения":
Важно
index.php в папке с плагином всегда используется для интерфейса настроек