Описание

Требования к реализации ресурса, обрабатывающего webhook

Ожидаем, что на клиенте будет реализована ресурс с POST методом, которая будет отвечать 2xx http кодом. В случае, если получаем 2xx http код, то считаем, что вебхук получен и обработан на стороне клиента.

Ресурс должен быть доступен без какой - либо аутентификации / авторизации, и быть публичным, IP с которого будем отправлять webhook – 84.201.153.160.

В случае, если при отправки на endpoint будем получать не 2xx ответ, будет совершено 5 попыток отправки данных, с временным интервалами 1 секунда между запросами.

Возможные вариации подписания

Для каждого кабинета в Консоли возможно реализовать (на стороне клиента) один или несколько уникальных эндпоинтов, на которые в дальнейшем подпишем отправку вебхуков (например, один для demo-кабинета, один для боевого);

Для каждого вебхука возможна реализация своего эндпоинта (на стороне клиента), обрабатывающего ту или иную полезную нагрузку, в зависимости, от события, на который хочет подписаться компания. Например, если будет потребность на стороне клиента обрабатывать ивент “Подпись документа” на одном ресурсе, а “Создание задания” иным ресурсом.

Порядок подписания клиентов на вебхук

На стороне клиента реализован ресурс, обрабатывающий полезную нагрузку от вебхуков, в соответствии с описанием выше и обрабатывающий полезную нагрузку вебхуков / вебхука (для тех ивентов, которые компания хочет получать нотификацию);
Клиент передает (с учетом тестирования на демо-кабинете): название компании в Консоль.Про, эндоинт(ы), и вебхуки (название), которые компания хочет получать и обрабатывать на своей стороне;
После тестирования на стороне клиента обработку вебхуков, клиент передает боевой кабинет, эндпоинты и вебхуки, на которые компания хочет получать уведомления.

Общая схема полезной нагрузки в вебхуках

Объект details – полезная нагрузка, отправляемая в вебхуке,в зависимости от типа ивента.

action_cipher – уникальное наименование вебхука (ивента).

Упрощенная полезная нагрузка, отправляемая, в хуке:

{ "details": { "id": 1234 }, "manifest": { "action_cipher": "random_name" } }


Текущие экшены, настроенные на отправку вебхуков:

ciphertitlepayloadКомментарии
complete_registrationИсполнитель закончил онбординг{"details": {"id": 715095, "name": "Тест Вебхука Три", "phone": "+70000125781", "status": "waiting_for_contract_sign", "comment": null, "created": 1711984754, "updated": 1711984829, "cancelled": false, "scenario_id": "webhook_test_31824043_ddb6_47fa_94de_eff946058095", "contractor_id": 522863, "custom_fields": {}, "template_fields": {"date": "01.04.2024"}}, "manifest": {"action_cipher": "complete_registration"}}Отправляется в случае, если пользователь ранее не был зарегистрирован на платформе, и проходит регистрацию впервые.

Отправляется объект приглашения, см. ресурс –
Запросить все приглашения @Konsol

Описание сущностей –
Приглашения исполнителей @Konsol

Отправляется для сценариев:

- пользователь прошел онбординг и Консоль сгенерировала договор
- пользователь прошел онбординг и договор не предусмотрен для приглашения (статус будет completed)
hiring.complete_registrationДополнительный онбординг завершен исполнителем{"details": {"id": 715127, "name": "Тест Вебхука Четыре", "phone": "+70000517289", "status": "waiting_for_contract_sign", "comment": null, "created": 1711985674, "updated": 1711985721, "cancelled": false, "scenario_id": "webhook_test_31824043_ddb6_47fa_94de_eff946058095", "contractor_id": 522886, "custom_fields": {}, "template_fields": {}}, "manifest": {"action_cipher": "hiring.complete_registration"}}Отправляется в случае, если пользователь ранее был зарегистрирован на платформе, и проходит регистрацию впервые.

Отправляется объект приглашения, см. ресурс –
https://konsol.readme.io/reference/invitation-all

Описание сущностей –
https://konsol.readme.io/reference/invitation

Отправляется для сценариев:

- пользователь прошел онбординг и Консоль сгенерировала договор
- пользователь прошел онбординг и договор не предусмотрен для приглашения (статус будет completed)
sign_contractИсполнитель подписал договор{"details": {"id": 510614, "contractor_id": 261259}, "manifest": {"action_cipher": "sign_contract"}}Отправляется, в случае, когда исполнитель подписывает договор.

В полезной нагрузке:

- id – идентификатор договора;
- contractor_id– идентификатор исполнителя.
sign_contract_by_allЗавершить подписание договора всеми сторонами{"details": {"id": 285399, "contractor_id": 173053}, "manifest": {"action_cipher": "sign_contract_by_all"}}Отправляется, в случае, когда договор переходит в финальный статус (подписан всеми необходимыми сторонами).

В полезной нагрузке:

- id – идентификатор договора;
- contractor_id – идентификатор исполнителя.
workflow.accept_tasksПринять задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.accept_tasks"}}
workflow.check_in_tasksНачать работу над заданиями{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.check_in_tasks"}}
workflow.complete_taskЗавершить задание{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.complete_task"}}
workflow.confirm_tasksВзять задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.confirm_tasks"}}
workflow.create_taskСоздать задание{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.create_task"}}
workflow.decline_tasksОтказаться от заданий{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.decline_tasks"}}
workflow.import_tasksИмпортировать задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.import_tasks"}}
workflow.reject_tasksОтклонить задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.reject_tasks"}}
workflow.revoke_tasksОтозвать задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.revoke_tasks"}}
workflow.seed_tasksЗаполнить задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.seed_tasks"}}
workflow.submit_tasksРазместить задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.submit_tasks"}}
workflow.update_taskОбновить задание{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.update_task"}}
workflow.auto_confirm_tasksПринять задание автоматически{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.auto_confirm_tasks"}}
workflow.check_in_by_contractorИсполнитель подтвердил начало задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.check_in_by_contractor"}}
workflow.check_out_by_contractorИсполнитель подтвердил завершение задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.check_out_by_contractor"}}
workflow.confirm_task_reminder_by_contractorИсполнитель подтвердил выход на задание{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.confirm_task_reminder_by_contractor"}}
workflow.decline_task_reminder_by_contractorИсполнитель отказался от выхода на задание{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.decline_task_reminder_by_contractor"}}
workflow.delete_tasksУдаление заданий{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.delete_tasks"}}
workflow.destroy_tasksУдаление заданий{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.destroy_tasks"}}
workflow.finalize_tasksЗавершение заданий с одновременным созданием актов{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.finalize_tasks"}}
workflow.ignore_check_in_by_contractorИсполнитель не подтвердил начало задания{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.update_task"}}
workflow.ignore_task_reminder_by_contractorИсполнитель проигнорировал задание{"details": {"id": 50255, "state_code": "created"}, "manifest": {"action_cipher": "workflow.ignore_check_in_by_contractor"}}
tinkoff.payment_succeededПроизведена выплата по акту (актуально ТОЛЬКО для демо-кабинетов){"details": {"task_id": 45436}, "manifest": {"action_cipher": "tinkoff.payment_succeeded"}}В ответе:

task_id – идентификатор акта, по которому произведена выплата
billing.payment_succeededПроизведена выплата по акту (актуально ТОЛЬКО для боевых кабинетов на номинальных счетах){"details": {"task_id": 47582}, "manifest": {"action_cipher": "billing.payment_succeeded"}}В ответе:

task_id – идентификатор акта, по которому произведена выплата
external_bank.payment_succeededОтмечен оплаченым (клиент платит не через Консоль, а через свое платежное решение){"details": {"task_id": 48135}, "manifest": {"action_cipher": "external_bank.payment_succeeded"}}В ответе:

task_id – идентификатор акта, по которому произведена выплата
fio_changedИзменение ФИО исполнителя (отправляется только для заапрувленных поддержкой пользователей){"details": {"user_id": 120399, "last_name": "Логино", "first_name": "Вежи", "patronymic": "Харитонов", "contractor_id": 120737}, "manifest": {"action_cipher": "fio_changed"}}В ответе:
user_id – идентификатор пользователя

last_name – измененная фамилия пользователя;

first_name– измененное имя пользователя;

patronymic– измененное имя отчество пользователя ;

contractor_id– идентификатор исполнителя.
mobile_phone_changedИзменение номера телефона исполнителя
(отправляется только для заапрувленных поддержкой пользователей)
{"details": {"user_id": 120399, "mobile_phone": "+70002977728", "contractor_id": 120737}, "manifest": {"action_cipher": "mobile_phone_changed"}}В ответе:
user_id идентификатор пользователя

mobile_phone– измененный номер телефона исполнителя;

contractor_id– идентификатор исполнителя.