Une courte histoire sur notre service de recrutement personnalisé et une grande histoire sur les problèmes qui sont apparus lors de l'intégration avec HeadHunter en termes de publication de postes vacants. Pourquoi HeadHunter? Parce que sur Superjob, tout est un peu plus simple (mais plus à ce sujet plus tard).

Contexte
Mon équipe développe une application de placement sur le Web pour une grande chaîne de vente au détail. La chaîne d'actions se construit ainsi:
- l'entreprise approuve les modèles de base des postes vacants (exigences, responsabilités, conditions), universels pour tous les magasins et villes;
- Les RH, sur la base du modèle de base, créent le modèle de base de vacance pour chaque ville, en indiquant la fourchette de salaires pour un poste particulier (pour des postes identiques dans différentes régions, il peut y avoir des salaires différents);
- le directeur de magasin, sur la base du modèle de vacance, ouvre une vacance dans son magasin à l'intérieur de notre candidature et reçoit un lien vers celle-ci;
- le candidat, en suivant le lien, accède au questionnaire, où il entre les coordonnées et les envoie au directeur du magasin pour examen;
- ??????
- PROFIT!
Quand il a été proposé de publier une offre d'emploi sur HeadHunter avec un lien vers le questionnaire, j'ai brièvement étudié la documentation de leur API et pensé quelque chose dans le style "il y a une entreprise pendant 5 minutes". Et maintenant, après ~ 1,5 mois, j'écris cet article.
Travailler avec l'API HeadHunter
Donc, il y a la tâche de publier les offres d'emploi sur HeadHunter, vous aurez besoin de:
Version actuelle de l'API
Malheureusement (ou heureusement?), L'API n'est pas versionnée, donc, théoriquement , tout peut tomber à tout moment. Même si cela ne s'est jamais produit et qu'il n'y a pas de prérequis pour cela, il est toujours mis à jour:
Vous pouvez trouver des clés dans les réponses et les paramètres API qui ne sont pas décrits dans la documentation. Cela signifie généralement qu'ils sont laissés pour compatibilité avec les anciennes versions. Leur utilisation n'est pas recommandée.
Enregistrement de l'application
Tout est simple ici, mais pas aussi simple que nous le souhaiterions. Il vous sera demandé de remplir un formulaire dans lequel l'un des champs contient le libellé " Décrivez toutes les fonctionnalités de l'application et indiquez les méthodes API utilisées ". Comment détaillé ???

Lors de l'enregistrement de la candidature pour la première fois, le formulaire a été rempli en détail, indiquant tous les itinéraires, la deuxième fois, il n'y avait assez de patience que pour la phrase " toutes les méthodes du bloc de postes vacants ". Les deux options ont réussi.
La demande est approuvée pour environ deux semaines. C'est l'une des raisons pour lesquelles notre intégration a traîné un peu.
Enregistrement de la deuxième demande
Faites attention au paramètre Rediriger l'URI lors de l'enregistrement de l'application. Selon notre observation, confirmée par le support technique de HeadHunter, si votre circuit de test est sur un sous-domaine (par exemple, test.example.com), alors vous avez besoin d'une application à vendre (avec redirect_uri = example.com) et à développer (avec redirect_uri = test.example.com ) Et c'est encore deux semaines d'attente pour approbation.
Apprendre et clarifier les règles
Pendant que nous développions les postes vacants fermés fonctionnels et publiés en mode test, tout allait bien. Après avoir téléchargé les offres d'emploi ouvertes à la publication de publications, il a été constaté que les liens disparaissaient en raison de l'interdiction par les règles de leur placement dans les offres d'emploi, mais, à partir de mots de soutien, des liens peuvent être automatiquement envoyés à l'utilisateur en réponse (ce qui n'est pas décrit dans les règles). Ici, nous avons été déçus par notre propre négligence, cependant, à mon avis, il a été possible de mettre un validateur au stade de la réception du texte de vacance.
Un peu d'intuition
Parfois, les textes d'erreur sont totalement imprévisibles et illogiques. Voici à quoi nous sommes confrontés:
not_enough_purchased_services
(les services achetés pour publier ou mettre à jour ce type de poste vacant ne suffisent pas) - lors de la publication d'un poste vacant de type gratuit . Ce qui doit être acheté exactement pour des postes vacants gratuits n'est pas clair. Solution: spécifiez le type: standard
;quota_exceeded
(le quota du gestionnaire pour la publication de ce type de poste est terminé) - les quotas du gestionnaire sont configurés via https://hh.ru/employer/settings/quotas , la dernière fois que nous l'avons vu en tapant standart
au lieu de standard
dans le champ type
;duplicate
(un poste similaire a déjà été publié) lors de l'utilisation de l'indicateur ignore_duplicates
- se produit lorsque les champs de name
et de area
sont identiques, quelle que soit la présence de l'indicateur pour ignorer les doublons.
Aussi
À propos de la sécurité
Tenez compte du fait que la durée de vie du jeton est de deux semaines (c'est leur moment préféré, apparemment) et vous ne pouvez pas le rafraîchir à l'avance, uniquement par razlogin. Théoriquement, cela ne devrait pas causer de problèmes, cependant, si le jeton fuit, l'attaquant peut avoir suffisamment de temps pour la méditation, les atrocités et les jubilations.
À propos des interfaces
Une description de travail est un champ de description
unique qui prend en charge plusieurs balises HTML, mais le formatage ne fonctionne que lorsqu'il est publié sur le site. Le HTML envoyé via l'API s'est transformé en texte brut.
À propos des ouvrages de référence
Comme l'ensemble de l'API, les répertoires peuvent changer à tout moment, comme indiqué explicitement dans leurs descriptions:

Des erreurs sont également possibles, par exemple, dans le répertoire des régions ayant trouvé des espaces excédentaires, pour lesquelles vous n'êtes peut-être pas prêt. J'ai commencé une revue sur ce sujet, j'espère qu'ils vont le réparer, mais soyez prudent.
Résumé
Un démarrage rapide vous prendra environ deux semaines, probablement avec la nécessité d'enregistrer plusieurs applications. En général, la documentation et l'API elle-même sont assez saines, sinon vous pouvez comprendre comment communiquer avec le support technique ou via un problème sur leur github.
Je suis sûr que nous n'avons pas trouvé toutes les choses intéressantes liées à l'API HeadHunter, car nous n'avons même pas touché la branche CV. Par conséquent, si vous avez quelque chose à dire / compléter / clarifier - écrivez dans les commentaires.
PS
API Superjob et petite comparaison avec HeadHunter: habr.com/en/post/465663