Estoy considerando la idea de crear un servicio de puente webhook+API para conectar categorías dadas en dos foros de Discourse diferentes. La idea general sería:
Un webhook en cada servidor para eventos de Tema y Publicación[1]
Un oyente que tome estos y replique el evento en el servidor opuesto a través de la API
Comprobar si existe un usuario con la misma dirección de correo electrónico en el servidor opuesto[3]
Si no existe dicho usuario, crear un usuario provisional
Cambiar la configuración de notificación del usuario provisional para que no reciba notificaciones por correo electrónico[4]
Crear o actualizar la publicación bajo el usuario real o provisional apropiado
Probablemente una rutina programada para revisar los temas y asegurarse de que nada se haya perdido, y posiblemente reordenar para que ambos lados estén de acuerdo.
Desde Comprensión de los estados, roles y permisos de usuario, creo que los usuarios provisionales harían básicamente lo que queremos: si alguien creara una cuenta con esa dirección de correo electrónico más tarde, podría “reclamarla” e interactuar con todas sus publicaciones como si hubiera estado allí todo el tiempo.
Pero, ¿hay alguna forma de crear un usuario provisional desde la API? No veo eso en Discourse API Docs.
y posiblemente también eventos de Me gusta y Resuelto, pero no en la primera versión ↩︎
Definitivamente pensé en esto antes de escribir esta lista ↩︎
usando direcciones de correo electrónico como clave porque los sistemas de cuentas pueden no tener los mismos nombres de usuario ↩︎
Vi una publicación sobre esto siendo posible en algún lugar por aquí… ↩︎
Bueno, algo así. Como dice el OP en ese tema, en respuesta a eso…
… y ahí, la respuesta es básicamente inyectar un correo electrónico y dejar que el código de manejo de correo electrónico se encargue de ello. Pero eso no funciona para este caso, porque necesito intervenir y desactivar las notificaciones por correo electrónico para el usuario antes de crear la publicación.
Resulta que tenemos SSO-overrides-username activado para un lado del puente propuesto, así que creo que simplemente crear algo como ‘othersite-user’ podría ser una solución alternativa… pero eso no funcionará necesariamente sin esa configuración de SSO.
Con este enfoque, parecerá que los usuarios han creado temas y respuestas por correo electrónico. Los usuarios provisionales solo pueden crear publicaciones por correo electrónico. Obtendrás un error de acceso no válido si intentas crear una publicación no por correo electrónico para un usuario provisional a través de la API.
Algo sobre el enfoque de usuario provisional no me parece del todo correcto. Podría valer la pena consultar a sus usuarios para ver si tienen alguna inquietud. Si pudiera obtener el permiso de sus usuarios, podría simplemente crear usuarios activos no provisionales en el sitio espejo y luego publicar sus temas y comentarios a través de la API.
Pasar staged: true crea un usuario provisional. Supongo que un usuario creado de esta manera podrá publicar por correo electrónico. Mi sitio de desarrollo local no está configurado para enviar correos electrónicos a Discourse, por lo que no puedo probar eso en este momento.
He querido usar Discourse como un procesador de formularios genérico para manejar formularios de contacto. Odio los formularios de contacto, pero algunos usuarios prefieren usar un formulario de contacto en lugar de enviar un correo electrónico. Incluso si creo que esas personas toman malas decisiones, me gustaría facilitarles el contacto para que puedan darme dinero.
Sería muy útil poder crear un mensaje que cree un usuario provisional sin tener que recurrir a algún otro sistema para procesar el formulario y enviar un correo electrónico.
Supongo que necesitaré crear un plugin para hacer esto, pero ese es mi plan.
Esta es una de las únicas cosas que me quedan por resolver para deshacerme de WordPress.
Así que tal vez lo que haré en el plugin es crear la publicación como si fuera un correo electrónico. Eso podría no ser muy difícil en un plugin. Y eso probablemente lo haría posible a través de una API.
Creo que podrías usar un Asistente ( Plugin de Asistente Personalizado) para lograr eso sin demasiada dificultad. Ahora puedes hacer asistentes anónimos. ¡Estaré encantado de ayudarte si es necesario!
¡Oh! Claro. Así es como el receptor de correo entrega el correo. Creo que quiero un endpoint que acepte campos arbitrarios de cualquier formulario, los inserte en un tema y me los entregue. Eso me evitaría tener que hacer pública una clave API (con el alcance de solo entregar correo, no parece tan terrible tener JavaScript procesando el formulario y luego entregándolo al endpoint existente).