С официальной документацией по api amoCRM можно ознакомиться по ссылке:
https://www.amocrm.ru/developers/content/platform/abilities/
Все методы можно протестировать здесь https://www.amocrm.ru/developers/console/. Если у Вас что-то не получается, попробуйте сформировать запрос через консоль, предоставленную разработчиками amoCrm, и сравнить тело запроса с тем, которое пытаетесь отправить Вы.
Авторизация
Для авторизации Вам понадобится api ключ. Найти его можно в лично кабинете. Выглядеть он будет примерно так: cda34df432332ac00123e4da3be34fds342342fsd
Далее необходимо сформировать POST запрос на url yourhostname.amocrm.ru/private/api/auth.php?type=json
, где yourhostname - имя поддомена на amoCRM. Тело запроса должно содержать поля USER_LOGIN (ваш логин на amoCrm) и USER_HASH (api ключ), также нужно обратить внимание, что после успешной авторизации для последующих запросов нужно будет передавать cookie, так что сохраняем их.
var https = require('https'); /** * Тело запроса */ function login() { return new Promise(function(resolve, reject) { var body = { USER_LOGIN: 'test@test.ru', USER_HASH: 'cda34df432332ac00123e4da3be34fds342342fsd', }; var cookieForAmoCrm = []; /** * Преобразуем объект в строку */ body = JSON.stringify(body); var options = { host: "yourhostname.amocrm.ru", path: "/private/api/auth.php?type=json", method: 'POST', headers: { 'Content-Type': 'application/json' } }; var request = https.request(options, function(response) { /** * Срабатывает в момент ответа */ response.on('data', function (chunk) { /** * Парсим ответ * @type {any} */ var responseObj = JSON.parse(chunk); if (response.statusCode == 200) { /** * Сохраняем cookie */ cookieForAmoCrm = response.headers['set-cookie']; return resolve(responseObj); } else { return reject(responseObj); } }); }) request.write(body); /** * заканчиваем формирование запроса и отсылаем запрос */ request.end(); }) } login().then(function() { console.log('success') }, function(err) { console.log('error'); })
Авторизация выполнена, сессия длится 15 минут, так что следует после успешной авторизации запустить таймер с интервалом, меньшим, чем время длительности сессии и снова повторить тот же запрос, что и на авторизацию. Реализация с кроном с интервалом в 10 минут
new CronJob('*/10 * * * *', function () { login().then(function() { console.log('reconnected to amoCrm'); }, function(err) { console.log('cant reconnect to amoCrm') }) }, null, true, 'Europe/Moscow');
Авторизовавшись, нам становятся доступны все методы api
Создание сделки
Для создания простейшей сделки нам потребуется совершить POST запрос на yourhostname.amocrm.ru/private/api/v2/leads
с полем add – массив сделок, которые мы хотим добавить, поле name – название сделки (обязательное), sale – бюджет сделки
function createLead() { return new Promise(function(resolve, reject) { var body = { add: [ { name: 'Тестовая сделка', created_at: '2018-09-14T11:26:02.999Z', updated_at: '2018-09-14T11:26:02.999Z', sale: '5000' }, ] }; body = JSON.stringify(body); var options = { host: 'yourhostname.amocrm.ru', path: '/api/v2/leads', method: 'POST', headers: { 'Content-Type': 'application/json', 'Cookie': cookieForAmoCrm } }; var request = https.request(options, function(response) { /** * Срабатывает в момент ответа от танкера */ response.on('data', function (chunk) { var responseObj = JSON.parse(chunk); if (response.statusCode == 200) { return resolve(responseObj); } else { return reject(responseObj); } }); }) request.write(body); /** * отсылаем запрос */ request.end(); }) } createLead().then(function() { console.log('success'); }, function() { console.log('error'); })
Добавление дополнительного поля
Для большей гибкости в amoCRM есть возможность добавлять дополнительные поля для сделки, например, следует прикрепить ссылку к сделке.
Для этого создадим дополнительное поле "Фотография". Name – обязательный параметр, type – тип поля (в нашем случае URL, список доступных типов можно увидеть здесь https://www.amocrm.ru/developers/content/api/custom_fields), поле origin - идентификатор для последующего удаления поля.
function createCustomProperty() { return new Promise(function(resolve, reject) { var body = { add: [ { name: 'Фотография', type: '7', origin: 'image', } ] }; body = JSON.stringify(body); var options = { host: 'yourhostname.amocrm.ru', path: '/api/v2/fields', method: 'POST', headers: { 'Content-Type': 'application/json', 'Cookie': cookieForAmoCrm } }; var request = https.request(options, function(response) { /** * Срабатывает в момент ответа от танкера */ response.on('data', function (chunk) { var responseObj = JSON.parse(chunk); if (response.statusCode == 200) { return resolve(responseObj); } else { return reject(responseObj); } }); }) request.write(body); /** * заканчиваем формирование запроса и отсылаем запрос */ request.end(); }) } createCustomProperty().then(function(response) { console.log(response); }, function() { console.log('error'); })
В ответе мы увидим что-то подобное:
{ "_links": { "self": { "href": "/api/v2/fields","method":"post" } }, "_embedded": { "items": [{ "id":578725, "request_id":0, "_links": { "self": { "href":"/api/v2/fields?id=578725", "method":"get" } } }] } }
Нас интересует поле id: 578725
, данный id будет использоваться для задания значения полю в сделке.
Теперь создадим новую сделку с дополнительным полем "Фотография".
Все будет выглядеть так же, как и в пункте "создание сделки" за исключением тела запроса, оно будет выглядеть так:
var body = { add: [ { name: 'Сделка с дополнительным полем', created_at: '2018-09-14T11:26:02.999Z', updated_at: '2018-09-14T11:26:02.999Z', sale: '2000', custom_fields: [ { "id": "578725", "values": [ { "value": "https://www.amocrm.ru/developers/content/api/custom_fields" } ], } ], }, ] };
Таким образом вы можете задавать любые дополнительные поля для сделок.