Использование API Discourse с Front App

Всем привет! Сейчас я работаю над интеграцией между Front App и Discourse. На данный момент я использую Pipedream для их соединения.

Мне удалось настроить два рабочих процесса:

  1. Discourse → Front App. Когда в Discourse поступает новое сообщение, оно публикуется в Front.
  2. Front → Discourse. Когда я отвечаю на импортированное сообщение из Discourse в Front, вебхук Pipedream, отслеживающий новые ответы в Front, использует API Discourse для публикации ответа в Discourse. Это работает отлично, однако, когда я захожу в Front, там отображается мой ответ (так как срабатывает рабочий процесс 1, то есть при поступлении нового сообщения в Discourse), и теперь в потоке переписки у меня два сообщения: одно, отправленное через Front, и такое же, но импортированное через рабочий процесс 1.

У кого-нибудь есть идея, как «исключить» эти сообщения, отправленные из Front и полученные через первый рабочий процесс? Возможно ли это сделать с помощью API Discourse?

Заранее спасибо!

Привет :wave: , звучит как отличное интеграционное решение, которое у вас реализовано.

Чтобы помочь вам лучше, у меня есть несколько вопросов:

  1. Вы выполняете маршрутизацию на основе создания личного сообщения (PM) в Discourse или новой темы / ответа на тему?

Если маршрутизация осуществляется по новой теме или ответу на тему…

  1. На вашем экземпляре Discourse вы направляете в Front любую тему или ответ на тему в качестве нового сообщения?

  2. Когда вы отвечаете на сообщение из Front, используете ли вы API для отправки ответа в исходную тему?

Привет, Джордан!

Спасибо за ответ. :blush:

Отвечаю на твои вопросы:

  1. Да, это любая тема или ответ на тему в Front.
  2. Когда я отвечаю из Front, сообщение отправляется по URL (сгенерированному в Pipedream), который запускает POST-запрос Discourse API к исходной теме (он находит её по ID темы).

По сути, процесс такой:
Я отправляю ответ пользователю в Front.
Затем API Discourse (из рабочего процесса 1) видит новое сообщение в форуме и отправляет его как новое сообщение в Front.

Мне не нужно дублирование.

Понимаю, что это может запутать, поэтому дай знать, если я объяснил недостаточно ясно. :sweat_smile: Любые советы будут очень кстати!

Правильно ли я понимаю, что вы хотите, чтобы тема Discourse превращалась в сообщение Front только при её создании, а после этого — никогда больше?

Я верно уловил суть?

  1. Тема создана в Discourse
    1a) Тема конвертируется в Front как сообщение
  2. Пользователь отвечает на сообщение в Front
    2a) Сообщение из Front отправляется в Discourse как ответ на созданную тему.

Будет ли пользователь Discourse отвечать на пункт 2a? Или разговор заканчивается на этом этапе?

Я спрашиваю это, потому что вы можете рассмотреть возможность проверки ID поста при создании, если инициатор — Front. Если Front инициировал создание поста с ID #345 в Discourse

…то в вашем коде Pipedream, который отслеживает и конвертирует посты Discourse в сообщения Front, можно убедиться, что Post Id не равен тому, который вы только что создали. Если он равен — не конвертировать в сообщение Front…

Возможно ли это в Pipedream? Я не знаком с этим продуктом.

Да, пользователи Discourse по-прежнему могут отвечать на 2a. Мы это уже настроили! Таким образом, когда от участников сообщества отправляются новые сообщения в Discourse, они автоматически добавляются в тему Front.

Этот скриншот может помочь нагляднее проиллюстрировать процесс:

Как вы видите, я ответил через Front: «Just a test message from Front», и поскольку это сообщение опубликовано в Discourse, API Discourse фиксирует, что это новое сообщение, и отправляет свежее сообщение в тему.

Ваш ответ заставил меня задуматься :thinking: Возможно, стоит создать какую-то функцию, которая будет искать идентификатор из Front, чтобы затем исключать его при отправке сообщений через API SEND MESSAGE в Discourse… Я попробую это реализовать. Спасибо за помощь! Благодарю :blush:

Привет, @jordan.vidrine! Хочу сказать спасибо за помощь! Обсуждение этой темы с тобой дало мне идею, и теперь всё работает. :sparkles: В частности, вот этот момент:

Я спрашиваю, потому что вы можете проверить ID поста при его создании, если он приходит из Front. Если Front инициировал создание поста #345 в Discourse

Удачи!

Это здорово! Рад, что у вас всё получается :+1: