vorst.ru - Статьи о задачах возникающих при создании сайта и их решении
vorst.ru
  • Главная
  • Услуги
  • Цены
  • Блог
  • Поиск
  • Галерея
  • Контакты
  • ru|en
  • Вход
Статьи помеченные amocrm

Пример работы с amoCRM

Как получить данные из amoCRM

Заказчик попросил вывести данные о сделках в таблицу в формате CSV. Данные должны быть максимально полными.

В том числе, необходимо вывести все возможные этапы сделки и даты, когда сделка переходила с этапа на этап. В amoCRM предусмотрена возможность определять этапы для каждой воронки продаж. Необходимо было, чтобы учитывались все этапы, всех воронок.

Ну и прочее - кто, когда, с кем, контакты клиента и, наконец, все комментарии к сделке.

Читать далее
amocrm


Поиск


Метки

  • Algorithm
  • Amocrm
  • Caching
  • Css
  • Elasticsearch
  • Event
  • Gulp
  • Modal
  • Nestedset
  • Oauth2
  • Plugin
  • Queue
  • Rbac
  • Searching
  • Shortcode
  • Upload
  • Validation
  • Wordpress
  • Yii2

Рубрики

Access Control 5
API 2
Data structure 4
Form 10
Speed up 3
Pattern 1

Пример работы с 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.

amocrm

Оставьте комментарий

Только зарегистрированные пользователи могут оставлять комментарии. Пожалуйста войдите или пройдите регистрацию.

    Можно авторизоваться, используя социальную сеть

Copyright ©, vorst.ru, 2016-2021