Как реализовать выгрузку данных о кандидатах из HeadHunter в 1С через API

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Автоматизация подбора персонала — одна из ключевых задач для современного бизнеса. Перенос данных о кандидатах, их опыте работы и контактной информации из HeadHunter (hh.ru) в справочники 1С позволяет значительно ускорить работу HR-отдела и исключить ошибки ручного ввода. В данной статье мы подробно разберем, как правильно выстроить архитектуру взаимодействия с API HeadHunter, какие нюансы авторизации необходимо учесть и как написать надежный код на языке 1С для получения данных.

Понимание архитектуры взаимодействия

Прежде чем приступать к написанию кода, проанализируем ситуацию. Прямое «скачивание» страницы сайта (парсинг), которое часто пытаются использовать новички, является нестабильным и технически сложным методом. Сайт постоянно меняет верстку, а системы защиты могут заблокировать запросы. Правильный путь — использование официального API HeadHunter. Работа с ним строится на обмене данными в формате JSON через протокол HTTPS.

Важно понимать, что для доступа к данным о кандидатах (откликам на вакансии вашей организации) требуется прохождение авторизации по протоколу OAuth 2.0. Вы не можете просто отправить логин и пароль в теле запроса; вам необходимо зарегистрировать ваше приложение в личном кабинете разработчика на портале HeadHunter и получить специальные ключи доступа.

Шаг 1. Подготовка и получение доступа к API

Выясним причину, по которой обычное HTTPСоединение может возвращать ошибку. Для работы с hh.ru обязательно требуется защищенное соединение. Рассмотрим, как инициализировать его в 1С:


ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено);
Соединение = Новый HTTPСоединение("api.hh.ru", , , , , , ssl);

Перед началом разработки необходимо выполнить следующие организационные действия:

  1. Зарегистрировать информационную базу как приложение на сайте для разработчиков.
  2. Получить client_id и client_secret.
  3. Настроить получение access_token. Именно этот токен будет подтверждать права вашей программы на получение данных о кандидатах.

Шаг 2. Формирование обязательных заголовков запроса

Проанализируем требования API. HeadHunter крайне строго относится к содержимому Header (заголовков) запроса. Разберем по шагам, что обязательно должно быть передано серверу:

Посмотрим на пример формирования заголовков в коде:


Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Заголовки.Вставить("User-Agent", "1C-Integration-App (my-email@example.com)");
Заголовки.Вставить("Accept", "application/json");

Шаг 3. Запрос списка откликов (Кандидатов)

Кандидаты, которые «хотят у нас работать», в терминологии API называются «переговорами» (negotiations). Чтобы получить их список, мы должны обратиться к соответствующему эндпоинту. Рассмотрим подробнее процесс создания запроса:


// Эндпоинт для получения списка откликов
АдресРесурса = "/negotiations";

// Создаем HTTPЗапрос
Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);

// Отправляем запрос методом GET
Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);

Если Ответ.КодСостояния = 200 Тогда
    // Обработка успешного ответа
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
Иначе
    Сообщить("Ошибка при получении данных: " + Ответ.КодСостояния);
КонецЕсли;

Шаг 4. Обработка полученных данных и загрузка в справочник

После того как мы получили ответ от сервера, нам приходит структура данных в формате JSON. Обычно это массив объектов, где каждый объект содержит краткую информацию об отклике и ссылку на резюме кандидата. Разберем, как извлечь нужную информацию для заполнения справочника Кандидаты.

Обратите внимание, что полное резюме (с опытом работы и образованием) часто требует отдельного запроса по идентификатору резюме, который вы получили из списка откликов. Рассмотрим пример цикла обработки:


Для Каждого Отклик Из Данные.items Цикл
    
    // Получаем данные о кандидате
    КандидатОбъект = Справочники.Кандидаты.СоздатьЭлемент();
    
    // В структуре JSON ищем ФИО (может быть в объекте resume)
    Резюме = Отклик.resume;
    КандидатОбъект.Наименование = Резюме.last_name + " " + Резюме.first_name;
    
    // Сохраняем ID резюме для будущих обновлений
    КандидатОбъект.ИдентификаторHH = Резюме.id;
    
    // Записываем данные в 1С
    КандидатОбъект.Записать();
    
КонецЦикла;

Нюансы и ограничения, которые стоит учитывать

Работа с внешними API всегда сопряжена с определенными ограничениями. Проанализируем ситуацию с лимитами и платным доступом:

  1. Платные методы: Как упоминалось на форуме, доступ к контактным данным кандидатов может быть ограничен, если у вашей компании не оплачен соответствующий доступ на HeadHunter. В этом случае в поле контактов API вернет пустое значение или скрытые данные.
  2. Ограничение частоты запросов (Rate Limit): Если вы начнете опрашивать API слишком часто (например, каждую секунду), сервер может временно заблокировать ваш IP-адрес. Рекомендуется настраивать РегламентныеЗадания с разумным интервалом (например, раз в 15-30 минут).
  3. Срок жизни токена: access_token не вечен. Вам необходимо реализовать механизм его обновления с помощью refresh_token, чтобы интеграция не «сломалась» через месяц после запуска.

Рекомендации по реализации в 1С

Для создания качественного решения мы рекомендуем разделить логику на несколько модулей:

Общий модуль для работы с API: здесь должны располагаться функции для получения токена, формирования HTTPСоединение и выполнения базовых запросов. Это позволит повторно использовать код, если в будущем вы захотите выгружать вакансии из 1С на сайт.

Регламентное задание: создайте процедуру, которая будет автоматически запускаться в фоне. Она должна проверять наличие новых откликов и создавать новые элементы в справочнике Кандидаты.

Логирование: обязательно записывайте результаты работы в ЖурналРегистрации. При возникновении ошибок (например, неверный токен или отсутствие интернета) вы всегда сможете быстро выяснить причину сбоя.

Используя объект HTTPСоединение вместе с ЗащищенноеСоединениеOpenSSL, вы обеспечиваете безопасную передачу данных. А методы ПрочитатьJSON позволяют легко преобразовать сложную структуру ответа HeadHunter во внутренние объекты 1С (соответствия и массивы), с которыми удобно работать программисту.

← На главную