Автоматизация подбора персонала — одна из ключевых задач для современного бизнеса. Перенос данных о кандидатах, их опыте работы и контактной информации из HeadHunter (hh.ru) в справочники 1С позволяет значительно ускорить работу HR-отдела и исключить ошибки ручного ввода. В данной статье мы подробно разберем, как правильно выстроить архитектуру взаимодействия с API HeadHunter, какие нюансы авторизации необходимо учесть и как написать надежный код на языке 1С для получения данных.
Прежде чем приступать к написанию кода, проанализируем ситуацию. Прямое «скачивание» страницы сайта (парсинг), которое часто пытаются использовать новички, является нестабильным и технически сложным методом. Сайт постоянно меняет верстку, а системы защиты могут заблокировать запросы. Правильный путь — использование официального API HeadHunter. Работа с ним строится на обмене данными в формате JSON через протокол HTTPS.
Важно понимать, что для доступа к данным о кандидатах (откликам на вакансии вашей организации) требуется прохождение авторизации по протоколу OAuth 2.0. Вы не можете просто отправить логин и пароль в теле запроса; вам необходимо зарегистрировать ваше приложение в личном кабинете разработчика на портале HeadHunter и получить специальные ключи доступа.
Выясним причину, по которой обычное HTTPСоединение может возвращать ошибку. Для работы с hh.ru обязательно требуется защищенное соединение. Рассмотрим, как инициализировать его в 1С:
ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено);
Соединение = Новый HTTPСоединение("api.hh.ru", , , , , , ssl);
Перед началом разработки необходимо выполнить следующие организационные действия:
client_id и client_secret.access_token. Именно этот токен будет подтверждать права вашей программы на получение данных о кандидатах.Проанализируем требования API. HeadHunter крайне строго относится к содержимому Header (заголовков) запроса. Разберем по шагам, что обязательно должно быть передано серверу:
Bearer [ваш_токен].application/json.Посмотрим на пример формирования заголовков в коде:
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Заголовки.Вставить("User-Agent", "1C-Integration-App (my-email@example.com)");
Заголовки.Вставить("Accept", "application/json");
Кандидаты, которые «хотят у нас работать», в терминологии API называются «переговорами» (negotiations). Чтобы получить их список, мы должны обратиться к соответствующему эндпоинту. Рассмотрим подробнее процесс создания запроса:
// Эндпоинт для получения списка откликов
АдресРесурса = "/negotiations";
// Создаем HTTPЗапрос
Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
// Отправляем запрос методом GET
Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Обработка успешного ответа
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Иначе
Сообщить("Ошибка при получении данных: " + Ответ.КодСостояния);
КонецЕсли;
После того как мы получили ответ от сервера, нам приходит структура данных в формате JSON. Обычно это массив объектов, где каждый объект содержит краткую информацию об отклике и ссылку на резюме кандидата. Разберем, как извлечь нужную информацию для заполнения справочника Кандидаты.
Обратите внимание, что полное резюме (с опытом работы и образованием) часто требует отдельного запроса по идентификатору резюме, который вы получили из списка откликов. Рассмотрим пример цикла обработки:
Для Каждого Отклик Из Данные.items Цикл
// Получаем данные о кандидате
КандидатОбъект = Справочники.Кандидаты.СоздатьЭлемент();
// В структуре JSON ищем ФИО (может быть в объекте resume)
Резюме = Отклик.resume;
КандидатОбъект.Наименование = Резюме.last_name + " " + Резюме.first_name;
// Сохраняем ID резюме для будущих обновлений
КандидатОбъект.ИдентификаторHH = Резюме.id;
// Записываем данные в 1С
КандидатОбъект.Записать();
КонецЦикла;
Работа с внешними API всегда сопряжена с определенными ограничениями. Проанализируем ситуацию с лимитами и платным доступом:
РегламентныеЗадания с разумным интервалом (например, раз в 15-30 минут).access_token не вечен. Вам необходимо реализовать механизм его обновления с помощью refresh_token, чтобы интеграция не «сломалась» через месяц после запуска.Для создания качественного решения мы рекомендуем разделить логику на несколько модулей:
Общий модуль для работы с API: здесь должны располагаться функции для получения токена, формирования HTTPСоединение и выполнения базовых запросов. Это позволит повторно использовать код, если в будущем вы захотите выгружать вакансии из 1С на сайт.
Регламентное задание: создайте процедуру, которая будет автоматически запускаться в фоне. Она должна проверять наличие новых откликов и создавать новые элементы в справочнике Кандидаты.
Логирование: обязательно записывайте результаты работы в ЖурналРегистрации. При возникновении ошибок (например, неверный токен или отсутствие интернета) вы всегда сможете быстро выяснить причину сбоя.
Используя объект HTTPСоединение вместе с ЗащищенноеСоединениеOpenSSL, вы обеспечиваете безопасную передачу данных. А методы ПрочитатьJSON позволяют легко преобразовать сложную структуру ответа HeadHunter во внутренние объекты 1С (соответствия и массивы), с которыми удобно работать программисту.