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

  • Меценат
291498-b52a3bb36c774566643144ab5904afa9.jpg.png291499-6454d51a1080bf4e2a4bddc351a5de38.jpg.png

291500-c93010d9502e006e70943125d9525ee7.jpg.png

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

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

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

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

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

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

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

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

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

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

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

Вы можете найти вебхуки в панели управления администратора в разделе «Настройка» > «Вебхуки». Чтобы создать свой первый вебхук, нажмите «Добавить вебхук». Страница добавления примерно разделена на три части. Первый позволяет вам определить важные значения, такие как заголовок и target URL-адрес:

hys_5_setup1.png

Target URL-адрес — это URL-адрес скрипта/сервиса, который получит ваш вебхук.

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

Прокрутив немного вниз, вы увидите список типов контента:

hys_5_setup2.png

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

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

hys_5_setup3.png

В этом примере мы будем отправлять только на thread_insert .

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

Третий раздел — это последние несколько настроек, которые вы можете изменить перед сохранением:

hys_5_setup4.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, а остальные данные, относящиеся к содержимому, находятся под ключом. Запрос вебхука также включает в заголовки различную информацию: [ICODE]event content_id data

hys_5_webhook.png

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

Это все очень круто, но давайте посмотрим, как вы можете использовать это в реальном мире.
 

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

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

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

В редакторе сценариев «Создать» мы нажмем кнопку «Добавить», найдем приложение «Вебхуки» и затем выберем триггер «Пользовательский вебхук»:

1697451399331.png1697451543178.png

Затем мы нажимаем «Создать вебхук» и заполняем некоторые основные данные. Здесь вы можете указать ограничения по IP в качестве меры безопасности:

hys_5_make_create_webhook.png

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

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

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

Прежде чем настраивать секретный фильтр вебхука, мы нажмем «Добавить», чтобы добавить новый модуль, найдем «Discord» и нажмите «Отправить сообщение».

hys_5_make_discord_create.png

Здесь вы теперь можете настроить сервер Discord и подключиться к нему. Просто нажмите «Создать соединение», дайте ему имя и завершите процесс входа в систему, чтобы авторизовать свою учетную запись Make для подключения к вашей учетной записи Discord, выбрав целевой сервер Discord.

hys_5_make_discord_auth.png

После авторизации бот Make (или Integromat) будет добавлен на ваш сервер. Затем вы можете вернуться в Make, чтобы точно настроить то, что вы хотите, чтобы произошло при получении вебхука.

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

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

hys_5_make_discord_message.png

Как только вы нажмете «ОК», это все, что вам нужно сделать. Но давайте просто взглянем на фильтры. Для этого просто нажмите на значок между двумя модулями: вебхуком и модулем Discord. Это позволяет вам «Настроить фильтр».

hys_5_make_filter_webhook_secret.png

Мы собираемся использовать тот же секрет вебхука, который мы установили ранее, и скажем, что заголовок xf-webhook-secret должен быть равен этому. Сюда же можно добавить кучу других фильтров и условий. Хотя в XenForo вы можете указать определенные условия, например форум, вы также можете легко настроить эти фильтры в самом Make.

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

hys_5_make_discord_rick_roll.png
 
Нууу... Выглядит интересно, а есть какие-нибудь идеи по использованию, кроме автоматического постинга контента в соц. сети и мессенджеры?
 
MrFallen, Все что угодно, хоть настроить мигание лампочки дома когда приходит личное сообщение.
 
MrFallen, на смыв унитаза лучше настроить 🤣
 
Как по мне самый бесполезный функционал. Для кого вообще такое? Разве что тем, кто часто организовывает конкурсы, ивенты, сборы, ну может для новостных местами. Но на этом то и все, не особо то вижу применения на это... своего рода ставим тригер на определенное действие, а там и срок активности и прочее и оно всплывает в виде сообщения или иконки, как объявление. Не знаю, это типа похлопать им надо за это? Может, уже что-то полезное наконец запилят?)) Я всё не дождусь более продуманной доработки файлового менеджера и может когда-нибудь родного блога, а не костыли. Но, кто я такой, чтобы жаловаться на не интересные хотелки 😅
 
Sadorimatsu, посты с форума дублировать в соцсети немного более расширенным функционалом, чем rss
Ну и интеграции со сторонними сервисами из коробки. Те же мосты с другими cms: регистрация на форуме - создание юзера в другой cms

Но с общем посылом вашего сообщения я согласен, 3 года явно того не стоят))
 
посты с форума дублировать в соцсети немного более расширенным функционалом, чем rss
Ну и интеграции со сторонними сервисами из коробки. Те же мосты с другими cms: регистрация на форуме - создание юзера в другой cms
Дублировать посты с форума в соц.сети? Нафига? 0_о вот это прям дикость. Это же вечные гулянья туда-сюда.
А вот про интеграцию по подробней можно? Что имеется в виду? И про какие сервисы речь? И про мосты на какие платформы планы? Этот вопрос меня прям заинтересовал.
 
Дублировать посты с форума в соц.сети? Нафига? 0_о вот это прям дикость. Это же вечные гулянья туда-сюда.
Не знаю, это с ветки на оф. форуме


А вот про интеграцию по подробней можно? Что имеется в виду? И про какие сервисы речь? И про мосты на какие платформы планы? Этот вопрос меня прям заинтересовал.
Это вопрос про какую-то конкретику в ещё не вышедшем обновлении. Какие сервисы? Любые сервисы, у которых есть API и которые вам нужны для каких-либо действий. А что это за сервисы, зависит уже исключительно от вас
И на текущий момент это все абстрактно, а не конкретно
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу