Вебхуки — это удобный способ оповещать ваши внутренние системы о действиях с кандидатами в Хантфлоу.
Хантфлоу может отправлять данные кандидата в ваш 1С или интранет при переводе кандидата на этап «Выход на работу». Или вы можете разработать чат-бота, который будет отправлять заказчику ссылку на кандидата в Слак или Телеграм.
С технической точки зрения вебхук – это HTTP POST-запрос, отправляемый нашей системой на ваш удаленный сервер. Вся информация о субъекте, объекте и характере изменения данных содержится в теле запроса и в его заголовках.
- Перейдите в настройки организации
- Убедитесь, что у вас подключен API
- Добавьте вебхук, указав URL, секретный ключ (опционально) и выбрав события,
на которые вы хотите подписаться. Обратите внимание, что при добавлении вебхука
система проверяет его на доступность. Для прохождения этой проверки, удаленный
сервер должен ответить кодом
200,201или204на запрос с типом PING.
- В случае успешной проверки, вебхук будет добавлен (всего можно добавлять до 5 вебхуков). Вы можете редактировать или удалять вебхуки после создания, нажав на интересующую вас запись в списке.
На каждый созданных вебхук Хантфлоу будет предпринимать до 4-х попыток отправить событие: сразу после возникновения, а также, в случае неуспешной доставки, с интервалами в 10, 100 и 1000 секунд после последней неуспешной попытки.
Сервис, принимающий события, должен отвечать кодом 200, 201 или 204 на прием вебхука для индикации успешности доставки события. В любых других случаях Хантфлоу будет считать доставку неуспешной и предпринимать попытки для переотправки события по алгоритму, указанному выше. В случае, если все попытки доставки будут неуспешными, вебхук будет автоматически деактивирован, а управляющие рекрутеры организации получат об этом уведомление на почту. Повторную активацию вебхука нужно будет произвести в настройках Хантфлоу в разделе API.
- APPLICANT — действия над кандидатом
- VACANCY — действия по вакансиям
- RESPONSE — действия по откликам
- OFFER - действия по офферам
- RECRUITMENT-EVALUATION - действия по опросу оценки работы рекрутеров
- PING — проверка на доступность вебхука
- SURVEY-QUESTIONARY — действия по анкетам кандидатов
{
"X-Huntflow-Delivery": "fcb5de9e-75a9-42c7-a7d2-3f070f2c5e00",
"X-Huntflow-Event": "APPLICANT",
"X-Huntflow-Signature": "298d0211223cf9b504c04674d3b7dbf9627803818098fdf3cec6f50cabb15b76"
}| Заголовок | Описание |
|---|---|
| X-Huntflow-Delivery | Уникальный идентификатор вебхука |
| X-Huntflow-Event | Тип события |
| X-Huntflow-Signature | hex digest sha256 hmac тела вебхука, сгенерированный с помощью секретного ключа (отсутствует, если в вебхуке не указан секретный ключ) |
-
changes— Содержит список измененных полей и их предыдущие значения. На текущий момент функционал реализован для вебхуков типаAPPLICANT. Внешняя система должна учитывать, что изменения могут приходить и по другим типам вебхуков. -
event– Основная информация о событии. Подробно описана ниже для каждого типа вебхуков. -
meta– Общая информация о вебхуке:-
account– Объект с данными об организации-
id(типnumber) – идентификатор организации -
name(типstr) – название организации -
nick(типstr) – псевдоним организации
-
-
author– Объект с данными об авторе действия-
id(типnumber) – идентификатор автора -
email(типstr) – почта автора -
name(типstr) – имя автора -
meta(типobject) – дополнительные данные автора
-
-
event_id(типstr) - уникальный идентификатор события (вебхука) -
event_type(типstr) – тип события, вызвавший отправку вебхука -
retry(типnumber) – номер попытки отправки вебхука (0 - 3). -
version(типstr) – версия схемы вебхука (например,2.0) -
webhook_action(типstr) – тип действия, вызвавшего вебхук (добавление –ADD, изменение –EDIT, удаление –DELETE).EDIT, на данный момент, используется только в вебхуках типаAPPLICANT.
-
Представим, что мы настроили вебхук на тип событий APPLICANT.
Пользователь пишет комментарий по кандидату и в результате приходит вебхук:
{
"changes": {},
"event": {
"applicant_log": {
"id": 860,
"type": "COMMENT",
"comment": "Хороший кандидат",
...
},
"applicant": {
...
}
},
"meta": {
"event_id": "15",
"event_type": "APPLICANT",
"version": "2.0",
"retry": 0,
"webhook_action": "ADD",
...
}
}Была создана новая сущность (запись по кандидату c идентификатором 860), поэтому webhook_action равен ADD.
Теперь пользователь решил отредактировать комментарий, что вызовет следующий вебхук:
{
"changes": {
"applicant_log": {
"comment": {
"from": "Хороший кандидат"
}
}
},
"event": {
"applicant_log": {
"id": 860,
"type": "COMMENT",
"comment": "Хороший кандидат, нужно звать на собеседование",
...
},
"applicant": {
...
}
},
"meta": {
"event_id": "16",
"event_type": "APPLICANT",
"version": "2.0",
"retry": 0,
"webhook_action": "EDIT",
...
}
}Была изменена сущность (запись по кандидату c идентификатором 860), поэтому webhook_action равен EDIT, а в changes описано какие поля изменились и их предыдущие значения.
Далее пользователь передумал и решил удалить свой комментарий, что вызовет следующий вебхук:
{
"changes": {},
"event": {
"applicant_log": {
"id": 860,
"type": "COMMENT",
"comment": "Хороший кандидат, нужно звать на собеседование",
...
},
"applicant": {
...
}
},
"meta": {
"event_id": "17",
"event_type": "APPLICANT",
"version": "2.0",
"retry": 0,
"webhook_action": "DELETE",
...
}
}Сущность (комментарий по кандидату с идентификатором 860) была удалена, поэтому webhook_action равен DELETE.
APPLICANT
{
"changes": {},
"event": {
"applicant": {
"id": 10,
"birthday": null,
"company": null,
"email": null,
"first_name": "test_name",
"last_name": "test",
"middle_name": null,
"money": null,
"pd_agreement": null,
"phone": null,
"photo": null,
"position": null,
"questionary": "2021-10-05T10:49:22+03:00",
"skype": null,
"social": [
{
"id": 1,
"social_type": "TELEGRAM",
"value": "some_tg",
"verification_date": null,
"verified": false
}
],
"values": {
"_reason": {
"reason": "Замена",
"reason_replacement": "sdG345"
},
"category": {
"foreign": "2",
"id": 3219,
"meta": {
"show": true
},
"name": "Руководитель"
},
"category_1": "sdgsg",
"category_2": "sdgsdg",
"category_3": "sdgsdg",
"multi": [
{
"foreign": "3",
"id": 3220,
"meta": {
"show": false
},
"name": "Специалист"
},
{
"foreign": "4",
"id": 3221,
"meta": {
"show": false
},
"name": "Рабочий персонал"
}
],
"multi_1": "dfgsd",
"multi_2": "sdfgsdfg",
"multi_3": "dsfgii"
}
},
"applicant_log": {
"calendar_event": {
"all_day": false,
"attendees": [
{
"contact_id": 1,
"displayName": "tst_name",
"email": "tst@example.com",
"member": 13,
"name": "tst_name",
"order": 1,
"resource": false,
"responseStatus": "needsAction"
}
],
"created": "2021-10-05T06:00:21+03:00",
"creator": {
"displayName": null,
"email": "tst@example.com",
"self": true
},
"description": "fgd",
"end": "2021-10-05T13:00:19+03:00",
"etag": "1633413621888",
"event_type": "interview",
"foreign": "20211005T060021_HF_12_9_true",
"id": 2,
"interview_type": 45,
"location": null,
"name": "Интервью: test test_name – fdg",
"recurrence": [],
"reminders": [
{
"method": "popup",
"minutes": 15
}
],
"start": "2021-10-05T12:00:19+03:00",
"state": "SENT",
"status": "confirmed",
"timezone": "Europe/Moscow",
"transparency": "busy",
"conference": {
"id": 67,
"topic": "Interview: Иванов Иван – Тестировщик",
"auth_type": "ZOOM",
"created": "2021-12-23T15:52:59+03:00",
"changed": "2021-12-23T15:53:04+03:00",
"start_time": "2021-12-23T16:00:55+03:00",
"end_time": "2021-12-23T17:00:55+03:00",
"timezone": "Europe/Moscow",
"link": "https://zoom.us/j/123456789?pwd=VmtRL3qwedfqwedffqsdfqwefr",
"access_code": "Hdeees6e",
"state": "waiting",
"foreign": "123456789"
}
},
"comment": null,
"created": "2021-10-05T11:00:21+03:00",
"employment_date": "2021-10-05",
"files": [],
"id": 37,
"rejection_reason": null,
"removed": null,
"source": null,
"status": null,
"survey_answer_of_type_a": null,
"survey_questionary": null,
"type": "COMMENT",
"vacancy": {
"account_division": null,
"account_region": null,
"applicants_to_hire": 1,
"company": "jkl",
"created": "2021-10-05",
"deadline": null,
"fill_quotas": [
{
"applicants_to_hire": 1,
"closed": null,
"created": "2021-10-05 10:49:22",
"deadline": null,
"id": 9,
"vacancy_request": null
}
],
"frame_id": 9,
"hidden": false,
"id": 9,
"money": "325",
"multiple": false,
"parent": null,
"position": "fdg",
"priority": 0,
"state": "OPEN",
"values": {}
},
"vacancy_group_action": null
},
"applicant_tags": [
{
"id": 1,
"name": "Blacklist",
"color": "000000"
}
]
},
"meta": {
"account": {
"id": 14,
"name": "tst",
"nick": "tsthr"
},
"author": {
"email": "tst@example.com",
"meta": {},
"id": 13,
"name": "tst_name"
},
"event_type": "APPLICANT",
"payload_id": 8,
"retry": 0,
"version": "2.0",
"webhook_action": "ADD"
}
}| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор кандидата |
| birthday | datetime | Дата рождения |
| company | number | Последняя компания, в которой работал кандидат |
| string | Электронная почта | |
| first_name | string | Имя |
| last_name | string | Фамилия |
| middle_name | string | Отчество |
| money | string | Желаемая зарплата |
| pd_agreement | object | Соглашение об обработке персональных данных |
| phone | string | Контактный телефон |
| photo | object | Фотография кандидата |
| questionary | datetime | Дата заполнения\изменения дополнительной информации |
| skype | string | Ник в скайпе |
| social | object | Социальные сети кандидата |
| values | object | Дополнительные поля кандидата |
| Имя | Тип | Описание |
|---|---|---|
| state | string | Согласие\несогласие кандидата |
| decision_date | datetime | Дата ответа |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор файла |
| content_type | string | MIME тип |
| name | string | Имя файла |
| url | string | Ссылка на фотографию кандидата |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор |
| social_type | string | Тип социальной сети |
| verification_date | datetime | Дата последней верификации |
| verified | bool | Аккаунт верифицирован (существует) |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор метки |
| name | string | Название метки |
| color | string | Цвет метки |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор лога |
| type | string | Тип лога |
| calendar_event | object | Встреча в календаре |
| comment | string | Комментарий |
| created | datetime | Дата создания лога |
| employment_date | date | Дата найма |
| files | list[objects] | Cписок файлов, прикрепленных к логу |
| status | object | Статус кандидата на вакансии |
| rejection_reason | object | Причина отказа |
| removed | datetime | Дата удаления записи |
| source | string | Источник кадидата |
| survey_answer_of_type_a | object | Форма оценки кандидата по вакансии |
| vacancy | object | Данные вакансии. см. вебхук VACANCY |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор файла |
| content_type | string | MIME тип |
| name | string | Имя файла |
| url | string | Ссылка на файл кандидата |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор записи |
| respondent | object | Респондент |
| survey | object | Опрос |
| created | datetime | Дата создания опросника |
| upadted | datetime | Дата изменения опросника |
| values | object | Результаты опроса (имя поля - ответ) |
| Имя | Тип | Описание |
|---|---|---|
| account_id | number | Идентификатор аккаунта |
| custom_id | number | name |
| string | Имя респондента | |
| string | Почта респондента |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор опроса |
| name | string | Название формы опроса |
| type | string | Тип опроса (type_a \ type_r) |
| created | datetime | Дата создания опроса |
| updated | datetime | Дата изменения опроса |
| active | bool | Активен ли опрос |
См. формат у события SURVEY-QUESTIONARY event.survey_questionary
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор записи |
| name | string | Причина отказа |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор записи |
| name | string | Статус |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор события |
| name | string | Название события |
| description | string | Описание события |
| status | string | Статус события |
| event_type | string | Тип события |
| start | datetime | Дата и время начала события |
| end | datetime | Дата и время окончания события |
| timezone | string | Название часового пояса события |
| attendees | list | Участники события |
| created | datetime | Дата и время создания события |
| creator.displayName | string | Имя создателя события |
| creator.email | string | Email создателя события |
| creator.self | boolean | Флаг указывающий на то, что вы создатель события |
| reminders | list | Список напоминаний |
| reminders.method | string | Способ напоминания |
| reminders.minutes | number | За сколько минут до начала события сработает напоминание |
| all_day | boolean | Флаг указывающий на то, что событие запланировано на весь день |
| foreign | string | Внешний уникальный идентификатор события |
| recurrence | list | Список повторений RFC 5545 |
| etag | string | ETag события |
| location | string | Географическое местоположение события |
| transparency | string | |
| conference | object | Конференция в Zoom |
| Имя | Тип | Описание |
|---|---|---|
| displayName | string | Имя участника события |
| string | Email участника события | |
| responseStatus | string | Статус участника события |
| contact_id | number | member |
| number | order | number |
| resource | bool |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор конференции |
| topic | string | Название конференции |
| auth_type | string | Тип авторизации |
| state | string | Статус конференции |
| start_time | datetime | Дата и время начала конференции |
| end_time | datetime | Дата и время окончания конференции |
| timezone | string | Название часового пояса |
| created | datetime | Дата и время создания конференции |
| changed | datetime | Дата и время изменения конференции |
| foreign | string | Внешний уникальный идентификатор конференции |
| link | string | Ссылка на конференцию |
| access_code | string | Код доступа |
| Тип | Описание |
|---|---|
| ADD | Добавление кандидата в базу |
| VACANCY-ADD | Добавление кандидата на вакансию |
| STATUS | Изменение этапа подбора кандидата |
| COMMENT | Комментарий по кандидату |
| REMOVED | Кандидат удален |
| DOUBLE | Объединение дубликатов |
| AGREEMENT | Действие с согласием на хранение Персональных Данных |
| Тип | Описание |
|---|---|
| confirmed | Подтверждение |
| tentative | Предварительное подтверждение |
| cancelled | Отказ |
| needsAction | Без ответа |
| Тип | Описание |
|---|---|
| interview | Интервью |
| other | Другое |
| Тип | Описание |
|---|---|
| popup | Всплывающее окно |
| На адрес электронной почты |
| Тип | Описание |
|---|---|
| busy | Занят |
| free | Свободен |
| Тип | Описание |
|---|---|
| not_sent | запрос не отправлялся |
| sent | запрос отправлен, но ответ не получен |
| accepted | получено согласие на хранение |
| declined | получен отказ на хранение |
VACANCY
{
"changes": {},
"event": {
"vacancy": {
"account_division": null,
"account_region": null,
"applicants_to_hire": 1,
"body": null,
"company": "jkl",
"conditions": null,
"created": "2021-10-05",
"deadline": null,
"fill_quotas": [
{
"applicants_to_hire": 1,
"closed": null,
"created": "2021-10-05T10:49:22+03:00",
"deadline": null,
"id": 9,
"vacancy_request": null
}
],
"frame_id": 9,
"hidden": false,
"id": 9,
"money": "325",
"multiple": false,
"parent": null,
"position": "fdg",
"priority": 0,
"requirements": null,
"state": "OPEN",
"values": {}
},
"vacancy_log": {
"created": "2021-10-05T10:49:22+03:00",
"id": 27,
"state": "JOIN"
}
},
"meta": {
"account": {
"id": 14,
"name": "tst",
"nick": "tsthr"
},
"author": {
"id": 13,
"name": "tst_name",
"email": "tst@example.com",
"meta": {}
},
"event_type": "VACANCY",
"retry": 0,
"version": "2.0",
"webhook_action": "ADD"
}
}| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор действия |
| created | datetime | Дата и время создания события |
| type | string | Тип действия |
| reason | string | Текст причины отклонения заявки, в случае когда по заявке принято решение "Не брать в работу") |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор вакансии |
| position | string | Название вакансии (должности) |
| company | string | Отдел, подразделение (null, если подключены подразделения) |
| money | string | Зарплата |
| state | number | Статус вакансии |
| hidden | bool | Скрыта ли вакансия от коллег |
| priority | number | Приоритет вакансии (может быть или 0 (обычный), или 1 (высокий)) |
| deadline | date | Дата дедлайна по вакансии |
| account_division | object | Подразделение (если подразделения подключены) |
| account_region | object | Регион |
| body | string | Обязанности в формате HTML |
| requirements | string | Требования в формате HTML |
| conditions | string | Условия в формате HTML |
| created | datetime | Дата и время создания вакансии |
| values | object | Дополнительные поля вакансии |
| frame_id | number | Идентификатор текущего фрейма вакансии |
| fill_quotas | list | Список квот вакансии |
| applicants_to_hire | number | Количество кандидатов к найму |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор подразделения |
| name | string | Название подразделения |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор региона |
| name | string | Название региона |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор квоты |
| applicants_to_hire | number | Количество кандидатов к найму |
| created | datetime | Дата создания квоты |
| closed | datetime | Дата закрытия квоты |
| deadline | date | Дата дедлайна квоты |
| vacancy_request | number | Идентификатор запроса на создание вакансии |
| Тип | Описание |
|---|---|
| CREATED | Вакансия создана |
| OPEN | Вакансия открыта / переоткрыта |
| CLOSED | Вакансия закрыта |
| HOLD | Работа по вакансии приостановлена |
| RESUME | Работа по вакансии возобновлена (после приостановки) |
| EDIT | Вакансия отредактирована |
| JOIN | Пользователь присоединился к работе по вакансии (к событию будет добавлено поле user) |
| LEAVE | Пользователь перестал работать по вакансии (к событию будет добавлено поле user) |
VACANCY-REQUEST
{
"changes": {},
"event": {
"vacancy_request": {
"account_vacancy_request": 16,
"created": "2021-10-05T10:50:16+03:00",
"id": 6,
"position": "ret",
"values": {
"body": "<p>body</p>",
"comment": "comment",
"company": "test_company",
"money": "3000000000",
"position": "test_position",
"requirements": "<p>test_requirements</p>"
}
},
"vacancy_request_log": {
"action": "CREATE",
"created": "2021-10-05T10:50:16+03:00",
"id": 6
}
},
"meta": {
"account": {
"id": 14,
"name": "tst",
"nick": "tsthr"
},
"author": {
"id": 13,
"name": "tst_name"
},
"event_type": "VACANCY-REQUEST",
"retry": 0,
"version": "2.0",
"webhook_action": "ADD"
}
}| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор заявки |
| position | string | Название вакансии |
| created | datetime | Дата создания заявки |
| account_vacancy_request | number | |
| values | object | Поля заявки |
| Имя | Тип | Описание |
|---|---|---|
| action | string | Действие |
| created | datetime | Дата создания лога |
| id | number | Идентификатор записи |
RESPONSE
{
"changes": {},
"event": {
"applicant_external_response": {
"created": "2021-10-05T11:37:30+03:00",
"data": {
"body": "lorem ipsum body for 23"
},
"foreign": "external-9-23",
"id": 179,
"resume": null,
"state": null,
"updated": "2018-12-20T23:00:00+03:00"
},
"vacancy_external": {
"account_vacancy_external": {
"account_source": {
"foreign": null,
"id": 361,
"name": "mocked",
"type": "user"
},
"auth_type": "NATIVE",
"id": 73,
"name": "Mocked Site"
},
"created": "2021-10-05T11:37:25+03:00",
"data": "comment",
"foreign": "1633415845",
"id": 9,
"state": "PUBLISHED",
"vacancy": {
"account_division": null,
"account_region": null,
"applicants_to_hire": 1,
"company": "company",
"created": "2021-10-05",
"deadline": null,
"fill_quotas": [
{
"applicants_to_hire": 1,
"closed": null,
"created": "2021-10-05 10:23:10",
"deadline": null,
"id": 6,
"vacancy_request": null
}
],
"frame_id": 6,
"hidden": false,
"id": 6,
"money": null,
"multiple": false,
"parent": null,
"position": "test_position",
"priority": 0,
"state": "OPEN",
"values": {}
}
}
},
"meta": {
"account": {
"id": 14,
"name": "tst",
"nick": "tsthr"
},
"event_type": "RESPONSE",
"retry": 0,
"version": "2.0",
"webhook_action": "ADD"
}
}| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор отклика |
| foreign | string | Внешний идентификатор отклика |
| resume | object | Резюме кандидата |
| state | string | Состояние отклика |
| created | datetime | Дата сохранения отклика в базе |
| updated | datetime | Дата создания/обновления отклика на карьерном сайте |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор внешней вакансии |
| foreign | string | Внешний идентификатор вакансии |
| data | string | |
| account_vacancy_external | object | |
| state | string | Состояние вакансии |
| vacancy | object | см. вебхук VACANCY |
| Имя | Тип | Описание |
|---|---|---|
| auth_type | string | Тип авторизации |
| id | number | Идентификатор записи |
| name | string | Текстовое название |
| account_source | object | Описание источника |
| Имя | Тип | Описание |
|---|---|---|
| foreign | string | Внешний идентификатор источника |
| id | number | Идентификатор записи |
| name | string | Имя источника |
| type | tring | Тип источника (системный\пользовательский) |
OFFER
{
"changes": {},
"event": {
"applicant": {
"birthday": null,
"company": null,
"email": null,
"first_name": "test_first",
"id": 10,
"last_name": "test_last",
"middle_name": "test_middle",
"money": null,
"pd_agreement": null,
"phone": null,
"photo": null,
"position": null,
"questionary": null,
"skype": null,
"social": [],
"values": {}
},
"applicant_offer": {
"account_applicant_offer_log": {
"id": 1,
"type": "ADD"
},
"applicant_offer_id": 12,
"created": "2021-10-26T14:12:50+03:00",
"id": 1,
"values": {
"offer_text": "<p>new_offer</p>",
"position_name": "ghfgdh",
"whom_date": "26.10.2021",
"whom_name": "test_last test_first test_middle"
}
},
"vacancy": {
"account_division": null,
"account_region": null,
"applicants_to_hire": 1,
"body": null,
"company": null,
"conditions": null,
"created": "2021-10-26",
"deadline": null,
"fill_quotas": [
{
"applicants_to_hire": 1,
"closed": null,
"created": "2021-10-26 14:12:16",
"deadline": null,
"id": 4,
"vacancy_request": null
}
],
"frame_id": 4,
"hidden": false,
"id": 4,
"money": null,
"multiple": false,
"parent": null,
"position": "test_posititon",
"priority": 0,
"requirements": null,
"state": "OPEN",
"values": {}
}
},
"meta": {
"account": {
"id": 14,
"name": "tst",
"nick": "tsthr"
},
"author": {
"email": "tst@example.com",
"id": 13,
"meta": {},
"name": "tst_name"
},
"event_type": "OFFER",
"retry": 0,
"version": "2.0",
"webhook_action": "ADD"
}
}
| Имя | Тип | Описание |
|---|---|---|
| account_applicant_offer_log | object | Лог предложения |
| applicant_offer_id | number | Идентификатор аккаунт предложения |
| created | datetime | Дата создания |
| id | number | Идентификатор предложения |
| values | object | Дополнительные поля предложения |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Иденитфикатор лога |
| type | string | Тип лога |
RECRUITMENT-EVALUATION
{
"changes": {},
"event": {
"recruitment_evaluation": {
"id": 1,
"account_survey": {
"id": 15,
"name": "Оценка найма",
"schema": {
"type": "object",
"required": [
"stars",
"comment"
],
"properties": {
"stars": {
"type": "number",
"title": "Общее впечатление о подборе",
"maximum": 10,
"minimum": 1
},
"comment": {
"type": "string",
"title": "Комментарий",
"minLength": 3,
"isNotEmpty": true
}
},
"additionalProperties": false
}
},
"survey_answer_requests": [
{
"id": 1,
"respondent": {
"id": 1,
"account_id": 1,
"custom_id": null,
"name": "test@example.com",
"email": "test@example.com"
},
"created": "2022-05-19T14:15:37+03:00",
"state": "SENT"
}
],
"survey_answer": {
"id": 1,
"respondent": {
"id": 1,
"account_id": 1,
"custom_id": null,
"name": "test@example.com",
"email": "test@example.com"
},
"data": {
"comment": "Отличная работа! "
},
"created": "2022-05-19T14:16:23+03:00",
"updated": "2022-05-19T14:16:23+03:00"
},
"stars": 10,
"applicant": {
"id": 236,
"photo": null,
"first_name": "test_name",
"last_name": "test",
"middle_name": null,
"birthday": null,
"position": null,
"company": null,
"money": null,
"phone": null,
"email": null,
"skype": null,
"questionary": null,
"values": {},
"social": [
{
"id": 1,
"social_type": "TELEGRAM",
"value": "some_tg",
"verification_date": null,
"verified": false
}
],
"pd_agreement": null
},
"vacancy": {
"id": 10,
"applicants_to_hire": 1,
"position": "QA",
"company": null,
"money": "1",
"state": "OPEN",
"hidden": false,
"priority": 0,
"deadline": null,
"account_division": {
"id": 2,
"name": "Отдел контроля качества"
},
"account_region": {
"id": 4,
"name": "name"
},
"created": "2022-05-19",
"multiple": false,
"parent": null,
"values": {
"reason": "Новая позиция",
"category": {
"id": 1,
"name": "Специалист",
"foreign": "Специалист",
"meta": {
"deadline": 35
}
}
},
"fill_quotas": [
{
"id": 1,
"applicants_to_hire": 1,
"deadline": "2022-05-19",
"vacancy_request": 9,
"created": "2022-05-19T14:15:14+03:00",
"closed": "2022-05-19T14:15:37+03:00"
}
],
"frame_id": 1
}
}
},
"meta": {
"account": {
"id": 11,
"name": "Huntflow",
"nick": "huntflow"
},
"author": {
"id": 1,
"email": "test@example.com",
"name": "test@example.com",
"meta": null
},
"event_type": "RECRUITMENT-EVALUATION",
"version": "2.0",
"retry": 0,
"webhook_action": "ADD",
"event_id": "3"
}
}
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор оценки найма |
| account_survey | object | Опрос оценки найма |
| survey_answer_requests | list[object] | Список запросов оценки найма |
| survey_answer | object | Ответ на запрос оценки найма |
| stars | number | Уровень оценки |
| applicant | object | см. вебхук APPLICANT |
| vacancy | object | см. вебхук VACANCY |
| created | datetime | Дата создания |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор опроса оценки найма |
| name | string | Название опроса оценки найма |
| schema | object | Схема опроса оценки найма |
| schema.required | list[string] | Обязательные поля |
| schema.properties | object | Описание полей схемы |
| schema.additionalProperties | bool | Разрешение на добавление в ответ на опрос полей, не указанных в properties. Всегда равен false |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор запроса оценки найма |
| respondent | object | Респондент |
| state | string | Состояние запроса оценки найма |
| created | datetime | Дата создания |
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор ответа на запрос оценки найма |
| respondent | object | Респондент |
| data.comment | string | Комментарий |
| created | datetime | Дата создания |
| updated | datetime | Дата обновления |
Респондент (recruitment_evaluation.survey_answer_requests.respondent, recruitment_evaluation.survey_answer_requests.respondent)
| Имя | Тип | Описание |
|---|---|---|
| id | number | Идентификатор респондента |
| account_id | number | Идентификатор аккаунта респондента в Хантфлоу |
| custom_id | number | Идентификатор аккаунта респондента во внешней системе |
| name | string | Имя респондента |
| string | Email респондента |
| Тип | Описание |
|---|---|
| SENT | Отправлено |
| NOT_SENT | Не отправлено |
| FAILED | Неудача |
SURVEY-QUESTIONARY
{
"changes": {},
"event": {
"survey_questionary": {
"id": 1,
"survey": {
"id": 15,
"name": "Оценка найма",
"schema": {
"type": "object",
"required": [
"d4hm5pRsbXPEQUSyiqXJA"
],
"properties": {
"d4hm5pRsbXPEQUSyiqXJA": {
"type": "string",
"title": "Hard question",
"minLength": 3,
"isNotEmpty": true
}
},
"additionalProperties": false
},
"ui_schema": {
"ui:order": ["d4hm5pRsbXPEQUSyiqXJA"],
"d4hm5pRsbXPEQUSyiqXJA": {
"ui:widget": "TextWidget",
"ui:description": "Hard question",
"ui:placeholder": "answer here"
}
},
"created": "2022-05-19T14:15:37+03:00",
"updated": "2022-05-19T14:15:37+03:00",
"title": "Hard Questionary",
"active": true,
"type": "type_q"
},
"created": "2022-05-19T14:15:37+03:00",
"respondent": {
"applicant_id": 123,
"name": "Some applicant"
},
"created_by": {
"account_id": 123,
"name": "Some recruiter"
},
"answer": {
"id": 123,
"created": "2022-05-19T14:15:37+03:00",
"data": {
"d4hm5pRsbXPEQUSyiqXJA": "Applicant's smart answer"
}
},
"link": "https://huntflow.ru/survey_questionary/11111111-1111-1111-1111-111111111111?lang=en_US"
},
"applicant_log_id": 123,
"applicant": {
"id": 236,
"photo": null,
"first_name": "test_name",
"last_name": "test",
"middle_name": null,
"birthday": null,
"position": null,
"company": null,
"money": null,
"phone": null,
"email": null,
"skype": null,
"questionary": null,
"values": {},
"social": [{
"id": 1,
"social_type": "TELEGRAM",
"value": "some_tg",
"verification_date": null,
"verified": false
}],
"pd_agreement": null
},
"vacancy": {
"id": 10,
"applicants_to_hire": 1,
"position": "QA",
"company": null,
"money": "1",
"state": "OPEN",
"hidden": false,
"priority": 0,
"deadline": null,
"account_division": {
"id": 2,
"name": "Отдел контроля качества"
},
"account_region": {
"id": 4,
"name": "name"
},
"created": "2022-05-19",
"multiple": false,
"parent": null,
"values": {
"reason": "Новая позиция",
"category": {
"id": 1,
"name": "Специалист",
"foreign": "Специалист",
"meta": {
"deadline": 35
}
}
},
"fill_quotas": [{
"id": 1,
"applicants_to_hire": 1,
"deadline": "2022-05-19",
"vacancy_request": 9,
"created": "2022-05-19T14:15:14+03:00",
"closed": "2022-05-19T14:15:37+03:00"
}],
"frame_id": 1
}
},
"meta": {
"account": {
"id": 11,
"name": "Huntflow",
"nick": "huntflow"
},
"author": {
"id": 1,
"email": "test@example.com",
"name": "test@example.com",
"meta": null
},
"event_type": "SURVEY-QUESTIONARY",
"version": "2.0",
"retry": 0,
"webhook_action": "ADD",
"event_id": "3"
}
}
| Имя | Тип | Описание |
|---|---|---|
| id | integer | Идентификатор анкеты |
| survey | object | Шаблон анкеты |
| respondent | object | Данные ответившего кандидата |
| created | string | Дата создания |
| created_by | object | Данные автора анкеты |
| answer | object | Данные ответа кандидата на анкету |
| link | string | Ссылка на анкету |
| Имя | Тип | Описание |
|---|---|---|
| id | integer | Идентификатор анкеты |
| title | string | Заголовок анкеты |
| created | string | Дата создания |
| updated | string | Дата последнего обновления |
| active | bool | Статус активности |
| schema | object | Схема данных анкеты |
| ui_schema | object | Схема визуального отображения анкеты |
| type | string | Тип анкеты (всегда равен type_q) |
| Имя | Тип | Описание |
|---|---|---|
| id | integer | Идентификатор анкеты |
| data | object | Данные ответа |
| created | string | Дата создания |
Данные хранятся в формате:
{
"d4hm5pRsbXPEQUSyiqXJA": "Some answer"
}Где:
- d4hm5pRsbXPEQUSyiqXJA - идентификатор вопроса (survey_questionary.survey.properties.d4hm5pRsbXPEQUSyiqXJA)
- Значение (в примере - "Some answer") - ответ. В зависимости от типа вопроса может меняться тип ответа.
Если вопрос подразумевает ответ в виде файла, то формат будет такой:
{
"id": 123,
"url": "%file_url%",
"name": "some_file_with_answer.doc",
"content_type": "application/msword"
}

