{"id":473077,"date":"2025-09-02T15:24:20","date_gmt":"2025-09-02T15:24:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=473077"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=473077","title":{"rendered":"<span>\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0440\u0443\u0447\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438: \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u0440\u0435\u0437\u044e\u043c\u0435 \u0438\u0437 hh.ru \u0432 \u0411\u0438\u0442\u0440\u0438\u043a\u044124<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0432\u0430\u043d, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/b24.o2k.ru\/?utm_source=habr&amp;utm_medium=cpc&amp;utm_campaign=statya_hh_bitrix24\" rel=\"noopener noreferrer nofollow\"><strong>KISLOROD<\/strong><\/a>. \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u0440\u0435\u0437\u044e\u043c\u0435 \u0441 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u0432 \u0411\u0438\u0442\u0440\u0438\u043a\u044124: \u043e\u0442 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 API \u0434\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0434\u0443\u0431\u043b\u044f\u043c\u0438 \u2014 \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0435\u0439 \u043c\u0430\u0433\u0438\u0438, \u043d\u043e \u0441 \u043a\u0443\u0447\u0435\u0439 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439.<\/p>\n<h3>\u041e \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/h3>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u2014 \u043a\u0440\u0443\u043f\u043d\u043e\u0435 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435. \u0412 \u0434\u0435\u043d\u044c \u2014 \u0434\u043e 40 \u0440\u0435\u0437\u044e\u043c\u0435 \u0441 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>, \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e: \u043e\u0442\u043a\u0440\u044b\u0442\u044c, \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u043a\u0443, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. HR-\u043e\u0442\u0434\u0435\u043b \u0442\u0440\u0430\u0442\u0438\u043b \u043d\u0430 \u044d\u0442\u043e \u043f\u043e 3\u20134 \u0447\u0430\u0441\u0430 \u0432 \u0434\u0435\u043d\u044c, \u043e\u0448\u0438\u0431\u043a\u0438, \u0434\u0443\u0431\u043b\u0438, \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u2014 \u0432\u0441\u0435 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435.<\/p>\n<p>\u0426\u0435\u043b\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0431\u043e\u0440 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u0438\u044f. \u0410 \u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u0440\u0430\u0437 \u0432 \u0441\u0443\u0442\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u0441 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c: \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f \u00ab\u0441\u0432\u0430\u0440\u0449\u0438\u043a\u00bb \u0438\u043b\u0438 \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0427\u041f\u0423\u00bb \u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u00ab\u0427\u0443\u0432\u0430\u0448\u0438\u044f\u00bb. \u0420\u0435\u0437\u044e\u043c\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Bitrix24, \u0433\u0434\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0438 \u0441\u0434\u0435\u043b\u043a\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f. \u0414\u0443\u0431\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u0438 \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/66a\/4ee\/27d\/66a4ee27d8fdae9703815a9079700a29.jpg\" width=\"700\" height=\"735\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/66a\/4ee\/27d\/66a4ee27d8fdae9703815a9079700a29.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/66a\/4ee\/27d\/66a4ee27d8fdae9703815a9079700a29.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 API hh.ru<\/h3>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a API <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 <a href=\"https:\/\/dev.hh.ru\/\" rel=\"noopener noreferrer nofollow\">dev.hh.ru<\/a>. \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0434\u043e \u0434\u0432\u0443\u0445 \u043d\u0435\u0434\u0435\u043b\u044c \u2014 \u043c\u044b \u0437\u0430\u043b\u043e\u0436\u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c.<\/p>\n<p>API \u043f\u043b\u0430\u0442\u043d\u043e\u0435: \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u0427\u0443\u0432\u0430\u0448\u0438\u0435\u0439. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 \u2014 N \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u2014 \u043d\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432.<\/p>\n<p>\u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u044e\u043c\u0435 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0442 \u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0440\u0430\u043d\u0435\u0435. \u041c\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 actions.get_with_contact.url: \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c actions.url \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/734\/a26\/40d\/734a2640d16bda9921d178641e83e605.jpg\" width=\"1200\" height=\"1260\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/734\/a26\/40d\/734a2640d16bda9921d178641e83e605.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/734\/a26\/40d\/734a2640d16bda9921d178641e83e605.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f, \u043d\u043e \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438<\/h3>\n<p><a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 OAuth 2.0. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a API, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0439\u0442\u0438 \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u044e. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 authorization_code, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 accessToken \u0438 refreshToken.<\/p>\n<p>\u041e\u0431\u043c\u0435\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 POST-\u0437\u0430\u043f\u0440\u043e\u0441: POST <a href=\"https:\/\/hh.ru\/oauth\/token\" rel=\"noopener noreferrer nofollow\">https:\/\/hh.ru\/oauth\/token<\/a><\/p>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 accessToken \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 expires_in \u2014 \u043e\u043d \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u042d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0441\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c accessToken \u0440\u0430\u043d\u044c\u0448\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 expires_in, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043a\u0435\u043d, \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a API.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u043a\u0435\u043d \u043d\u0435 \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d, \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 401 Unauthorized \u0438 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u0432\u043f\u0443\u0441\u0442\u0443\u044e.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0438, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0439: \u0442\u043e\u043a\u0435\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/h4>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">\/**  * \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u044b accessToken \u0438 refreshToken.  * code - \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u044f\u0441\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https:\/\/hh.ru\/oauth\/authorize?response_type=code&amp;client_id={client_id}  *\/ public function getFirstTokens($code) {     $parameters = [         'grant_type' =&gt; 'authorization_code',         'client_id' =&gt; self::CLIENT_ID,         'client_secret' =&gt; self::CLIENT_SECRET,         'code' =&gt; $code     ];          $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE);     $currentTime = time();     $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);      $result = json_decode($response);          if ($result-&gt;access_token) {         $this-&gt;setAccessToken($result-&gt;access_token);         Option::set('main', 'access_token', $result-&gt;access_token);     }     if ($result-&gt;refresh_token) {         $this-&gt;setRefreshToken($result-&gt;refresh_token);         Option::set('main', 'refresh_token', $result-&gt;refresh_token);     }     if ($result-&gt;expires_in) {         $tokenEndTime = $currentTime + $result-&gt;expires_in;         $this-&gt;setTokenEndTime($tokenEndTime);         Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in);     } }  public function refreshTokens() {     $refreshToken = $this-&gt;getRefreshToken();          if (!$refreshToken) {         return false;     }          $tokenEndTime = $this-&gt;getTokenEndTime();     $currentTime = time();      if ($tokenEndTime &gt; $currentTime) {         return false;     }          $parameters = [         'grant_type' =&gt; 'refresh_token',         'refresh_token' =&gt; $refreshToken     ];          $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE);     $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);      $result = json_decode($response);      if ($result-&gt;error) {         return false;     }          if ($result-&gt;access_token) {         $this-&gt;setAccessToken($result-&gt;access_token);         Option::set('main', 'access_token', $result-&gt;access_token);     }     if ($result-&gt;refresh_token) {         $this-&gt;setRefreshToken($result-&gt;refresh_token);         Option::set('main', 'refresh_token', $result-&gt;refresh_token);     }     if ($result-&gt;expires_in) {         $tokenEndTime = $currentTime + $result-&gt;expires_in;         $this-&gt;setTokenEndTime($tokenEndTime);         Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in);     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c area: \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0435\u0437\u044b<\/h3>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/hh.ru\/resumes\" rel=\"noopener noreferrer nofollow\">hh.ru\/resumes<\/a> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0437\u044e\u043c\u0435 \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043d\u043e \u0438 \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0443. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u0430\u0437\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443: \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0427\u0443\u0432\u0430\u0448\u0438\u044e \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u0438\u0437 \u041c\u043e\u0441\u043a\u0432\u044b, \u041f\u0438\u0442\u0435\u0440\u0430 \u0438 \u0434\u0430\u0436\u0435 \u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\u0430 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u00ab\u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0443\u00bb.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7d2\/7a2\/426\/7d27a24268cd7fadcac6a225fe262681.jpg\" width=\"2520\" height=\"2328\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7d2\/7a2\/426\/7d27a24268cd7fadcac6a225fe262681.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7d2\/7a2\/426\/7d27a24268cd7fadcac6a225fe262681.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 GET \/areas \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 id (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0427\u0443\u0432\u0430\u0448\u0438\u044f \u0438 \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u044e\u0449\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u043a\u0430\u043a area=1652&amp;area=3680, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 area \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u0435\u0442 hh API. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 (area[]=&#8230;), \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u2014 \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0438 \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u00ab\u0441\u0432\u043e\u0435\u043d\u0440\u0430\u0432\u043d\u044b\u043c\u00bb: \u043d\u0430 \u043d\u0435\u0433\u043e \u0443\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438. \u0411\u0435\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 area \u0444\u0438\u043b\u044c\u0442\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u044d\u0442\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0440\u0435\u0437\u044e\u043c\u0435 \u043d\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u2014 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u044f\u043b\u0438, \u043a\u0430\u043a hh API \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e: \u0432 CRM \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u043d\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u00ab\u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0443\u00bb.<\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 API<\/h4>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php  namespace O2k\\HeadHunter\\Integration;  use \\Bitrix\\Main\\Config\\Option;  class Api { const CLIENT_ID = '...'; const CLIENT_SECRET = '...'; const SERVICE_URL = 'https:\/\/hh.ru\/'; const API_URL = 'https:\/\/api.hh.ru\/'; const APPLICATION_NAME = '\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 CRM \u0411\u0438\u0442\u0440\u0438\u043a\u044124'; const APPLICATION_EMAIL = '...'; const RESOURCE_AUTHENTICATE = 'oauth\/token'; const RESOURCE_RESUMES = 'resumes'; const RESOURCE_AREAS = 'areas';  const METHOD_GET = 'GET';     const METHOD_POST = 'POST';  private $accessToken; private $refreshToken;  \/**  * \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u044b accessToken \u0438 refreshToken.  * code - \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u044f\u0441\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https:\/\/hh.ru\/oauth\/authorize?response_type=code&amp;client_id={client_id}  *\/ public function getFirstTokens($code) { $parameters = [ 'grant_type' =&gt; 'authorization_code', 'client_id' =&gt; self::CLIENT_ID, 'client_secret' =&gt; self::CLIENT_SECRET, 'code' =&gt; $code ];  $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE); $currentTime = time(); $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);  $result = json_decode($response);  if ($result-&gt;access_token) { $this-&gt;setAccessToken($result-&gt;access_token); Option::set('main', 'access_token', $result-&gt;access_token); } if ($result-&gt;refresh_token) { $this-&gt;setRefreshToken($result-&gt;refresh_token); Option::set('main', 'refresh_token', $result-&gt;refresh_token); } if ($result-&gt;expires_in) { $tokenEndTime = $currentTime + $result-&gt;expires_in; $this-&gt;setTokenEndTime($tokenEndTime); Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in); } }  public function refreshTokens() { $refreshToken = $this-&gt;getRefreshToken();  if (!$refreshToken) { return false; }  $tokenEndTime = $this-&gt;getTokenEndTime(); $currentTime = time();  if ($tokenEndTime &gt; $currentTime) { return false; }  $parameters = [ 'grant_type' =&gt; 'refresh_token', 'refresh_token' =&gt; $refreshToken ];  $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE); $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);  $result = json_decode($response);  if ($result-&gt;error) { return false; }  if ($result-&gt;access_token) { $this-&gt;setAccessToken($result-&gt;access_token); Option::set('main', 'access_token', $result-&gt;access_token); } if ($result-&gt;refresh_token) { $this-&gt;setRefreshToken($result-&gt;refresh_token); Option::set('main', 'refresh_token', $result-&gt;refresh_token); } if ($result-&gt;expires_in) { $tokenEndTime = $currentTime + $result-&gt;expires_in; $this-&gt;setTokenEndTime($tokenEndTime); Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in); } }  public function getResumes($parameters) { $pageNumber = $pagesCount = 0; $items = [];  do { $parameters['page'] = $pageNumber; $pageNumber++;  $uri = $this-&gt;getUri(self::API_URL, self::RESOURCE_RESUMES, $parameters); if ($uri) { $response = $this-&gt;doRequest($uri, self::METHOD_GET); $result = json_decode($response, true); $items = array_merge($items, $result['items']); $pagesCount = $result['pages']; } } while ($pageNumber &lt; $pagesCount);  if ($items) { $this-&gt;excludeAnonymousResumes($items, ['email', 'phones']); }  return $items; }  protected function excludeAnonymousResumes(&amp;$items, $checkedFields) { foreach ($items as $key =&gt; $item) { $hiddenIds = []; if ($item['hidden_fields'] &amp;&amp; is_array($item['hidden_fields'])) { foreach ($item['hidden_fields'] as $hiddenField) { $hiddenIds[] = $hiddenField['id']; }  if (!array_diff($checkedFields, $hiddenIds)) { unset($items[$key]); } } } }  public function getContacts($items)     {         $contacts = [];          foreach ($items as $item) {             $urlContact = $item[\"actions\"][\"get_with_contact\"][\"url\"] ? $item[\"actions\"][\"get_with_contact\"][\"url\"] : $item[\"url\"];             $contactData = $this-&gt;getResumeContact($urlContact);              $calcStage = floor($contactData[\"total_experience\"][\"months\"] \/ 12);             $last = $contactData[\"total_experience\"][\"months\"] - $calcStage * 12;             $calcStage .= ' \u043b\u0435\u0442 '.$last.' \u043c\u0435\u0441.';              $stage = $contactData[\"total_experience\"][\"months\"] &gt; 12 ? $calcStage : $contactData[\"total_experience\"][\"months\"].' \u043c.';              $phone = '';             $email = '';             foreach ($contactData[\"contact\"] as $contact) {                 if ($contact[\"type\"][\"id\"] == 'cell') {                     $phone .= $contact[\"value\"][\"formatted\"];                 } elseif ($contact[\"type\"][\"id\"] == 'email') {                     $email = $contact[\"value\"];                 }             }              $contacts[] = [                 \"id\" =&gt; $item[\"id\"],                 \"ORIGIN_ID\" =&gt; $item[\"id\"],                 \"POST\" =&gt; $contactData[\"title\"],                 \"owner_id\" =&gt; $contactData[\"owner\"][\"id\"],                 \"NAME\" =&gt; $contactData[\"first_name\"],                 \"LAST_NAME\" =&gt; $contactData[\"last_name\"],                 \"SECOND_NAME\" =&gt; $contactData[\"middle_name\"],                 \"DATE_CREATE\" =&gt; $contactData[\"created_at\"],                 \"DATE_MODIFY\" =&gt; $contactData[\"updated_at\"],                 \"gender\" =&gt; $contactData[\"gender\"][\"name\"],                 \"mount\" =&gt; $stage,                 \"TYPE_ID\" =&gt; \"CLIENT\",                 \"UTM_SOURCE\" =&gt; \"HH.RU API\",                 \"URL_DOWNLOAD_RESUME\" =&gt; $this-&gt;downloadResume($item['actions']['download']['pdf']['url'], $item[\"id\"]),                 \"PHONE\" =&gt; [                     [                         \"VALUE\" =&gt; $phone,                         \"VALUE_TYPE\" =&gt; \"WORK\"                     ]                 ],                 \"EMAIL\" =&gt; [                     [                         \"VALUE\" =&gt; $email                     ]                 ],                 \"link_resume\" =&gt; $contactData['alternate_url'],                 \"deal\" =&gt; $item[\"salary\"]             ];         }          return $contacts;     }      public function downloadResume($url, $fileId = '')     {         $strChunk = explode('.',$url);         $expTmp = explode('?', end($strChunk));         $exp = array_shift($expTmp);          if ($fileId == '') {             $fileId = md5($url); }          $saveName = $fileId.'.'.$exp;         $savePath = $_SERVER[\"DOCUMENT_ROOT\"].'\/upload\/resume_'.$saveName;          $uri = $this-&gt;getUri($url, '');         if ($uri) {             $rawPdf = $this-&gt;doRequest($uri, self::METHOD_GET);             $isSave = file_put_contents($savePath, $rawPdf);              return [                 \"filePath\" =&gt; $savePath,                 \"resultSave\" =&gt; $isSave             ];         }          return false;     }  public function getResumeContact($uri) { if (!$uri) { return false; }  $response = $this-&gt;doRequest($uri, self::METHOD_GET);  return json_decode($response, true); }  public function getAreas() { $result = [];  $uri = $this-&gt;getUri(self::API_URL, self::RESOURCE_AREAS);  if ($uri) { $response = $this-&gt;doRequest($uri, self::METHOD_GET);  $result = json_decode($response); }  return $result; }  public function getStartEventTime() { $startTimestamp = Option::get(\"main\", \"hhru_start_time\", null); $startTime = new \\DateTime();  if ($startTimestamp) { $startTime-&gt;setTimestamp($startTimestamp); } else { $startTime-&gt;modify('-1 month'); }  return $startTime; }  public function setStartEventTime(\\DateTime $startTime) { $startTimestamp = $startTime-&gt;getTimestamp(); Option::set(\"main\", \"hhru_start_time\", $startTimestamp); }  protected function setAccessToken($token) { $this-&gt;accessToken = $token; }  protected function getAccessToken() { if (!$this-&gt;accessToken) { $this-&gt;accessToken = Option::get('main', 'access_token'); }  return $this-&gt;accessToken; }  protected function setRefreshToken($token) { $this-&gt;refreshToken = $token; }  protected function getRefreshToken() { if (!$this-&gt;refreshToken) { $this-&gt;refreshToken = Option::get('main', 'refresh_token'); }  return $this-&gt;refreshToken; }  protected function setTokenEndTime($endTime) { $this-&gt;tokenEndTime = $endTime; }  protected function getTokenEndTime() { if (!$this-&gt;tokenEndTime) { $this-&gt;tokenEndTime = Option::get('main', 'token_end_time', 0); }  return $this-&gt;tokenEndTime; }  protected function getUri($url = self::API_URL, $resource, $params = []) { $uri = $url.$resource;  if ($params) {             $area = $params['area'];             unset($params['area']);     $uri .= '?'.http_build_query($params);             foreach($area as $l=&gt;$v){                 $uri .= '&amp;area='.$v;             } }  return $uri; }  protected function buildRequestHeaders($tokenHeader)     { if ($tokenHeader &amp;&amp; $token = $this-&gt;getAccessToken()) { return [ 'Authorization: Bearer '.$token, 'User-Agent: '.self::APPLICATION_NAME.' ('.self::APPLICATION_EMAIL.')' ]; }          return ['Content-Type: application\/x-www-form-urlencoded'];     }  protected function doRequest($uri, $method = self::METHOD_GET, $data = [], $tokenHeader = true)     { $ch = curl_init($uri);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 180);         curl_setopt($ch, CURLOPT_HTTPHEADER, $this-&gt;buildRequestHeaders($tokenHeader));          if ($method == self::METHOD_POST) {             curl_setopt($ch, CURLOPT_POST, 0);             curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data);         }         elseif ($method == self::METHOD_GET) {             curl_setopt($ch, CURLOPT_HTTPGET, 1);             curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);         }          $response = curl_exec($ch);          curl_close($ch);          return $response;     } } <\/code><\/pre>\n<\/div>\n<\/details>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0437\u044e\u043c\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f accessToken \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 <a href=\"https:\/\/hh.ru\/resumes\" rel=\"noopener noreferrer nofollow\">hh.ru\/resumes<\/a> \u2014 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0437\u044e\u043c\u0435, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f\u043c, \u0440\u0435\u0433\u0438\u043e\u043d\u0443 \u0438 \u0434\u0430\u0442\u0435. \u041f\u043e\u043c\u0438\u043c\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u043b\u044e\u0447 actions.get_with_contact.url, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u2014 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 URL \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u0442\u043a\u0440\u044b\u0442 \u0440\u0430\u043d\u0435\u0435, get_with_contact \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f. \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e actions.url, \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441. \u0415\u0441\u043b\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0441\u043a\u0440\u044b\u043b \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0431\u0440\u0430\u043b e\u2011mail \u0438\u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430, get_with_contact \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442, \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440, \u043d\u043e \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u2014 \u043e\u043d\u0438 \u043f\u0440\u0438\u0434\u0443\u0442 \u043a\u0430\u043a null. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u0432\u043f\u0443\u0441\u0442\u0443\u044e, \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e\u043b\u0435 hidden_fields. \u0415\u0441\u043b\u0438 \u0432 \u043d\u0435\u043c \u043d\u0435\u0442 e\u2011mail \u0438\u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0440\u0435\u0437\u044e\u043c\u0435 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u2014 \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043c\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430 \u00ab\u043f\u0443\u0441\u0442\u044b\u0445\u00bb \u0440\u0435\u0437\u044e\u043c\u0435.<\/p>\n<p>\u0418\u0437 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u0446\u0438\u043a\u043b\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0437\u0430\u043f\u0440\u043e\u0441 <a href=\"http:\/\/crm.contact\" rel=\"noopener noreferrer nofollow\">crm.contact<\/a>.list.json \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430 \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u043e\u043b\u044f EMAIL.<\/p>\n<p>\u0422\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0411\u0438\u0442\u0440\u0438\u043a\u0441\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0443\u0436\u0435 \u043f\u043e\u0434\u0430\u043d\u0430 \u0437\u0430\u044f\u0432\u043a\u0430 \u043d\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 crm.duplicate.findbycomm, \u043d\u043e \u043e\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u0443\u0434\u043e\u0431\u0435\u043d \u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 \u0434\u043e 20 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0437\u0430\u0434\u0430\u0447\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 e\u2011mail \u0437\u0430 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b, \u043b\u0438\u043c\u0438\u0442 \u043d\u0435 \u0441\u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0437\u0440\u044f, \u0438 \u0434\u0443\u0431\u043b\u0435\u0439 \u043d\u0435\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u0430\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Bitrix24.<\/p>\n<p>\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u0424\u0418\u041e, e\u2011mail, \u0442\u0435\u043b\u0435\u0444\u043e\u043d, \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u2014 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>. \u0421 \u043d\u0438\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u043f\u043e e\u2011mail<\/strong> \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 <a href=\"http:\/\/crm.contact\" rel=\"noopener noreferrer nofollow\">crm.contact<\/a>.list.json.<\/p>\n<\/li>\n<li>\n<p><strong>\u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430\u0439\u0434\u0435\u043d<\/strong> \u2014 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0415\u0441\u043b\u0438 e\u2011mail \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 CRM<\/strong> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u0434\u0435\u043b\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c PDF-\u0444\u0430\u0439\u043b \u0440\u0435\u0437\u044e\u043c\u0435<\/strong> \u0447\u0435\u0440\u0435\u0437 <a href=\"http:\/\/actions.download\" rel=\"noopener noreferrer nofollow\">actions.download<\/a>.pdf.url \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u043c \u043a \u0441\u0434\u0435\u043b\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/strong>: \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u2014 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>, \u0434\u0430\u0442\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0440\u0435\u0433\u0438\u043e\u043d.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 REST API Bitrix24. \u041c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0438\u043b\u0438 \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u2014 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0435\u0448\u0438\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e CRM: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 CRM<\/h4>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php  namespace O2k\\HeadHunter\\Integration\\Bitrix24;  use Bitrix\\Main\\Localization\\Loc;  class Controller {     protected const CONTACT_HASH_FIELD = 'UF_CRM_\u2026';     protected const RESUME_FILE = 'UF_CRM_\u2026';     protected const PROFESSION_FIELD = 'UF_CRM_\u2026';      const ASSIGNED = 264; \/\/ \u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f     const SOURCE = 104; \/\/ \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a ID      protected $webHookParam = 'hh.ru';     protected $webHook; protected $professions = ['\u0441\u0432\u0430\u0440\u0449\u0438\u043a', '\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0427\u041f\u0423'];      public function __construct()     {         $this-&gt;webHook = new \\O2k\\Crm\\Webhook($this-&gt;webHookParam);     }          public function getWebHook()     {         return $this-&gt;webHook;     }      public function import($contacts)     {         $countVacancy = 0;         foreach ($contacts as $contact) { if ($this-&gt;checkForDuplicate($contact)) { $contactId = $this-&gt;addContact($contact); $this-&gt;addDeal($contact, $contactId); $countVacancy++; }         }     }  protected function getContactEmails($contacts) { $emails = []; foreach ($contacts as $contact) { $emails[] = $contact['EMAIL'][0]['VALUE']; }  return $emails; }  protected function getContactIds($contacts) { $ids = []; foreach ($contacts as $contact) { $ids[] = $contact['id']; }  return $ids; }  protected function checkContactForExistence($contact, $existingContacts) { $contactEmail = $contact['EMAIL'][0]['VALUE'];  if ( $existingContacts[$contactEmail] &amp;&amp; $existingContacts[$contactEmail]['NAME'] == $contact['NAME'] &amp;&amp; $existingContacts[$contactEmail]['SECOND_NAME'] == $contact['SECOND_NAME'] &amp;&amp; $existingContacts[$contactEmail]['LAST_NAME'] == $contact['LAST_NAME'] ) { return true; }  return false; }      \/**  * \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442, \u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0434\u0435\u043b\u043a\u0438,  * \u0442.\u043a. \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0430 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c.  *\/     public function getContactList($ids)     {         $webhook = $this-&gt;getWebHook();         $contactId = 0;         $finish = false;          $existingContacts = [];  if ($ids) { while (!$finish) { $arContactsData = [ 'order' =&gt; [\"ID\" =&gt; \"DESC\"], 'filter' =&gt; [ '&gt;ID' =&gt; $contactId, self::CONTACT_HASH_FIELD =&gt; $ids ], 'select' =&gt; [ 'ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', \"PHONE\", 'LAST_NAME', 'EMAIL', self::CONTACT_HASH_FIELD ], 'start' =&gt; '-1' ];  $arContactList = $webhook-&gt;send('crm.contact.list.json', $arContactsData);  if (count($arContactList-&gt;result) &gt; 0) { foreach ($arContactList-&gt;result as $contact) { $contactId = $contact-&gt;ID;  $phone = array_shift($contact-&gt;PHONE); $email = array_shift($contact-&gt;EMAIL);  $existingContacts[$contact-&gt;{self::CONTACT_HASH_FIELD}] = [ 'ID' =&gt; $contact-&gt;ID, 'FULL_NAME' =&gt; $this-&gt;getFullName($contact), 'NAME' =&gt; $contact-&gt;NAME, 'SECOND_NAME' =&gt; $contact-&gt;SECOND_NAME, 'LAST_NAME' =&gt; $contact-&gt;LAST_NAME, 'XML_ID' =&gt; $contact-&gt;{self::CONTACT_HASH_FIELD}, 'EMAIL' =&gt; $email-&gt;VALUE, 'PHONE' =&gt; $phone-&gt;VALUE ]; } } else { $finish = true; } } }         return $existingContacts;     }      public function getFullName($params)     {         return implode(' ',[             $params-&gt;NAME,             $params-&gt;SECOND_NAME,             $params-&gt;LAST_NAME,         ]);     }      public function getContactsWithDeal($contactId)     {         $arContacts = [];          if ($contactId) {              $webhook = $this-&gt;getWebHook();              $dealId = 0;             $finish = false;              while (!$finish) {                 $arDealData = [                     'order' =&gt; [\"ID\" =&gt; \"ASC\"],                     'filter' =&gt; ['&gt;ID' =&gt; $dealId, 'CONTACT_ID' =&gt; $contactId],                     'select' =&gt; ['ID', 'CONTACT_ID'],                     'start' =&gt; '-1'                 ];                  $arDealList = $webhook-&gt;send('crm.deal.list.json', $arDealData);                  if (count($arDealList-&gt;result) &gt; 0) {                     foreach ($arDealList-&gt;result as $arDeal) {                         $dealId = $arDeal-&gt;ID;                          if ($dealId) {                             $arContacts[$arDeal-&gt;CONTACT_ID] = $arDeal-&gt;CONTACT_ID;                         }                     }                 } else {                     $finish = true;                 }             }         }          return $arContacts;     }  public function checkForDuplicate($data) { $webhook = $this-&gt;getWebHook();          if ($data['EMAIL'][0]['VALUE'] &amp;&amp; $data['NAME']) { $arContactsData = [ 'filter' =&gt; [ 'EMAIL' =&gt; $data['EMAIL'][0]['VALUE'], 'NAME' =&gt; $data['NAME'], 'SECOND_NAME' =&gt; $data['SECOND_NAME'], 'LAST_NAME' =&gt; $data['LAST_NAME'] ], 'select' =&gt; ['ID'] ];  $arContactList = $webhook-&gt;send('crm.contact.list.json', $arContactsData);  if (count($arContactList-&gt;result) == 0) { return true; } }  return false; }      public function addContact($data)     {         $webhook = $this-&gt;getWebHook();          $data[self::CONTACT_HASH_FIELD] = $data[\"id\"];         $data['SOURCE_ID'] = self::SOURCE;         $data['ASSIGNED_BY_ID'] = self::ASSIGNED;          $arContactData = [             'fields' =&gt; $data,             'params' =&gt; ['REGISTER_SONET_EVENT' =&gt; 'Y']         ];         $result = $webhook-&gt;send('crm.contact.add.json', $arContactData);          return $result-&gt;result;     }      public function updateContact($data, $id)     {         $webhook = $this-&gt;getWebHook();         $arContactData = [             'id' =&gt; $id,             'fields' =&gt; $data,             'params' =&gt; ['REGISTER_SONET_EVENT' =&gt; 'Y']         ];          return $webhook-&gt;send('crm.contact.update.json', $arContactData);     }      public function addDeal($data, $contactId, $isFirstDeal = true)     {         $webhook = $this-&gt;getWebHook();          $arLeadData = [             'fields' =&gt; [                 \"TITLE\" =&gt; $data[\"NAME\"].' '.$data[\"LAST_NAME\"].\" \".$data[\"POST\"],                 \"SOURCE_ID\" =&gt; self::SOURCE,                 \"UTM_SOURCE\" =&gt; \"HH.RU API\",                 \"CURRENCY_ID\" =&gt; $this-&gt;prepareCurrency($data[\"deal\"][\"currency\"]),                 \"CATEGORY_ID\" =&gt; 5,                 \"ASSIGNED_BY_ID\" =&gt; self::ASSIGNED,                 \"OPPORTUNITY\" =&gt; $data[\"deal\"][\"amount\"],                 \"BEGINDATE\" =&gt; date('Y-m-dTH:i:s+03:00'),                 \"STAGE_ID\" =&gt; \"C5:NEW\",                 self::RESUME_FILE =&gt; $this-&gt;getFileResume($data[\"URL_DOWNLOAD_RESUME\"])             ],             'params' =&gt; ['REGISTER_SONET_EVENT' =&gt; 'Y']         ];  if ($data[\"POST\"] &amp;&amp; $this-&gt;professions) { foreach ($this-&gt;professions as $profession) { if (mb_stripos($data[\"POST\"], $profession) !== false) { $arLeadData['fields'][self::PROFESSION_FIELD] = $profession; break; } } }          $deal = $webhook-&gt;send('crm.deal.add', $arLeadData);          if ($deal-&gt;result) {             if ($contactId) {                 $arContactFields = [                     'id' =&gt; intval($deal-&gt;result),                     'fields' =&gt; [                         'CONTACT_ID' =&gt; $contactId,                         \"IS_PRIMARY\" =&gt; $isFirstDeal,                         \"SOURCE_ID\" =&gt; self::SOURCE,                         \"UTM_SOURCE\" =&gt; \"HH.RU API\",                     ]                 ];                  $contact = $webhook-&gt;send('crm.deal.contact.add', $arContactFields);             }         }          $result = [             \"deal\" =&gt; $deal,             \"contact\" =&gt; $contact         ];          return $result;     }  protected function prepareCurrency($currencyCode) { if ($currencyCode == 'RUR') { return 'RUB'; }  return $currencyCode; }      public function getFileResume($params = [])     {         if(!$params['filePath']) return false;          $filePath = $params['filePath'];         $resume = [             'fileData'=&gt; [                 end(                     explode('\/', $filePath)                 ),                 base64_encode(                     file_get_contents($filePath)                 )             ]         ];         unlink($filePath);          return $resume;     }      public function getDeal($id)     {         $webhook = $this-&gt;getWebHook();         print_r($webhook-&gt;send('crm.deal.get', [\"id\" =&gt;$id]));     }      public function updateDeal($id, $fields){         $webhook = $this-&gt;getWebHook();          $result = $webhook-&gt;send('crm.deal.update', [             \"id\" =&gt;$id,             \"fields\" =&gt; $fields         ]);          print_r([             $result,             func_get_args()         ]);     } } <\/code><\/pre>\n<\/div>\n<\/details>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0446\u0438\u043a\u043b<\/h3>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u2014 \u0432\u0441\u0451 \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043e \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 API <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u0438 Bitrix24. \u0420\u0430\u0441\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<ol>\n<li>\n<p><strong>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0437\u044e\u043c\u0435<\/strong> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/hh.ru\/resumes\" rel=\"noopener noreferrer nofollow\">hh.ru\/resumes<\/a> \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 (\u0440\u0435\u0433\u0438\u043e\u043d, \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f, \u043f\u0435\u0440\u0438\u043e\u0434).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u043b\u0435 hidden_fields \u0435\u0441\u0442\u044c email \u0438\u043b\u0438 phone, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c. \u0418\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0435\u0437\u044e\u043c\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u043d\u0430 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0431\u044b\u043b \u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 get_with_contact.url, \u0437\u043d\u0430\u0447\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0437\u0430 \u043d\u0438\u0445 \u0441\u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e actions.url \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u0442\u043a\u0440\u044b\u0442 \u0440\u0430\u043d\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c PDF<\/strong> \u2014 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043f\u043e actions.download.pdf.url \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0440\u0435\u0437\u044e\u043c\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0434\u0435\u043b\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0432 CRM<\/strong> \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c crm.contact.list \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u043f\u043e e\u2011mail.\u00a0<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0438 \u0441\u0434\u0435\u043b\u043a\u0443<\/strong> \u2014 \u0435\u0441\u043b\u0438 e\u2011mail \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0441 \u0424\u0418\u041e, \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u043c \u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c\u044e. \u0414\u0430\u043b\u0435\u0435 \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0434\u0435\u043b\u043a\u0443 \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u043c PDF, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0438 \u0434\u0430\u0442\u043e\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0430\u043f\u044b \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0442\u043e\u043a\u0435\u043d\u0443 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u2014 \u0432 \u043b\u043e\u0433\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u044b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/050\/b38\/c51\/050b38c51ab482177c2034e9c776816d.jpg\" width=\"1200\" height=\"630\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/050\/b38\/c51\/050b38c51ab482177c2034e9c776816d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/050\/b38\/c51\/050b38c51ab482177c2034e9c776816d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438<\/h3>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 HR-\u043e\u0442\u0434\u0435\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e.<\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0435\u0437\u044e\u043c\u0435 \u0441 hh \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<br \/><\/strong>\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c \u0438 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f\u043c \u0438 \u0441\u0430\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0438\u0445 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0438 \u0441\u0434\u0435\u043b\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f HR<br \/><\/strong>\u0415\u0441\u043b\u0438 \u0443 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0438 \u043e\u043d \u0435\u0449\u0435 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 CRM, \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438 \u0441\u0434\u0435\u043b\u043a\u0438. \u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442 PDF-\u0444\u0430\u0439\u043b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. HR \u0432\u0438\u0434\u0438\u0442 \u0443\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0434\u0435\u043b\u043a\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u043c\u0438 \u043e\u0442\u043a\u043b\u0438\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16b\/87c\/c91\/16b87cc916c4aa676855fa5c75f854ab.jpg\" alt=\"\u0412\u0441\u0435 \u0441\u0434\u0435\u043b\u043a\u0438\" title=\"\u0412\u0441\u0435 \u0441\u0434\u0435\u043b\u043a\u0438\" width=\"1680\" height=\"884\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/16b\/87c\/c91\/16b87cc916c4aa676855fa5c75f854ab.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16b\/87c\/c91\/16b87cc916c4aa676855fa5c75f854ab.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435 \u0441\u0434\u0435\u043b\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c9\/322\/abf\/5c9322abf9c765549d341d414fda60f5.jpg\" alt=\"\u0421\u0434\u0435\u043b\u043a\u0430 \u043f\u043e \u0440\u0435\u0437\u044e\u043c\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\" title=\"\u0421\u0434\u0435\u043b\u043a\u0430 \u043f\u043e \u0440\u0435\u0437\u044e\u043c\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\" width=\"1680\" height=\"1067\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5c9\/322\/abf\/5c9322abf9c765549d341d414fda60f5.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c9\/322\/abf\/5c9322abf9c765549d341d414fda60f5.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0434\u0435\u043b\u043a\u0430 \u043f\u043e \u0440\u0435\u0437\u044e\u043c\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/631\/e5d\/69f\/631e5d69fdab29c717a98cc5e6e54279.jpg\" alt=\"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443\" title=\"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443\" width=\"1680\" height=\"1067\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/631\/e5d\/69f\/631e5d69fdab29c717a98cc5e6e54279.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/631\/e5d\/69f\/631e5d69fdab29c717a98cc5e6e54279.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p><strong>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0443\u0431\u043b\u0435\u0439<br \/><\/strong>\u041a\u0430\u0436\u0434\u043e\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e e\u2011mail: \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u043d\u043e\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u044b \u0432 CRM \u0438 \u043d\u0435 \u0440\u0430\u0441\u043f\u044b\u043b\u044f\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0441\u0445\u043e\u0434 \u043b\u0438\u043c\u0438\u0442\u0430 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0437\u044e\u043c\u0435<br \/><\/strong>\u041c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0438 hidden_fields. \u042d\u0442\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043f\u0440\u0438 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u2014 \u044d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e<br \/><\/strong>\u0412\u0441\u0435 \u0448\u0430\u0433\u0438 \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442\u0441\u044f: \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 PDF. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430\u00a0 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u0435\u0442\u0435\u043b \u0442\u043e\u043a\u0435\u043d \u0438\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0435 \u0432\u0438\u0434\u043d\u043e \u0441\u0440\u0430\u0437\u0443. HR \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0432 \u043a\u043e\u0434\u0435. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 CRM: \u043d\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439 API \u2014 \u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.<\/p>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f, \u043d\u043e \u0441 \u043a\u0443\u0447\u0435\u0439 \u043d\u044e\u0430\u043d\u0441\u043e\u0432. \u041c\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043b\u043e\u0432\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c hh API: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0435\u0437\u044e\u043c\u0435 \u0431\u0435\u0437 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0435 actions. \u0418\u043b\u0438 \u0441\u043b\u0435\u0442\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0443, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043a\u0430\u0442\u0430\u043b\u0438 \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443: \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438 \u0434\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0440\u0435\u0437\u044e\u043c\u0435 \u0431\u0435\u0437 \u0434\u0432\u043e\u0439\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438\u043c\u043f\u043e\u0440\u0442 \u0440\u0435\u0437\u044e\u043c\u0435 \u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435, \u043a\u0430\u043a \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u0434\u0443\u0431\u043b\u044f\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438. \u0410 \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u043c, \u043d\u0430 \u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438 \u043d\u0435\u0440\u0432\u044b.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/938758\/\"> https:\/\/habr.com\/ru\/articles\/938758\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0432\u0430\u043d, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/b24.o2k.ru\/?utm_source=habr&amp;utm_medium=cpc&amp;utm_campaign=statya_hh_bitrix24\" rel=\"noopener noreferrer nofollow\"><strong>KISLOROD<\/strong><\/a>. \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u0440\u0435\u0437\u044e\u043c\u0435 \u0441 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u0432 \u0411\u0438\u0442\u0440\u0438\u043a\u044124: \u043e\u0442 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 API \u0434\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0434\u0443\u0431\u043b\u044f\u043c\u0438 \u2014 \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0435\u0439 \u043c\u0430\u0433\u0438\u0438, \u043d\u043e \u0441 \u043a\u0443\u0447\u0435\u0439 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439.<\/p>\n<h3>\u041e \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/h3>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u2014 \u043a\u0440\u0443\u043f\u043d\u043e\u0435 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435. \u0412 \u0434\u0435\u043d\u044c \u2014 \u0434\u043e 40 \u0440\u0435\u0437\u044e\u043c\u0435 \u0441 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>, \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e: \u043e\u0442\u043a\u0440\u044b\u0442\u044c, \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u043a\u0443, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. HR-\u043e\u0442\u0434\u0435\u043b \u0442\u0440\u0430\u0442\u0438\u043b \u043d\u0430 \u044d\u0442\u043e \u043f\u043e 3\u20134 \u0447\u0430\u0441\u0430 \u0432 \u0434\u0435\u043d\u044c, \u043e\u0448\u0438\u0431\u043a\u0438, \u0434\u0443\u0431\u043b\u0438, \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u2014 \u0432\u0441\u0435 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435.<\/p>\n<p>\u0426\u0435\u043b\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0431\u043e\u0440 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u0438\u044f. \u0410 \u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u0440\u0430\u0437 \u0432 \u0441\u0443\u0442\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u043e\u0432\u044b\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u0441 <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c: \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f \u00ab\u0441\u0432\u0430\u0440\u0449\u0438\u043a\u00bb \u0438\u043b\u0438 \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0427\u041f\u0423\u00bb \u0438 \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u00ab\u0427\u0443\u0432\u0430\u0448\u0438\u044f\u00bb. \u0420\u0435\u0437\u044e\u043c\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Bitrix24, \u0433\u0434\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0438 \u0441\u0434\u0435\u043b\u043a\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f. \u0414\u0443\u0431\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u0438 \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 API hh.ru<\/h3>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a API <a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 <a href=\"https:\/\/dev.hh.ru\/\" rel=\"noopener noreferrer nofollow\">dev.hh.ru<\/a>. \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0434\u043e \u0434\u0432\u0443\u0445 \u043d\u0435\u0434\u0435\u043b\u044c \u2014 \u043c\u044b \u0437\u0430\u043b\u043e\u0436\u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c.<\/p>\n<p>API \u043f\u043b\u0430\u0442\u043d\u043e\u0435: \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u0427\u0443\u0432\u0430\u0448\u0438\u0435\u0439. \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 \u2014 N \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u2014 \u043d\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432.<\/p>\n<p>\u041a\u043e\u043d\u0442\u0430\u043a\u0442 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u044e\u043c\u0435 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0442 \u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0440\u0430\u043d\u0435\u0435. \u041c\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 actions.get_with_contact.url: \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c actions.url \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f, \u043d\u043e \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438<\/h3>\n<p><a href=\"http:\/\/hh.ru\" rel=\"noopener noreferrer nofollow\">hh.ru<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 OAuth 2.0. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a API, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0439\u0442\u0438 \u043c\u043e\u0434\u0435\u0440\u0430\u0446\u0438\u044e. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 authorization_code, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 accessToken \u0438 refreshToken.<\/p>\n<p>\u041e\u0431\u043c\u0435\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 POST-\u0437\u0430\u043f\u0440\u043e\u0441: POST <a href=\"https:\/\/hh.ru\/oauth\/token\" rel=\"noopener noreferrer nofollow\">https:\/\/hh.ru\/oauth\/token<\/a><\/p>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 accessToken \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 expires_in \u2014 \u043e\u043d \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u042d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0441\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c accessToken \u0440\u0430\u043d\u044c\u0448\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 expires_in, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043a\u0435\u043d, \u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a API.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u043a\u0435\u043d \u043d\u0435 \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d, \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 401 Unauthorized \u0438 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u0432\u043f\u0443\u0441\u0442\u0443\u044e.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0438, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0439: \u0442\u043e\u043a\u0435\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/h4>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">\/**  * \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u044b accessToken \u0438 refreshToken.  * code - \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u044f\u0441\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https:\/\/hh.ru\/oauth\/authorize?response_type=code&amp;client_id={client_id}  *\/ public function getFirstTokens($code) {     $parameters = [         'grant_type' =&gt; 'authorization_code',         'client_id' =&gt; self::CLIENT_ID,         'client_secret' =&gt; self::CLIENT_SECRET,         'code' =&gt; $code     ];          $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE);     $currentTime = time();     $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);      $result = json_decode($response);          if ($result-&gt;access_token) {         $this-&gt;setAccessToken($result-&gt;access_token);         Option::set('main', 'access_token', $result-&gt;access_token);     }     if ($result-&gt;refresh_token) {         $this-&gt;setRefreshToken($result-&gt;refresh_token);         Option::set('main', 'refresh_token', $result-&gt;refresh_token);     }     if ($result-&gt;expires_in) {         $tokenEndTime = $currentTime + $result-&gt;expires_in;         $this-&gt;setTokenEndTime($tokenEndTime);         Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in);     } }  public function refreshTokens() {     $refreshToken = $this-&gt;getRefreshToken();          if (!$refreshToken) {         return false;     }          $tokenEndTime = $this-&gt;getTokenEndTime();     $currentTime = time();      if ($tokenEndTime &gt; $currentTime) {         return false;     }          $parameters = [         'grant_type' =&gt; 'refresh_token',         'refresh_token' =&gt; $refreshToken     ];          $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE);     $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);      $result = json_decode($response);      if ($result-&gt;error) {         return false;     }          if ($result-&gt;access_token) {         $this-&gt;setAccessToken($result-&gt;access_token);         Option::set('main', 'access_token', $result-&gt;access_token);     }     if ($result-&gt;refresh_token) {         $this-&gt;setRefreshToken($result-&gt;refresh_token);         Option::set('main', 'refresh_token', $result-&gt;refresh_token);     }     if ($result-&gt;expires_in) {         $tokenEndTime = $currentTime + $result-&gt;expires_in;         $this-&gt;setTokenEndTime($tokenEndTime);         Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in);     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c area: \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0435\u0437\u044b<\/h3>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/hh.ru\/resumes\" rel=\"noopener noreferrer nofollow\">hh.ru\/resumes<\/a> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0437\u044e\u043c\u0435 \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430, \u043d\u043e \u0438 \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0443. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u0430\u0437\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443: \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0427\u0443\u0432\u0430\u0448\u0438\u044e \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u0438\u0437 \u041c\u043e\u0441\u043a\u0432\u044b, \u041f\u0438\u0442\u0435\u0440\u0430 \u0438 \u0434\u0430\u0436\u0435 \u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d\u0430 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u00ab\u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0443\u00bb.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439, \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 GET \/areas \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 id (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0427\u0443\u0432\u0430\u0448\u0438\u044f \u0438 \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u044e\u0449\u0438\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u043a\u0430\u043a area=1652&amp;area=3680, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 area \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u0435\u0442 hh API. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 (area[]=&#8230;), \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438\u043b\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u2014 \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0438 \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u00ab\u0441\u0432\u043e\u0435\u043d\u0440\u0430\u0432\u043d\u044b\u043c\u00bb: \u043d\u0430 \u043d\u0435\u0433\u043e \u0443\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438. \u0411\u0435\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 area \u0444\u0438\u043b\u044c\u0442\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u044d\u0442\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0440\u0435\u0437\u044e\u043c\u0435 \u043d\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u2014 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u044f\u043b\u0438, \u043a\u0430\u043a hh API \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e: \u0432 CRM \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0437\u044e\u043c\u0435, \u0430 \u043d\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u00ab\u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0443\u00bb.<\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 API<\/h4>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php  namespace O2k\\HeadHunter\\Integration;  use \\Bitrix\\Main\\Config\\Option;  class Api { const CLIENT_ID = '...'; const CLIENT_SECRET = '...'; const SERVICE_URL = 'https:\/\/hh.ru\/'; const API_URL = 'https:\/\/api.hh.ru\/'; const APPLICATION_NAME = '\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 CRM \u0411\u0438\u0442\u0440\u0438\u043a\u044124'; const APPLICATION_EMAIL = '...'; const RESOURCE_AUTHENTICATE = 'oauth\/token'; const RESOURCE_RESUMES = 'resumes'; const RESOURCE_AREAS = 'areas';  const METHOD_GET = 'GET';     const METHOD_POST = 'POST';  private $accessToken; private $refreshToken;  \/**  * \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u044b accessToken \u0438 refreshToken.  * code - \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u044f\u0441\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https:\/\/hh.ru\/oauth\/authorize?response_type=code&amp;client_id={client_id}  *\/ public function getFirstTokens($code) { $parameters = [ 'grant_type' =&gt; 'authorization_code', 'client_id' =&gt; self::CLIENT_ID, 'client_secret' =&gt; self::CLIENT_SECRET, 'code' =&gt; $code ];  $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE); $currentTime = time(); $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);  $result = json_decode($response);  if ($result-&gt;access_token) { $this-&gt;setAccessToken($result-&gt;access_token); Option::set('main', 'access_token', $result-&gt;access_token); } if ($result-&gt;refresh_token) { $this-&gt;setRefreshToken($result-&gt;refresh_token); Option::set('main', 'refresh_token', $result-&gt;refresh_token); } if ($result-&gt;expires_in) { $tokenEndTime = $currentTime + $result-&gt;expires_in; $this-&gt;setTokenEndTime($tokenEndTime); Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in); } }  public function refreshTokens() { $refreshToken = $this-&gt;getRefreshToken();  if (!$refreshToken) { return false; }  $tokenEndTime = $this-&gt;getTokenEndTime(); $currentTime = time();  if ($tokenEndTime &gt; $currentTime) { return false; }  $parameters = [ 'grant_type' =&gt; 'refresh_token', 'refresh_token' =&gt; $refreshToken ];  $uri = $this-&gt;getUri(self::SERVICE_URL, self::RESOURCE_AUTHENTICATE); $response = $this-&gt;doRequest($uri, self::METHOD_POST, $parameters, false);  $result = json_decode($response);  if ($result-&gt;error) { return false; }  if ($result-&gt;access_token) { $this-&gt;setAccessToken($result-&gt;access_token); Option::set('main', 'access_token', $result-&gt;access_token); } if ($result-&gt;refresh_token) { $this-&gt;setRefreshToken($result-&gt;refresh_token); Option::set('main', 'refresh_token', $result-&gt;refresh_token); } if ($result-&gt;expires_in) { $tokenEndTime = $currentTime + $result-&gt;expires_in; $this-&gt;setTokenEndTime($tokenEndTime); Option::set('main', 'token_end_time', $currentTime + $result-&gt;expires_in); } }  public function getResumes($parameters) { $pageNumber = $pagesCount = 0; $items = [];  do { $parameters['page'] = $pageNumber; $pageNumber++;  $uri = $this-&gt;getUri(self::API_URL, self::RESOURCE_RESUMES, $parameters); if ($uri) { $response = $this-&gt;doRequest($uri, self::METHOD_GET); $result = json_decode($response, true); $items = array_merge($items, $result['items']); $pagesCount = $result['pages']; } } while ($pageNumber &lt; $pagesCount);  if ($items) { $this-&gt;excludeAnonymousResumes($items, ['email', 'phones']); }  return $items; }  protected function excludeAnonymousResumes(&amp;$items, $checkedFields) {<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-473077","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/473077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=473077"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/473077\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=473077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=473077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=473077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}