Требования к реализации ресурса, обрабатывающего 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" } }
Текущие экшены, настроенные на отправку вебхуков:
cipher | title | payload | Комментарии |
---|---|---|---|
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 – идентификатор исполнителя. |