В этом материале рассмотрим по шагам процесс создания виджета amoCRM, функцией которого будет отправка данных аккаунта amoCRM в формате MS Word (docx) - в Google Docs. Порой это способно быть весьма удобно; в частности, представьте - находясь на страничке той или иной сделки, в любой момент нажимаем кнопку виджета в левом сайдбаре, и через пару секунд в ваших документах на Google уже появился новый док, содержащий всю информацию по сделке. Либо же - любые иные варианты использования, придумайте сами. Правда ведь, неплохая задумка?
Сразу оговорюсь: и статья и код представляют только концепт идеи. Частности, ввиду их невероятного разнообразия (погубят тебя слишком широкие возможности, говорил когда-то Айболит Бармалею в старом нашем добром Айболите-66) вам предстоит додумать самостоятельно. Никогда не надо бояться думать самостоятельно, это правило на все времена, тем более на времена наши... впрочем, я отвлекся. Описанный далее код, без купюр доступный на форуме, вытаскивает через API amoCRM любой необходимый вам массив, затем данные парсятся в файл MS Word, который незамедлительно вслед за этим отправится в ваши Google Drive и Google Docs; все происходит по нажатию одной только кнопки. Разумеется, предварительно необходимо авторизовать приложение в вашем Google-аккаунте, на чем останавливаться здесь не будем, сославшись на чуть более подробное описание на форуме (там же и описание кода, использованного для загрузки файлов через API Google Drive; кроме того, нам понадобятся, для решения поставленной задачи, и еще парочка классов). Итак, приступим.
Большую часть нашего основного рабочего скрипта index.php составляет код, описанный в топике Загрузка файлов через API Google Drive по ссылке выше; вам необходимо озаботиться правильностью путей к google-api-php-client (A PHP client library for accessing Google APIs, в любое время дня и ночи доступен на гитхабе) и директории files, содержащей сгенерированный док с инфой из amoCRM. В скобках добавим, что в контексте импорта в Google Docs генерировать именно файл MS Word не является в данном случае необходимым, см. там же на форуме по ссылке Google Drive API | REST | Uploading files: When creating a file in Google Drive, you can convert some types file into a Google Docs, Sheets or Slides document by specifying the mimeType property of the file. Не зря же потрачено время для написания столь подробных комментариев кода: здесь лишь концепт, делайте так, как наиболее применимо к вашим целям и задачам.
Идем далее. Участок кода, ответственный за импорт данных из amoCRM, выглядит у нас с вами вот так вот несложно:
require_once 'amocrm.phar';
try {
$amo = new \AmoCRM\Client('SUBDOMAIN', 'LOGIN', 'HASH');
$account = $amo->account;
$arr = ($amo->lead->apiList([
// 'query' => 'Илья',
]));
} catch (\AmoCRM\Exception $e) {
printf('Error (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
По секрету скажу, самых разнообразных классов для работы с API amoCRM на гитхабе несметное множество, под самые разнообразные языки программирования... вы можете попробовать любой приглянувшийся. В данном случае использован dotzero/amocrm-php, там же по ссылке и подробное описание по началу работы: с composer, без composer, quickstart. В принципе. самое трудоемкое здесь - это правильно вписать, при создании клиента, поддомен вашего аккаунта amoCRM, логин аккаунта (электронная почта) и ваш ключ API. Массив $arr создаем, пользуясь любым из двух десятков скриптов директории examples (здесь, в качестве простейшего примера, использован lead.php).
Небольшое отступление. Именно этот момент придется тщательно проработать, чтобы вновь созданное приложение целиком соответствовало вашим целям и задачам; внимательно изучите примеры, предварительно точно определив, какие именно данные аккаунта amoCRM вы намерены импортировать в Google Docs. На выходе amocrm-php вы получаете массив, способный предоставить любые необходимые данные, стоит лишь пробежаться по нему правильно сконструированным циклом (циклами). Здесь, собственно, и хранится изюминка проекта, на мысль о котором клиента одной из петербургских веб-студий навел бесплатный виджет от команды F5 (servicepanel.ru), действительно очень удобно реализующий возможность выгрузки из amoCRM практически любой информации по сделкам. Хранящийся на сервере разработчиков файл экспорта недоступен (на момент написания статьи) для прямого редактирования, что и привело к идее сделать что-то похожее, исправляющее, по мнению заказчика, этот недостаток. К сожалению, ТЗ оказалось сформулированным столь невнятно, а договоренность о разработке виджета - столь неопределенной, что не возникло желания глубоко уходить в этот проект: изначально было понятно, что разработке самой судьбой предназначено остаться учебным пособием для начинающих кодеров в этом блоге. Ну, а почему бы и нет, собственно... контент ведь всегда контент; кроме того - помогаем же мы всем, кто попросит помощи, на форуме. Так что вот. Но разработка может быть продолжена на коммерческой основе под те или иные узкоспециализированные задачи, обращайтесь, ежели что.
Уже подходим к концу. Вообще ведь несложно все, правда? Для генерирования дока использован класс VS PHP Word HTML: Create DOCX Word document dynamically from HTML от Raskin Veniamin, выглядит у нас это следующим образом:
require_once 'vsword/VsWord.php';
VsWord::autoLoad();
$doc = new VsWord();
$parser = new HtmlParser($doc);
$parser->parse('<h3>Сделки</h3>');
$parser->parse('<p>ID сделки = ' . $arr[0]['id'] . '</p>');
$parser->parse('<p>Название = ' . $arr[0]['name'] . '</p>');
$parser->parse('<p>Стоимость = ' . $arr[0]['price'] . '</p>');
$parser->parse('<p>ID сделки = ' . $arr[1]['id'] . '</p>');
$parser->parse('<p>Название = ' . $arr[1]['name'] . '</p>');
$parser->parse('<p>Стоимость = ' . $arr[1]['price'] . '</p>');
$parser->parse($html);
$doc->saveAs('files/deal.docx');
For example, я попросту вытащил из массива навскидку ряд значений, которые и отправляются в Google Docs в формате файла MS Word. Полностью код обработчика доступен, как и было сказано ранее, на форуме, а за ЦУ по созданию виджета amoCRM позвольте адресовать вас к материалу под названием Создаем виджет amoCRM, все достаточно подробно разжевано. Остался невыясненным только один, пожалуй, вопрос... каким образом нам с вами, находясь на страничке сделки amoCRM, получить идентификатор сделки, чтобы уже на основе ID выбрать из массива информацию в контексте только этой сделки? - что же, попробуйте следующим образом:
$('li[data-id=lead_id] span').text().substr(1);
Хорошего дня!