Пользовательские функции обработки (User Adapter)#
Для указания пользовательских функций при получении уведомления используются файлы user_adapter
. В данных файлах вам требуется указать функции обработки уведомлений (например: запись уведомления в базу, отправка запроса в другой микросервис). В качестве шаблона можно переименовать файл source/_user_adapter.cpp
. Пример обработки всех типов уведомлений доступен в файле user_adapter_example.cpp
в папке examples
.
Адаптер для пользователя находится в следующем файле:
source/user_adapter.cpp
Если у вас нет требуемого файла, создайте его путем удаления нижнего подчеркивания из названия `source/_user_adapter.cpp
файла.
1. Обновление User Adapter#
Мы будем обновлять include/user_adapter.h
и source/_user_adapter.cpp
файлы по мере выпуска новых вебхуков. Если вы столкнулись с ошибкой сборки, где написано о том, что компилятор не смог найти требуемые функции из user_adapter
, то в этом случае вам необходимо добавить новые функции из source/_user_adapter.cpp
в ваш source/user_adapter.cpp
.
2. Описание User Adapter#
Адаптер для пользователя содержит ваши обработчики вебхуков. Программа работает по следующему алгоритму:
-
Запрос к серверу принимает класс
webhook
; -
Класс
webhook
создает объектResponse
и передает тело запроса классуValidator
; -
После проверки, объект
Response
передается в обработчикUser Adapter
на основеwebToken
в теле запроса.; -
Функция обработки в
User Adapter
возвращаетtrue
в случае ошибки илиfalse
, если обработка произошла без ошибок. На основе этого значения, сервер вернет или 200 OK или 400 Bad Request.
Структура объекта Response
(response.h):
struct Response {
bool error = true; // true, если вебхук не прошел валидацию
std::string typeWebhook = ""; // webhookType из тела запроса
std::string bodyStr = ""; // содержит тело запроса, если error = false, иначе описание ошибки валидации
nlohmann::json bodyJson = ""; // тело пришедшего запроса
}
- Функции в UserAdapter описываются как:
static bool onWebhookType(greenapi::Response& body);
- Пример функции UserAdapter:
В данном примере, обработчик будет вызван вебхуком с типом IncomingMessageReceived
. С помощью структуры Response
, описанной выше, вы можете проверить результат валидации запроса (body.error
), обратиться к json структуре вебхука (body.bodyJson
) или получить доступ к телу запроса (body.bodyStr
).
bool UserAdapter::onIncomingMessageReceived(greenapi::Response& body) {
// Каждый запрос содержит typeWebhook. Если typeWebhook нет в запросе, запрос отклоняется сервером.
const auto typeWebhook = body.bodyJson["typeWebhook"];
// Если вам нужно вернуть ошибку в процессе обработки запроса, верните true из этой функции.
// Это изменит статус запроса на 400 Bad Request с немедленным возвратом результата HTTP запроса.
//
// if (<error>) {
// return true;
//}
greenapi::Logger::Log("Received webhook: " + nlohmann::to_string(typeWebhook) + std::string(" with body: ") + body.bodyStr, "info");
// Опишите ваш обработчик здесь:
// Если нет ошибок, верните false. После этого сервер вернет статус запроса 200 OK
return false;
}