Простой дизайн для интеграции Webhook

Новости

В последнее время я обращался с множеством третьих сторонних интеграций, которые требовали обслуживания для управления веб -крючками, когда возникают определенные события. Итак, сегодня я хочу выделить определенные ключевые моменты на входящих веб -крючках и сравнить методы интеграции, используя WebHooks против подхода, основанного на опросе.

Представьте себе этот сценарий:

Случай клиента закрыт в ServiceNow. Вскоре после этого клиент получает автоматический телефонный звонок от третьей партийной системы с просьбой отметить услугу с 1 до 5. Как только он отправит свою записку, ServiceNow должен обновить исходный случай с этими комментариями. Но вот пример: ServiceNow должен оставаться информированным о состоянии опроса в любое время.

В этом сценарии я полагаю, что система, которую мы интегрируем с поддержкой Webhook.

Давайте рассмотрим два решения для управления этим, но сначала мы должны знать, когда использовать WebHook:

  • Сообщения, вызванные конкретными событиями
  • Полезный отдаленный человек в свете и световой информации
  • Уведомления на основе мощности для устранения частых опросов
  • Необходимо только простое признание

Решение 1: подход на основе опроса

1. Сообщение из пост -отдыха: ServiceNow указывает на внешнюю систему, что дело закрыто и просит его запустить опрос.

2. Получите сообщение REST: ServiceNow периодически проверяет, чтобы увидеть государство и примечание опроса.

3. Планируемое использование или поток: регулярно работает, чтобы проверить, завершил ли клиент расследование и обновляет дело соответствующим образом.

Это решение работает, но оно потребляет ненужные ресурсы из -за непрерывного обследования и немного сложны.

Давайте посмотрим на решение 2

Решение 2: подход на основе веб -хука

1. Сообщение от пост -отдыха: идентично ранее, сообщите внешней системе, что корпус закрыт.
2
AHMEDDRAR_3-1741975347203.png
Это решение кажется привлекательным, потому что мы получаем обновления в режиме реального времени, мы уменьшаем использование ресурсов и намного проще и чище.

ЧИТАТЬ  7 советов по стильному дизайну, которые мы подсмотрели в ванной блогера - INMYROOM

Пример полезной нагрузки Webhook

Вот что мы получили бы третий -сторонник Webhook:

{
  "web_hook_id": "0229302039",
  "survey": "complete",
  "case_number": "CS0123267",
  "customer_rating": 5
}

Вот как создать сценарий REST API для получения WebHook

  1. Доступ: System Web Services> API Scripted Rest.

  2. Нажмите «Новый», предоставьте основное имя и путь API и нажмите «Отправить».

  3. Под созданным API REST нажмите на ресурсы, затем нажмите «Новый».

  4. Предоставьте подробности:

Ahmeddrar_0-1741557608775.png

Ahmeddrar_1-1741558458113.png

Что касается аутентификации, в этом примере я генерирую уникальный токен, используя Glides OnRandomutil — GetSecurerandomString и хранят его в качестве свойства зашифрованного системы. Я притворяюсь, что внешняя система передает ее в качестве ключевого API в заголовке спроса.

Вот как создать один сейф:

 var secureRandom = GlideSecureRandomUtil;
 sToken = secureRandom.getSecureRandomString(25);

Вот образец сценария для управления запросами WebHook в сценарии API:

(function process(request, response) {

    // Retrieve the request URL to validate incoming request origin
    var requestedURI = request.url;

    // Fetch the valid API key stored securely in system properties
    var validApiKey = gs.getProperty('sn_customerservice.webhook.api.key');

    // Get the API key provided in the request header for authentication
    var apiKeyFromHeader = request.getHeader('X-API-Key');

    // Validate the provided API key and ensure the request URL is from the trusted domain
    if (apiKeyFromHeader !== validApiKey || requestedURI.indexOf('trustedDomain') == -1) {
        // If validation fails, respond with a 403 Forbidden error
        response.setStatus(403);
        response.setBody({
            "error": "Forbidden",
            "message": "Unauthorized: invalid API key or domain"
        });
        return; // Terminate execution if validation fails
    }

    // Extract the JSON payload data from the webhook request body
    var body = request.body.data;

    // Obtain case number and customer rating from the payload
    var caseNumber = body.case_number;
    var customerRating = body.customer_rating;

    // Prepare to update the specific customer service case
    var grCS = new GlideRecord('sn_customerservice_case');
    grCS.addQuery('number', caseNumber); // Search case by its number
    grCS.query();

    // If the case record exists, update the customer rating
    if (grCS.next()) {
        grCS.u_customer_rating = customerRating; // Update rating field
        grCS.update(); // Commit changes

        // Send a successful response confirming the update
        response.setStatus(200);
        response.setBody({
            "message": "Case updated successfully."
        });
    } else {
        // If case not found, respond with a 404 Not Found error
        response.setStatus(404);
        response.setBody({
            "error": "Case not found."
        });
    }

})(request, response);

Source

ЧИТАТЬ  Культурные события Хельсинки в 2025 году: год дизайна, искусства и праздников
Оцените статью
Своими руками