Автоматизация рабочих процессов с помощью вебхуков

hys_5_make_create_webhook.png
1697557917211.png 1697557930264.png
1697557942718.png
Кто-то среди вас, возможно, уловил одну, две... или три... подсказки о том, что мы, возможно, скоро поговорим об этом, и этот день наконец настал! Сегодня мы рады показать вам наш взгляд на столь востребованную реализацию веб-хука в XenForo.

Для тех из вас, кто раньше не слышал о веб-хуках, это мощная утилита, позволяющая одному приложению или службе отправлять информацию другому при возникновении определенных событий. Это могут быть повседневные действия, например оплата доступа к продукту или услуге, или более конкретные реализации, например автоматическое размещение новой темы с вашего форума в Discord.

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

Здесь, в XenForo, мы автоматизируем большую часть нашего рабочего процесса с помощью веб-хуков, некоторые из которых могут быть очевидными, другие — менее очевидными. Например, мы получаем вебхук от GitHub каждый раз, когда исправляем отчет об ошибке — это то, что автоматически помечает отчеты об ошибках как исправленные. Другой пример: мы отправляем вебхук в Slack каждый раз, когда кто-то публикует отчет об ошибке или сообщает о контенте.

Вебхуки, как общая концепция, могут быть очень гибким инструментом с бесконечным количеством вариантов использования. Возможность отправлять вебхуки всякий раз, когда происходят определенные события на вашем форуме, в другую систему — это то, чем вы сможете воспользоваться, начиная с XenForo 2.3.

Хотя на первый взгляд может показаться, что веб-хуки предназначены для разработчиков, существует ряд фантастических сторонних сервисов автоматизации, которые способны получать веб-хуки и запускать действия. Эти сервисы, такие как IFTTT, Make и Zapier, предлагают удобный и удобный способ автоматизации и интеграции приложений на ваш веб-сайт с тысячами уже доступных интеграций.

Более тесная интеграция с одним или несколькими из этих сервисов рассматривается в будущих выпусках, но все три приведенных выше примера принимают веб-хуки в качестве триггера.

Как всегда, здесь есть о чем поговорить, поэтому смело переходите к конкретному разделу ниже:
Мы рады услышать, что вы думаете о веб-хуках, которые появятся в XenForo, и о том, какие варианты использования вы будете изучать.

Вам уже достаточно? У нас нет. На следующей неделе будет еще больше!
 
Настройка XenForo для отправки вебхуков

Настройка XenForo для отправки вебхуков​


Для целей этого примера мы собираемся использовать , но вы можете добиться аналогичных результатов с помощью IFTTT и Zapier.

Теперь мы собираемся автоматически публиковать сообщение на канале сервера Discord при создании новой темы на форуме объявлений.

В редакторе сценариев «Создать» мы нажмем кнопку «Добавить», найдем приложение «Вебхуки» и затем выберем триггер «Пользовательский вебхук»:
1697558468478.png
Target URL-адрес — это URL-адрес скрипта/сервиса, который получит ваш вебхук.

Secret — это значение, которое отправляется в XF-Webhook-Secret заголовке запроса при отправке вебхука. Это необязательно, но если вы решите использовать его в своем собственном сценарии приема вебхука, вы можете использовать его, чтобы убедиться, что запрос содержит правильный секрет и аутентифицирован.

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

Здесь вы можете указать одно или несколько событий для разных типов контента, для которых вы хотите активировать вебхуки. Когда вы расширяете тип контента, вы столкнетесь с несколькими вариантами. Прежде всего, вам нужно принять решение относительно того, какие события вы хотели бы запускать вебхуком.

Для каждого типа контента вы можете либо не отправлять какие-либо события, отправлять все события или отправлять только определенные события.
1697558613445.png
В этом примере мы будем отправлять только на thread_insert.

Некоторые типы контента также позволяют указать дополнительные критерии фильтрации. Например, вас могут интересовать только темы, размещенные на определенном форуме.

Третий раздел — это последние несколько настроек, которые вы можете изменить перед сохранением:
1697558688358.png
Вы можете изменить способ кодирования вебхука. По умолчанию это так, application/json но вы также можете использовать его x-www-form-urlencoded вместо этого.

Вы можете отключить здесь «Включить проверку SSL», если вам необходимо, но по большей части вы оставите это включенным, если у вас нет конкретной причины.

Наконец, вы можете установить вебхук в активное/неактивное состояние.

Как только это будет сохранено, все, что останется сделать, это опубликовать новую тему, чтобы активировать вебхук, а затем использовать webhook.site, чтобы увидеть, какие данные мы отправили... вот они!
JSON:
{
  "content_type": "thread",
  "event": "insert",
  "content_id": 216847,
  "data": {
    "custom_fields": {},
    "discussion_open": true,
    "discussion_state": "visible",
    "discussion_type": "article",
    "first_post_id": 1649025,
    "first_post_reaction_score": 0,
    "FirstPost": {
      "attach_count": 0,
      "is_first_post": true,
      "is_last_post": true,
      "is_reacted_to": false,
      "last_edit_date": 0,
      "message": "[COLOR=rgb(224, 224, 224)]Welcome to the first in our Have you seen...? series for XenForo 3.0\n\n[MEDIA=youtube]dQw4w9WgXcQ[/MEDIA][/COLOR]",
      "message_parsed": "<span style=\"color: rgb(224, 224, 224)\">Welcome to the first in our Have you seen...? series for XenForo 3.0<br />\n<br />\n<div data-template-name=\"_media_site_embed_youtube\" class=\"bbMediaWrapper\" data-media-site-id=\"youtube\" data-media-key=\"dQw4w9WgXcQ\">\n\t<div class=\"bbMediaWrapper-inner\">\n\t\t<iframe src=\"https://www.youtube.com/embed/dQw4w9WgXcQ?wmode=opaque\"\n\t\t\t\tloading=\"lazy\"\n\t\t\t\twidth=\"560\" height=\"315\"\n\t\t\t\tframeborder=\"0\" allowfullscreen=\"true\"></iframe>\n\t</div>\n</div></span>",
      "message_state": "visible",
      "position": 0,
      "post_date": 1697446950,
      "post_id": 1649025,
      "reaction_score": 0,
      "thread_id": 216847,
      "User": {
        "avatar_urls": {
          "o": "https://xenforo.com/community/data/avatars/o/11/11388.jpg?1696499135",
          "h": "https://xenforo.com/community/data/avatars/h/11/11388.jpg?1696499135",
          "l": "https://xenforo.com/community/data/avatars/l/11/11388.jpg?1696499135",
          "m": "https://xenforo.com/community/data/avatars/m/11/11388.jpg?1696499135",
          "s": "https://xenforo.com/community/data/avatars/s/11/11388.jpg?1696499135"
        },
        "is_staff": true,
        "location": "UK",
        "message_count": 33705,
        "profile_banner_urls": {
          "l": "https://xenforo.com/community/data/profile_banners/l/11/11388.jpg?1696466377",
          "m": "https://xenforo.com/community/data/profile_banners/m/11/11388.jpg?1696466377"
        },
        "question_solution_count": 98,
        "reaction_score": 40385,
        "register_date": 1318189653,
        "signature": "",
        "trophy_points": 823,
        "user_id": 11388,
        "user_title": true,
        "username": "Chris D",
        "view_url": "https://xenforo.com/community/index.php?members/chris-d.11388/",
        "vote_score": 332
      },
      "user_id": 11388,
      "username": "Chris D",
      "view_url": "https://xenforo.com/community/index.php?posts/1649025/",
      "warning_message": ""
    },
    "Forum": {
      "breadcrumbs": [
        {
          "node_id": 1,
          "title": "Official forums",
          "node_type_id": "Category"
        }
      ],
      "description": "This forum spotlights some of XenForo's interesting features. Spotlights on features in upcoming releases will be posted here.",
      "display_in_list": true,
      "display_order": 200,
      "image_url": "",
      "node_id": 3,
      "node_name": "have-you-seen",
      "node_type_id": "Forum",
      "parent_node_id": 1,
      "title": "Have you seen...?",
      "type_data": {
        "allow_posting": true,
        "article": {
          "display_style": "preview",
          "expanded_snippet": 250,
          "expanded_per_page": 13
        },
        "can_create_thread": true,
        "can_upload_attachment": true,
        "discussion_count": 135,
        "forum_type_id": "article",
        "is_unread": true,
        "last_post_date": 1697446950,
        "last_post_id": 1649025,
        "last_post_username": "Chris D",
        "last_thread_id": 216847,
        "last_thread_prefix_id": 0,
        "last_thread_title": "What's new in XenForo 3.0?",
        "message_count": 18398,
        "min_tags": 0,
        "require_prefix": false
      },
      "view_url": "https://xenforo.com/community/index.php?forums/have-you-seen/"
    },
    "highlighted_post_ids": [],
    "is_first_post_pinned": true,
    "is_search_engine_indexable": true,
    "last_post_date": 1697446950,
    "last_post_id": 1649025,
    "last_post_user_id": 11388,
    "last_post_username": "Chris D",
    "node_id": 3,
    "post_date": 1697446950,
    "prefix_id": 0,
    "reply_count": 0,
    "sticky": false,
    "tags": [],
    "thread_id": 216847,
    "title": "What's new in XenForo 3.0?",
    "User": {
      "avatar_urls": {
        "o": "https://xenforo.com/community/data/avatars/o/11/11388.jpg?1696499135",
        "h": "https://xenforo.com/community/data/avatars/h/11/11388.jpg?1696499135",
        "l": "https://xenforo.com/community/data/avatars/l/11/11388.jpg?1696499135",
        "m": "https://xenforo.com/community/data/avatars/m/11/11388.jpg?1696499135",
        "s": "https://xenforo.com/community/data/avatars/s/11/11388.jpg?1696499135"
      },
      "is_staff": true,
      "location": "UK",
      "message_count": 33705,
      "profile_banner_urls": {
        "l": "https://xenforo.com/community/data/profile_banners/l/11/11388.jpg?1696466377",
        "m": "https://xenforo.com/community/data/profile_banners/m/11/11388.jpg?1696466377"
      },
      "question_solution_count": 98,
      "reaction_score": 40385,
      "register_date": 1318189653,
      "signature": "",
      "trophy_points": 823,
      "user_id": 11388,
      "user_title": true,
      "username": "Chris D",
      "view_url": "https://xenforo.com/community/index.php?members/chris-d.11388/",
      "vote_score": 332
    },
    "user_id": 11388,
    "username": "Chris D",
    "view_count": 0,
    "view_url": "https://xenforo.com/community/index.php?threads/whats-new-in-xenforo-3-0.216847/"
  }
}
Любой, кто играл с REST API, может найти формат вебхука здесь несколько знакомым, и на это есть очень веская причина: за кулисами построение результатов вебхука — это тот же код, который мы используем для создания ответов API. Вы можете точно настроить результаты, чтобы включить или исключить определенные ключи в зависимости от типа отображаемого результата, но по большей части ответы будут одинаковыми.

На верхнем уровне результатом веб-хука вы увидите ключи content_type, event и content_id, а остальные данные, связанные с контентом, находятся под ключом data.

1697559027882.png

Здесь вы можете увидеть секретное значение вебхука, а также несколько дополнительных заголовков, которые вы можете использовать, если хотите, перед анализом всего содержимого, например xf-webhook-event и xf-content-type.
Это все очень круто, но давайте посмотрим, как вы можете использовать это в реальном мире.
 
Реальный пример вебхука

Реальный пример вебхука​


Для целей этого примера мы собираемся использовать , но вы можете добиться аналогичных результатов с помощью IFTTT и Zapier.

Теперь мы собираемся автоматически публиковать сообщение на канале сервера Discord при создании новой темы на форуме объявлений.

В редакторе сценариев «Создать» мы нажмем кнопку «Добавить», найдем приложение «Вебхуки» и затем выберем триггер «Пользовательский вебхук»:
1697559155542.png
1697559162730.png
Затем мы нажимаем «Создать вебхук» и заполняем некоторые основные данные. Здесь вы можете указать ограничения по IP в качестве меры безопасности:
1697559174866.png
Вместо того, чтобы указывать здесь IP-адрес, давайте нажмем «Показать дополнительные настройки» и отметим «Получить заголовки запросов». Это позволит нам убедиться, что секрет вебхука, который мы отправляем вместе с запросом, верен.

Это даст вам адрес вашего вебхука. Мы изменим наш существующий вебхук, чтобы он указывал target URL-адрес на новый URL-адрес создания вебхука, и обновим фильтры, чтобы они использовали событие, thread_insert когда что-то публикуется на форуме «Объявления».

Чтобы максимально эффективно использовать возможности Make, ему необходимо понимать вашу структуру данных. Самый простой способ сделать это в этом случае — создать тестовый поток или дождаться создания нового потока.

Прежде чем настраивать секретный фильтр вебхука, мы нажмем «Добавить», чтобы добавить новый модуль, найдем «Discord» и нажмите «Отправить сообщение».
1697559223441.png
Здесь вы теперь можете настроить сервер Discord и подключиться к нему. Просто нажмите «Создать соединение», дайте ему имя и завершите процесс входа в систему, чтобы авторизовать свою учетную запись Make для подключения к вашей учетной записи Discord, выбрав целевой сервер Discord.
1697559249774.png
После авторизации бот Make (или Integromat) будет добавлен на ваш сервер. Затем вы можете вернуться в Make, чтобы точно настроить то, что вы хотите, чтобы произошло при получении вебхука.

Убедившись, что выбран вариант «Отправить сообщение на канал», вы можете указать имя своего канала в качестве цели для входящей цепочки. Вам также необходимо заполнить поле «Сообщение» тем, что вы хотите опубликовать.

Если хотите, это может быть полностью статичное сообщение, но зачем это делать, если для своего сообщения можно использовать данные из входящего вебхука?

1697559273259.png
Как только вы нажмете «ОК», это все, что вам нужно сделать. Но давайте просто взглянем на фильтры. Для этого просто нажмите на значок между двумя модулями: вебхуком и модулем Discord. Это позволяет вам «Настроить фильтр».
1697559290954.png
Мы собираемся использовать тот же секрет вебхука, который мы установили ранее, и скажем, что заголовок xf-webhook-secret должен быть равен этому. Сюда же можно добавить кучу других фильтров и условий. Хотя в XenForo вы можете указать определенные условия, например форум, вы также можете легко настроить эти фильтры в самом Make.

И все, что остается сделать, это дождаться, пока темы начнут публиковаться прямо в вашем Discord:
1697559339282.png
 

    MDa

    Баллов: 1
    thx
Назад
Сверху Снизу