Eine kurze Geschichte über unseren benutzerdefinierten Rekrutierungsservice und eine große Geschichte über die Probleme, die bei der Integration mit HeadHunter im Hinblick auf die Stellenausschreibung aufgetreten sind. Warum HeadHunter? Denn bei Superjob ist alles etwas einfacher (aber dazu später mehr).

Hintergrund
Mein Team entwickelt eine webbasierte Bewerbung für eine große Einzelhandelskette. Die Aktionskette ist folgendermaßen aufgebaut:
- Das Unternehmen genehmigt die grundlegenden Vorlagen für freie Stellen (Anforderungen, Verantwortlichkeiten, Bedingungen), die für alle Geschäfte und Städte universell sind.
- HRs erstellen auf der Grundlage der Grundvorlage die Hauptvorlage für freie Stellen für jede Stadt und geben den Gehaltsbereich für eine bestimmte Position an (für dieselben Positionen in verschiedenen Regionen können unterschiedliche Gehälter gelten).
- Der Filialleiter eröffnet auf der Grundlage der Stellenvorlage eine freie Stelle in seiner Filiale in unserer Bewerbung und erhält einen Link dazu.
- Der Kandidat, der dem Link folgt, gelangt zum Fragebogen, wo er Kontaktinformationen eingibt und diese zur Prüfung an den Geschäftsleiter sendet.
- ??????
- GEWINN!
Als es einen Vorschlag gab, eine freie Stelle auf HeadHunter mit einem Link zum Fragebogen zu veröffentlichen, habe ich kurz die Dokumentation für ihre API studiert und mir etwas im Stil von "Es gibt ein Geschäft für 5 Minuten" gedacht. Und jetzt, nach ~ 1,5 Monaten, schreibe ich diesen Artikel.
Arbeiten mit der HeadHunter-API
Es gibt also die Aufgabe, offene Stellen auf HeadHunter zu veröffentlichen. Sie benötigen:
Aktuelle API-Version
Leider (oder zum Glück?) Ist die API nicht versioniert, sodass theoretisch jederzeit alles herunterfallen kann. Auch wenn dies noch nie passiert ist und es dafür keine Voraussetzungen gibt, wird es dennoch aktualisiert:
Sie finden Schlüssel in den Antworten und API-Parametern, die nicht in der Dokumentation beschrieben sind. Normalerweise bedeutet dies, dass sie für die Kompatibilität mit älteren Versionen übrig bleiben. Ihre Verwendung wird nicht empfohlen.
Antragsregistrierung
Hier ist alles einfach, aber nicht so einfach, wie wir es gerne hätten. Sie werden aufgefordert, ein Formular auszufüllen, in dem eines der Felder den Wortlaut " Beschreiben Sie alle Funktionen der Anwendung und geben Sie die verwendeten API-Methoden an ." Enthält. Wie detailliert ???

Bei der erstmaligen Registrierung der Bewerbung wurde das Formular mit allen Routen detailliert ausgefüllt, beim zweiten Mal gab es nur für den Satz „ Alle Methoden aus dem Stellenblock “ genügend Geduld. Beide Optionen bestanden.
Der Antrag wird für etwa zwei Wochen genehmigt. Dies ist einer der Gründe, warum sich unsere Integration etwas in die Länge gezogen hat.
Registrierung des zweiten Antrags
Beachten Sie bei der Registrierung der Anwendung den Parameter Redirect URI . Laut unserer vom technischen Support von HeadHunter bestätigten Beobachtung benötigen Sie eine Anwendung zum Verkauf (mit redirect_uri = example.com) und zur Entwicklung (mit redirect_uri = test.example.com), wenn sich Ihre Testschaltung in einer Subdomain befindet (z. B. test.example.com) ) Und dies sind weitere zwei Wochen, in denen auf die Genehmigung gewartet wird.
Regeln lernen und klären
Während wir die funktionalen und veröffentlichten offenen Stellen im Testmodus entwickelten, war alles in Ordnung. Nachdem offene Stellen für die Veröffentlichung von Veröffentlichungen eingeführt wurden, verschwanden die Links aufgrund des Verbots durch die Regeln ihrer Platzierung in offenen Stellen. Aus den Worten des Supports können die Links jedoch automatisch als Antwort an den Benutzer gesendet werden (was in den Regeln nicht beschrieben ist). Hier wurden wir von unserer eigenen Nachlässigkeit enttäuscht, aber meiner Meinung nach war es möglich, einen Validator in die Phase des Eingangs des Vakanztextes zu setzen.
Ein bisschen Intuition
Manchmal sind Fehlertexte völlig unvorhersehbar und unlogisch. Hier ist, womit wir konfrontiert sind:
not_enough_purchased_services
(gekaufte Dienste zum Veröffentlichen oder Aktualisieren dieser Art von Stellenangeboten reichen nicht aus) - beim Veröffentlichen einer Stellenausschreibung mit dem Typ free . Was genau für freie Stellen gekauft werden muss, ist nicht klar. Lösung: type: standard
angeben type: standard
;quota_exceeded
(Manager-Kontingent für die Veröffentlichung dieser Art von Stellenangeboten ist abgelaufen) - Manager-Kontingente werden über https://hh.ru/employer/settings/quotas konfiguriert.duplicate
(eine ähnliche Stelle wurde bereits veröffentlicht) bei Verwendung des ignore_duplicates
- tritt auf, wenn die Felder " name
und " area
identisch sind, unabhängig davon, ignore_duplicates
das Flag zum Ignorieren von Duplikaten vorhanden ist.
Und auch
Über Sicherheit
Berücksichtigen Sie die Tatsache, dass die Lebensdauer des Tokens zwei Wochen beträgt (dies ist anscheinend ihre Lieblingszeit) und Sie es nicht vorab aktualisieren können, nur per Razlogin. Theoretisch sollte dies jedoch keine Probleme verursachen. Wenn der Token leckt, hat der Angreifer möglicherweise genügend Zeit für Meditation, Gräueltaten und Schadenfreude.
Über Schnittstellen
Eine Jobbeschreibung ist ein einzelnes description
, das mehrere HTML-Tags unterstützt. Die Formatierung funktioniert jedoch nur, wenn sie über die Site veröffentlicht wird. Über die API gesendetes HTML wurde in einfachen Text umgewandelt.
Über Nachschlagewerke
Wie die gesamte API können Verzeichnisse jederzeit geändert werden, wie in ihren Beschreibungen ausdrücklich angegeben:

Fehler sind beispielsweise auch im Verzeichnis der Regionen möglich, in denen überschüssige Leerzeichen gefunden wurden, für die Sie möglicherweise nicht bereit sind. Ich habe eine Überprüfung zu diesem Thema gestartet. Ich hoffe, dass sie das Problem beheben, aber seien Sie vorsichtig.
Zusammenfassung
Ein schneller Start dauert ungefähr zwei Wochen, wahrscheinlich mit der Notwendigkeit, mehrere Bewerbungen zu registrieren. Im Allgemeinen sind die Dokumentation und die API selbst recht vernünftig, andernfalls können Sie herausfinden, wie Sie mit dem technischen Support oder durch Probleme auf ihrem Github kommunizieren können.
Ich bin sicher, wir haben nicht alle interessanten Dinge im Zusammenhang mit der HeadHunter-API gefunden, da wir nicht einmal den Zweig "Lebenslauf" berührt haben. Wenn Sie also etwas zu erzählen / zu ergänzen / zu klären haben, schreiben Sie in die Kommentare.
PS
Superjob API und ein kleiner Vergleich mit HeadHunter: habr.com/de/post/465663