Автоматизируйте отправку приглашений Discourse через Zapier

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

Распространённый сценарий использования — приглашение пользователей на ваш форум, когда они покупают товар или регистрируются во внешнем сервисе. В примере в этой теме я буду использовать интеграцию Zapier с WordPress для запуска отправки приглашения из Discourse, когда новый пользователь регистрируется на сайте WordPress.

Настройка шага триггера в Zapier

Перейдите в панель управления Zapier и найдите приложение, которое должно запускать отправку приглашения по электронной почте. На скриншотах ниже я выбрал WordPress в качестве триггера.

Единственное необходимое для этого конфигурирование — подключить Zap WordPress к аккаунту WordPress и выбрать событие «Новый пользователь» для запуска Zap.

Настройка шага действия для отправки приглашения

Нажмите кнопку «Добавить шаг» (Add a Step), затем выберите из выпадающего меню «Действие/Поиск» (Action/Search).

Введите «webhook» в меню поиска, затем выберите «Webhooks by Zapier» из меню действий. Шаг действия Webhook будет добавлен в боковую панель вашего Zap, и откроется форма, позволяющая выбрать тип запроса, который должен выполнять вебхук.

Выберите POST в форме и нажмите «Продолжить» (Continue).

Открывшаяся форма позволяет настроить POST-запрос, отправляемый в Discourse. В поле URL введите базовый URL вашего форума, за которым следует /invites. Например, базовый URL моего форума — https://demo.scossar.com, поэтому полный путь к маршруту приглашений — https://demo.scossar.com/invites.

Теперь необходимо настроить разделы Тип полезной нагрузки (Payload Type), Данные (Data) и Заголовки (Headers) формы. Все остальные разделы формы можно оставить со значениями по умолчанию.

Тип полезной нагрузки указывает Zapier, в каком формате отправлять полезную нагрузку. Он должен быть установлен в Json.

Раздел Данные используется для указания Discourse, на какой адрес электронной почты отправить приглашение, а также для настройки необязательного списка названий групп и пользовательского сообщения. Чтобы пригласить пользователя, не добавляя его в группы и не включая пользовательское сообщение, введите текст email в качестве ключа данных, затем нажмите значок «Вставить поле» (Insert a Field), чтобы открыть выпадающее меню поля. Прокрутите список вниз, пока не увидите значение, переданное из вашего приложения-триггера, содержащее адрес электронной почты пользователя. При использовании WordPress в качестве приложения-триггера раздел Данные должен выглядеть примерно так:

Чтобы автоматически добавлять пользователей в группы при принятии приглашения, нажмите значок :heavy_plus_sign: в разделе Данные, чтобы добавить новое поле. Установите ключ поля в group_names. Установите значение поля в список названий групп через запятую, в которые вы хотите добавить пользователей. Чтобы включить пользовательское сообщение в письмо-приглашение, создайте ещё одно поле с ключом custom_message и значением, равным сообщению, которое вы хотите отправить.

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

Раздел Заголовки используется для аутентификации вашего запроса. Чтобы настроить поле Заголовки, вам нужно сгенерировать API-ключ на вашем сайте Discourse. Для этого перейдите на страницу Администрирование / API вашего сайта Discourse и нажмите кнопку «Новый API-ключ» (New API Key). При создании ключа назначьте его пользователю-сотруднику и установите область действия в Глобальная (Global) или используйте область действия Селективная (Granular) с отмеченным флажком Приглашения > Создать (Invites > Create).

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

Api-Username: <имя пользователя-сотрудника, от которого вы хотите отправлять приглашения>
Api-Key: <сгенерированный вами API-ключ>
Content-Type: application/json

Форма теперь должна выглядеть примерно как на скриншоте ниже, но с вашим Api-Username и Api-Key:

Нажмите кнопку «Продолжить» (Continue).

Теперь вы сможете протестировать интеграцию, нажав кнопку «Отправить тест в Webhooks by Zapier» (Send Test To Webhooks by Zapier). Тест будет выполнен с данными, которые вы настроили в шаге триггера. Если всё настроено правильно и пользователь, которого вы настроили в шаге триггера, ещё не существует на вашем форуме Discourse, будет отправлено письмо-приглашение, и вы увидите сообщение об успехе в Zapier. Как только тестовый шаг будет пройден, нажмите кнопку «Готово» (Finish) и включите ваш Zap.

Подробности о том, как выполнять другие типы запросов к API Discourse с помощью Zapier, см. на странице Make requests to the Discourse API with Zapier.

25 лайков

Это здорово, спасибо за функцию и четкие инструкции!

Возможно ли также установить пользовательскую группу при создании приглашения, как это можно сделать внутри приложения?

Это можно сделать, добавив ключ group_names в поле Headers. Его значение должно представлять собой список названий групп, разделенный запятыми. Я добавлю пример этого в тему.

Базовый подход, используемый в этой теме, подойдет для любого API-запроса к Discourse.

3 лайка

Отлично!! Я думаю, что диалог принимает и пользовательское сообщение. Думаю, это можно сделать тем же способом?

1 лайк

Я пытался настроить это сегодня утром и столкнулся с ошибкой 400. После небольшой отладки я обнаружил, что шаги, связанные с аутентификацией, нужно указывать в разделе заголовков, как и сказано в инструкции, а фактические значения формы (электронная почта, название группы и пользовательское сообщение) — в разделе data в виде пар ключ/значение.

После того как я внес это изменение, всё заработало идеально!

1 лайк

Спасибо, @simon!

Есть ли в мета-описаниях альтернативные способы создания автоматизированного процесса для отправки приглашательного письма после того, как читатель подписался на предложение, на которые можно сослаться здесь?

Спасибо за проверку! Я обнаружил, что если в запросе не указаны custom_message или group_names, то передача email в заголовках работает. Однако это не правильный способ передачи адреса электронной почты. Я обновил руководство, чтобы указывать адрес электронной почты в разделе Data, и добавил примеры добавления пользователей в группы и включения пользовательского сообщения.

4 лайка

Мне неизвестны другие сервисы, похожие на Zapier, но я уверен, что они существуют. Вы можете отправлять запросы напрямую к API Discourse без использования сторонних сервисов. Основное требование для этого — наличие приложения, из которого будут отправляться запросы. Это может быть что-то столь же простое, как сайт на WordPress.

Хороший ресурс на Meta для начала работы с API: Reverse engineer the Discourse API. Вы можете тестировать запросы к API с помощью CURL из терминала вашего компьютера или с помощью сервиса, такого как Postman.

2 лайка

Спасибо! Большинство того, что вы пишете, мне совершенно непонятно… но я проверю ваши ссылки и посмотрю, смогу ли что-то понять :smiley:

2 лайка

@simon

Быстрый вопрос:

Когда я отправляю автоматическое приглашение через Zapier, это будет уже персонализированная ссылка или ссылка на общую страницу входа на мой форум (где кто угодно может войти и также создать аккаунт)?

Я хочу избежать ситуации, когда любой, кто знает страницу входа, создаст аккаунт. Как лучше всего этого избежать?

Когда вы отправляете ссылку-приглашение через Zapier, вы запускаете точно такое же действие, как если бы вы нажали ссылку «Отправить приглашение» на странице приглашений в своём аккаунте.

Создание приглашения приведёт к отправке письма на адрес электронной почты приглашённого пользователя. В этом письме содержится ссылка на страницу, где приглашённый пользователь может указать своё имя и пароль, а затем войти в свой новый аккаунт. Адрес электронной почты для нового аккаунта определяется тем адресом, который вы использовали для приглашения.

Только пользователи, которым было отправлено приглашение, могут создать аккаунт через эту страницу. Если вы хотите разрешить регистрацию на вашем сайте только приглашённым пользователям, перейдите в раздел «Вход» настроек вашего сайта и выберите параметр сайта «только по приглашению».

Лучший способ понять, как работают приглашения, — пригласить себя на свой сайт. Для этого можно использовать временный адрес Gmail. Перед тем как принять приглашение, вам потребуется выйти из системы на сайте.

3 лайка

Ах, отличная информация. Спасибо!!

1 лайк

Спасибо за отличный урок! Можно ли добавить ID темы, на которую пользователь будет перенаправлен после регистрации, как в функции массовой рассылки приглашений?

Пригласить нового пользователя в тему можно, используя подход, аналогичный описанному выше, однако URL, который вы настраиваете на шаге «Действие», должен вести на эту тему. Например, чтобы пригласить пользователя в тему с ID 123, добавьте URL https://forum.example.com/t/123/invite в шаг «Действие». Затем добавьте параметры email и необязательные параметры custom_message и group_names так же, как это описано в руководстве.

3 лайка

Привет, Саймон,

Спасибо за твой пост!

У меня два вопроса. Если ты сможешь помочь, это было бы здорово :slight_smile:

Вопрос 1/
С моей стороны приглашение + сообщение работают нормально, но какие бы group_names я ни добавлял, при входе на форум у меня есть доступ только к группе по умолчанию (публичной).

Ты знаешь, что может «блокировать» приглашение в конкретную приватную группу?

URL группы выглядит так: https://forum.[mywebsite].com/c/cercle/33

Так что у меня есть: group_names /// PUBLIC,cercle

Я также пробовал использовать «номер» вместо названия группы (33) для этой группы, но это тоже не сработало.

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

Вопрос 2/

Я хотел бы иметь возможность приглашать людей не только в «приватную группу», но и в «приватную подгруппу» (не знаю, как это правильно называется).

Здесь ты видишь, что у меня есть группа «RÉSERVÉ…»
И все маленькие подгруппы под ней.

Я хочу приглашать пользователей в конкретные подгруппы.

Ты знаешь, как это сделать?

Огромное спасибо, если ты найдёшь время помочь мне с этим! :slight_smile:

1 лайк

Убедитесь, что вы используете имя группы, а не имя категории, к которой вы разрешаете группе доступ. Имя группы можно найти в URL-адресе группы или в поле «Имя» группы:

Если это не решит проблему, убедитесь, что ключ API Discourse, который вы добавляете в Zapier, является глобальным ключом API для всех пользователей. Также проверьте, что имя пользователя API, указанное в Zapier, имеет разрешение на добавление пользователей в группу. Для этого подойдет любое имя пользователя администратора на вашем сайте.

Дайте знать, если это не решит вашу проблему.

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

Судя по предоставленному вами скриншоту, вы пытаетесь предоставить пользователю доступ к категории и всем её подкатегориям. Вместо создания отдельной группы для каждой подкатегории вы можете просто разрешить одной группе доступ к категории и всем её подкатегориям. Это настраивается в разделе «Безопасность» на странице редактирования категории.

2 лайка

Спасибо за ваш ответ, Саймон!

Что касается API:

Я предоставил доступ только одному пользователю (администратору), думая, что этого достаточно. Теперь я создал новый API для предоставления доступа всем пользователям.

Но это всё ещё не работает. Однако, возможно, я понял проблему :slight_smile:

Я пытаюсь добавить название «категории» в поле «group_names». Думаю, это не сработает :).

Я неправильно понял разницу между названиями групп, категорий и тем…

На скриншоте вы видите список из примерно 15 подкатегорий: TB, MT, RD, MA и т. д.

Например, URL первой подкатегории: mywebsite.com

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

На предоставленном мной URL я хотел бы предоставить доступ только к подкатегории «TBD», например.

А другой пользователь будет иметь доступ только к другой подкатегории.

Подскажите, возможно ли это?

Возможно, мне нужно просто заменить поле «group_names» в Zapier на поле для категорий?

1 лайк

Группы и категории часто вызывают путаницу в Discourse!

  1. Группы — это集合 людей.
  2. Категории — это集合 тем. Вы не можете напрямую приглашать людей в них. Но доступ к ним контролируется через группы.

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

3 лайка

Спасибо за ваш ответ, Натан!

Я попробую и опубликую результат здесь :wink:

2 лайка

Ваше решение отлично работает, спасибо! :smiley:

У меня есть ещё один вопрос, возможно, вы (или @simon) сможете мне помочь:

Возможно ли с помощью Zapier предоставить доступ к новой группе людям, которые уже являются участниками Discourse?

Вот как выглядит мой рабочий процесс:

1/ Участник записывается на один из моих курсов.

2/ Zapier получает его электронную почту с моей образовательной платформы, отправляет приглашение в мой Discourse и автоматически добавляет его в нужную группу, соответствующую только что присоединённому курсу.

3/ Иногда, спустя несколько месяцев, этот же участник записывается на другой курс. В этом случае, при текущем процессе, Zapier отправит ему новое приглашение в Discourse, хотя он уже является участником, поэтому приглашение не сработает.

Мне нужно, чтобы Zapier предоставлял доступ к новой группе, если он уже является участником моего Discourse.

Вы видите способ решить эту задачу?

1 лайк