Краткая инструкция по работе с API в Vtiger CRM

Краткая инструкция по работе с API в Vtiger CRM

В этой статье я постараюсь дать ответы на самые часто задаваемые вопросы, как осуществлять взаимодействие с Vtiger CRM по API в части получения, изменения или создания записей. Система предоставляет API для взаимодействия сторонних приложений и веб-приложения с системой.

Разработчики постарались предоставить максимальные возможности для интеграции VtigerCRM с другими сервисами и системами, чтобы пользователи могли расширить возможности CRM для себя и других пользователей.

Создание собственных интеграций – это не так сложно, как может показаться на первый взгляд. Чтобы еще больше облегчить жизнь разработчику, кроме инструкций я постараюсь привести примеры использования методов и их описание в других статьях.

Итак, как осуществлять взаимодействие по API?

Для того, чтобы получить к данным в Vtiger CRM, вам нужно представиться и получить специальный код сессии, который вы в дальнейшем будете использовать для обмена данными.

Процесс авторизации проходит в два этапа.

Этап 1 - получаем токен шифрования.

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

GET

http://VTIGER_URL/webservice.php?operation=getchallenge&username=admin

 

Header

Content-type 

application/x-www-form-urlencoded

 

{

  "success": true,

  "result": {

    "token": "610a740fbbd66",

    "serverTime": 1628075023,

    "expireTime": 1628075323

  }

}

 

Обычно я рекомендую для взаимодействия с Vtiger создавать отдельного пользователя или подключаться под пользователями с ограниченными правами.

В ответе мы видим строку token. Она нам понадобится для второго этапа.

 

Этап 2 - получаем код сессии.

Первым делом нам потребуется зашифровать пароль. Шифрование происходит следующим образом:

  • Вам нужно получить Access Key пользователя, который вы можете найти в профиле пользователя (не путайте с паролем).
  • Зашифровать ключ, склеив его с токеном и прогнав через MD5.

Получить шифрованный ключ можно на сайте http://www.md5.cz/ , если вы пробуете взаимодействовать через postman или insomnia. В этом случае на сайте вводите склейку: md5(TOKENSTRING + ACCESSKEY)

Где Tokenstring - тот токен, который вы получили при первом запросе, Accesskey - ключ доступа в профиле пользователя.

Теперь когда у нас есть зашифрованный пароль, проходим авторизацю, отправляя запрос в CRM:

POST 

http://VTIGER_URL/webservice.php

 

Структура тела запроса - Form URL Encoded

 

operation=login

username=admin

accessKey=md5(TOKENSTRING + <ACCESSKEY>)

 

Получаем ответ

{

  "success": true,

  "result": {

    "sessionName": "5c1ad80d610a7a7aabe2e",

    "userId": "19x1",

    "version": "0.22",

    "vtigerVersion": "7.2.0-202008"

  }

}

 

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

Давайте попробуем совершить наиболее распространённые операции.

 

Этап 3 - Получаем список контактов.

GET

http://VTIGER_URL/webservice.php?query=SELECT%20%2A%20FROM%20Contacts%3B&operation=query&sessionName=SESSION_KEY

где SESSION_KEY - это наш полученный от CRM ключ сессии

Здесь стоит отметить, что мы по сути получаем контактов, используя SQL-запрос. Единственное, в нём мы указываем не название таблицы, а название модуля. Его также можно расширить, указав дополнительные условия для фильтра, например можно добавить WHERE modifiedtime > '2021-06-01' и оно будет работать.

В ответе вы получаете массив из контактов, где в ключе будет название поля и в значении - сами данные по этому полю.

Этап 4 - получение контакта по его ID

Это самое простое. Для этого нужно отправить обычный GET-запрос:

http://VTIGER_URL/webservice.php?id=12x87&operation=retrieve&sessionName=SESSION_KEY

Здесь мы пытаемся получить контакт с номером 87. Но вы, наверное, заметили специальный префикс, мы передаём не просто цифру 87, а в специальном формате 12x87. Таким образом мы даём CRM понять, что мы получаем данные у модуля с цифрой 12, т.е. контакты.

Получить список всех модулей с их номерами вы можете в таблице CRM: vtiger_ws_entity

Этап 5 - создаём контакт

В этом случае нам потребуется передать POST запрос на http://VTIGER_URL/webservice.php , передав в виде формы следующие поля:

operation=create

sessionName=sessionId     

elementType=Contacts

 

Вам также потребуется передать специальное поле element, которое в виде строки в формате JSON будет содержать в себе все данные по вновь созданному контакту

 

element = 

{

    "firstname": "Александр",

    "phone": "+7908222448800",

    "lastname": "Ivanov",

    "otherphone": "+79086789985",

    "birthday": "1980-06-08",

    "email": "ivanov@sergeyem.ru",

    "assigned_user_id": "19x1",

}

 

Вам нужно передать в певую очередь обязательные поля. Чтобы понять, какие поля обязательные в модуле, попробууйте создать запись в CRM вручную и посмотрите на все поля, отмеченные звёздочкой.

Поле assigned_user_id обязательно во всех модулях. Если не знаете, что туда передавать, подставляйте номер администратора - 19x1

Этап 6 - Обновляем контакт

Аналогичным образом, передаём POST-запрос на http://VTIGER_URL/webservice.php с полями:

operation=update

sessionName=sessionId

element=

{

"firstname": "Александр",

"phone": "+7908222448800",

"lastname": "Ivanov",

"otherphone": "+79086789985",

"birthday": "1980-06-15",

"email": "ivanov@sergeyem.ru",

"assigned_user_id": "19x1",

"id": "12x87"

}

 

Как вы могли заметить, мы не передаём название модуля. Мы в обязательном порядке должны передать ID в формате API, т.е. с префиксом 12x.

К счастью, для более простой работы с API Vtiger есть специальная библиотека, которой я активно пользуюсь: https://github.com/salaros/vtwsclib-php

Этап 6 - расширяем API

Удобство API в VtigerCRM в том, что вы можете без особых затруднений расширить его функционал, добавив новый метод.

В качестве примера рассмотрим возможность получать перевод определённого значения из CRM. Например, у вас есть файл переводов модуля Контакты. И вы хотите получить русское значение ключа SINGLE_Contacts. Или нескольких значений, передав массив переводимых параметров.

Сделать это, на удивление, очень просто.

Создадим функцию, которая будет осуществлять перевод. Создаём файл в папке include/Webservices/GetTranslation.php

со следующим содержимым:

 

function vtws_gettranslation($portal_language, $module, $totranslate, $user)

{

    global $log, $default_language, $current_language;

    $log->debug('> vtws_gettranslation');

    foreach ($totranslate as $key => $str) {

        $translated[$str] = Vtiger_Functions::getTranslatedString($str, $module, $portal_language);

    }

    return $translated;

}

 

Эта функция будет отвечать за обработку поступающего к ней API-запроса. Теперь нам осталось её только зарегистрировать. Для этого создайте папку scripts и в ней файл register_gettranslation.php

Содержимое этого файла:

 

$Vtiger_Utils_Log = true;

chdir('../');

 

include_once 'include/database/PearDatabase.php';

include_once 'include/Webservices/Utils.php';

 

global $current_user, $adb;

$db = PearDatabase::getInstance();

 

$operationName = 'gettranslation';

$handler_path = 'include/Webservices/GetTranslation.php';

$handler_method = 'vtws_gettranslation';

$operation_type = 'POST';

 

$result = $db->pquery("SELECT 1 FROM vtiger_ws_operation WHERE name = ?", array($operationName));

if (!$db->num_rows($result)) {

    $operationId = vtws_addWebserviceOperation($operationName, $handler_path, $handler_method, $operation_type);

    vtws_addWebserviceOperationParam($operationId, 'totranslate', 'encoded', 0);

    vtws_addWebserviceOperationParam($operationId, 'language', 'string', 0);

    vtws_addWebserviceOperationParam($operationId, 'module', 'string', 0);

}

echo 'DONE!';

 

Запустите его из браузера один раз и обработчик будет успешно зарегистрирован.

Теперь, чтобы получить переводы через API, вам нужно отправить POST запрос по адресу http://VTIGER_URL/webservice.php с параметрами:

  • operation=gettranslation
  • sessionName=SESSION_KEY
  • totranslate=["SINGLE_Contacts", "Contacts"]
  • language=ru_ru
  • module=Contacts

В ответе мы получим результат перевода двух значений:

{

  "success": true,

  "result": {

    "SINGLE_Contacts": "Контакт",

    "Contacts": "Контакты"

  }

}

Надеюсь, эта инструкция оказалась для вас полезной. Если у вас возникли потребности в доработке API - обращайтесь, с удовольствием вам помогу.

Популярное

Самые популярные посты

Как быть максимально продуктивным на удалённой работе?
Business

Как быть максимально продуктивным на удалённой работе?

Я запустил собственный бизнес и намеренно сделал всё возможное, чтобы работать из любой точки мира. Иногда я сижу с своём кабинете с большим 27-дюймовым монитором в своей квартире в г. Чебоксары. Иногда я нахожусь в офисе или в каком-нибудь кафе в другом городе.

Привет! Меня зовут Сергей Емельянов и я трудоголик
Business PHP

Привет! Меня зовут Сергей Емельянов и я трудоголик

Я программист. В душе я предприниматель. Я начал зарабатывать деньги с 11 лет, в суровые 90-е годы, сдавая стеклотару в местный магазин и обменивая её на сладости. Я зарабатывал столько, что хватало на разные вкусняшки.

Акция! Профессиональный разработчик CRM за 2000 руб. в час

Выделю время под ваш проект. Знания технологий Vtiger CRM, SuiteCRM, Laravel, Vue.js, Golang, React.js. Предлагаю варианты сотрудничества, которые помогут вам воспользоваться преимуществами внешнего опыта, оптимизировать затраты и снизить риски. Полная прозрачность всех этапов работы и учёт временных затрат. Оплачивайте только рабочие часы разработки после приемки задачи. Экономьте на платежах по его содержанию разработчика в штате. Возможно заключение договора по ИП. С чего начать, чтобы нанять профессионального разработчика на full-time? Просто заполните форму!

Telegram
@sergeyem
Telephone
+4915211100235