Статьи помеченные rest
Пример работы с amoCRM
Как получить данные из amoCRM
Заказчик попросил вывести данные о сделках в таблицу в формате CSV. Данные должны быть максимально полными.
В том числе, необходимо вывести все возможные этапы сделки и даты, когда сделка переходила с этапа на этап. В amoCRM предусмотрена возможность определять этапы для каждой воронки продаж. Необходимо было, чтобы учитывались все этапы, всех воронок.
Ну и прочее - кто, когда, с кем, контакты клиента и, наконец, все комментарии к сделке.
Доступ к таблицам Google
Рредактирование таблиц Google из приложения
В предыдущей статье уже была ссылка на работающий пример.
Следующим шагом стало выделение процесса аутентификации на сервисе Google в отдельный класс. А это, в свою очередь, позволило сделать расширение, немного упрощающее решение задачи.
OAuth2 аутентификация на примере Google
Как работает аутентификация OAuth2
Если у вас есть аккаунт в Google, то вы наверняка пользовались документами. Например, электронными таблицами.
Доступ к таблицам разрешен только вам и тем, кому вы предоставите такое право. Причем доступ возможен не только из Google.
Можно просматривать список таблиц и редактировать выбранную таблицу оставаясь в рамках своего приложения. Примерно так - http://sample.vorst.ru/googl
Поиск
Метки
Пример работы с amoCRM
Как получить данные из amoCRM
Заказчик попросил вывести данные о сделках в таблицу в формате CSV. Данные должны быть максимально полными.
В том числе, необходимо вывести все возможные этапы сделки и даты, когда сделка переходила с этапа на этап. В amoCRM предусмотрена возможность определять этапы для каждой воронки продаж. Необходимо было, чтобы учитывались все этапы, всех воронок.
Ну и прочее - кто, когда, с кем, контакты клиента и, наконец, все комментарии к сделке.
На сайте amoCRM подробно описан порядок взаимодействия с системой. Приведены примеры кода и данных, полученных в результате работы.
Так как операции для разных таблиц однотипны, то и примеры похожи. И первое, что приходит в голову - надо что-то придумать, чтобы не копипастить код.
Сначала был написан класс amoREST.php
, который может пройти авторизацию и получить результаты выбранного действия (GET-запроса). Результат можно посмотреть на GitHub.
Далее был написан класс amoTable.php
, который, используя класс amoREST.php
получает все необходимые данные из системы и формирует строки таблицы.
require(dirname(__FILE__) . '/amoREST.php'); class amoTable { const DELIMITER = "\t"; const BATCH_SIZE = 100; // needed data for making a table public $account; public $leads; public $events; public $notes; ... public function __construct($config) { $maxrows = $config['limit_rows']; $offset = $config['limit_offset']; $amo = new amoREST(['account' => $config['account']]); $this->amo = $amo; if($amo->auth($config['email'], $config['api_key'])) { // account $response = $amo->get('accounts/current'); $this->account = $response['account']; // leads $response = $amo->get('leads/list', [ 'limit_rows' => $maxrows, 'limit_offset' => $offset, ]); $this->leads = $response['leads']; ... } /* * CSV table maker */ public function make() { // Make a table foreach($this->leads as $lead) { ... }
После получения порции строк о сделках (leads), нужно запросить данные о сделках в связанных таблицах по коду сделки (lead ID
). Посылать запрос с каждым ID
никак нельзя - это сильно тормозит систему. Но можно сформировать пакет из нескольких ID
.
/* * Batch request with multiple ids. One request for BATCH_SIZE ids. * @param array source - it's ids we are going to find * @param string id_attribute - name of id attribute * @param string action - get request * @param array params - additional params for the request * @param string param - what we are looking for * @param string response_attribute - part of the response (array) that we need * @return array requested data */ public function getBatch($source, $id_attribute, $action, $params, $param, $response_attribute) { $i = $j = 0; $ids = $a = []; $c = count($source); foreach($source as $item) { $ids[] = $item[$id_attribute]; $i++; $j++; if($i == self::BATCH_SIZE || $j == $c) { $params[$param] = $ids; $response = $this->amo->get($action, $params); foreach($response[$response_attribute] as $row) $a[] = $row; $i = 0; $ids = []; } } return $a; }
Например, для получения всех событий и заметок, закрепленных за выбранными сделками, код будет следующим
class amoTable { ... public function __construct($config) { ... $this->leads = $response['leads']; // get events, notes $a = $this->getBatch($this->leads, 'id', 'notes/list', ['type' => 'lead'], 'element_id', 'notes'); ...
Теперь остается положить в каталог файл index.php
примерно следующего содержания
require(dirname(__FILE__) . '/amoTable.php'); $amoTable = new amoTable([ 'account' => 'your-amoCRM-account', 'email' => 'registered-email', 'api_key' => 'your-api-key', 'limit_rows' => getParam('maxleads', 500), 'limit_offset' => getParam('offset', 0), ]); $f = fopen('amo.csv', 'w'); foreach($amoTable->make() as $line) fwrite($f, "$line\n"); fclose($f); echo "Fine! Please, check amo.csv file."; function getParam($var, $default) { return isset($_GET[$var]) ? $_GET[$var] : $default; }
Заключение
Если у вас есть тестовый аккаунт на amoCRM.ru, вы можете посмотреть вид получаемого отчета на странице примеров sample.vorst.ru.
Оставить комментарий
Только авторизованные пользователи могут оставлять комментарии. Пожалуйста авторизуйтесь или пройдите регистрацию.
Можно авторизоваться, используя социальную сеть-
-
-
-