Configurar notificaciones de Matrix (element.io) usando el plugin discourse-chat-integration

Esta guía howto describe cómo configurar el proveedor Matrix (element.io) incluido en discourse-chat-integration.

\u003e Gracias a @ara4n y a los miembros de la sala #matrix-dev:matrix.org por su ayuda con esta integración :slight_smile:

Instalación

El plugin discourse-chat-integration viene incluido con Discourse. Asegúrate de que esté habilitado configurando chat_integration_enabled en true en la configuración de tu sitio. Para más detalles, consulta el tema del plugin discourse-chat-integration.

Configurar Matrix

Estas instrucciones asumen que estás utilizando el cliente web element.io. Debería ser posible realizar pasos equivalentes utilizando otras interfaces.

  1. Abre https://app.element.io/ en una nueva ventana de incógnito (verás por qué más adelante)

  2. Crea una cuenta de usuario para tu bot. Probablemente quieras anotar la contraseña en algún lugar por si necesitas volver a iniciar sesión más tarde. Discourse no la necesita.

  3. Utiliza la interfaz para unirte a cualquier sala a la que quieras poder enviar notificaciones

  4. Abre la configuración del usuario haciendo clic en tu avatar en la esquina superior izquierda, luego \u003ckbd\u003eTodas las configuraciones\u003c/kbd\u003e

  5. Configura el nombre de visualización y el avatar del bot

  6. Cambia a la pestaña “Ayuda y Acerca de”, baja hasta “Avanzado” y copia la dirección del servidor de inicio (Homeserver) y tu “Token de acceso”. Los necesitarás más adelante.

  7. NO HAZ CLIC EN CERRAR SESIÓN. Si lo haces, el Token de acceso quedará invalidado y no funcionará. En su lugar, simplemente cierra la ventana de incógnito. Si olvidaste abrir una ventana de incógnito, vuelve al paso 1 :wink:

Configurar Discourse

  1. En la configuración de tu sitio Discourse, introduce la dirección de tu servidor de inicio en la configuración chat_integration_matrix_homeserver. Asegúrate de incluir el protocolo. (por ejemplo, https://matrix.org). NO incluyas una barra diagonal al final.

  2. Pega el token de acceso que copiaste anteriormente en la configuración del sitio chat_integration_matrix_access_token

  3. Habilita chat_integration_matrix_enabled

  4. Ve a la pestaña \u003ckbd\u003ePlugins\u003c/kbd\u003e, luego a \u003ckbd\u003eIntegraciones de Chat\u003c/kbd\u003e

  5. Ve a la pestaña \u003ckbd\u003eMatrix\u003c/kbd\u003e, luego a \u003ckbd\u003eCrear Canal\u003c/kbd\u003e

  6. Introduce un nombre para el canal (esto solo se muestra en la interfaz de administración, puede ser cualquier cosa)

  7. Introduce el “ID de la sala” de una sala a la que quieras enviar notificaciones. En el cliente web Element, puedes encontrarlo abriendo tu sala, haciendo clic en el nombre en la parte superior y luego bajando hasta el final. Se verá algo así:

    !cdGUowUAqlgLHVerqE:matrix.org
    

    Nota: Los nuevos IDs de sala Matrix v12 pueden no incluir el sufijo :server (por ejemplo, !abcdefghijkl). Ambos formatos son compatibles.

  8. \u003ckbd\u003eGuardar Canal\u003c/kbd\u003e

  9. Usa el botón \u003ckbd\u003eProbar\u003c/kbd\u003e en el canal que acabas de crear para verificar que todo funcione correctamente. Deberías ver algo así:

  10. Configura algunas “Reglas” para tu canal, según las instrucciones de discourse-chat-integration.

Notas técnicas
  • Al momento de escribir esto, no parece haber una manera de obtener un “token de acceso” para un “bot” de forma amigable para el usuario. La solución de la ventana de incógnito es la forma más amigable para el usuario que pude encontrar.

  • Este plugin envía mensajes de texto enriquecido utilizando el formato org.matrix.custom.html, que es parte de la especificación de Matrix. Los clientes que no admiten mensajes con formato volverán a un mensaje de texto plano.

  • De forma predeterminada, los mensajes se envían como m.notice (que los clientes de Matrix suelen renderizar de manera más silenciosa). Puedes cambiar esto a m.text deshabilitando la configuración del sitio chat_integration_matrix_use_notice.

  • Esta implementación no contempla la “actualización” de los tokens de acceso. Esto se basa en el entendimiento de que la mayoría de los servidores de inicio en uso actualmente no caducan los tokens. Si esto cambia en el futuro, será necesario volver a evaluarlo.

19 Me gusta

The test is not working for us:

422 No Reason Phrase

and the spinner will keep on turning indefinitely until full page reload. How can we triage the error?

4 Me gusta

I just tried setting up a matrix integration using the instructions above, and it all worked ok. Can you confirm that you’re running the latest version of Discourse and this plugin?

Are you using the matrix.org homeserver, or your own homeserver? The 422 error is coming from that server.

I would suggest double checking your channel identifier, and also your matrix access token in your Discourse site settings.

4 Me gusta

Thanks for the hints. I’ll try that out, before reporting back here.

4 Me gusta

I have absolutely the same issue as @almereyda has.
@david, can you update obtaing “Access Token”, please? (Riot seems to be intensively developed :+1:)
+“Doctor log

2 Me gusta

También estoy interesado en las instrucciones actualizadas sobre cómo obtener un token de acceso…

1 me gusta

Actualmente se llama Configuración de la sala en Element (rebranding de Riot).

Funciona perfectamente.

2 Me gusta

He actualizado esta página para reflejar ese cambio.

El token de acceso, aparentemente, ahora está en “Ayuda y Acerca de” en la parte inferior de Configuración.

Tengo el mismo problema del spinner infinito. :frowning:

Lo intenté con salas tanto en matrix.org como en fedora.im.

1 me gusta

Acabo de pasar por la configuración yo mismo y pareció funcionar bien. Un par de teorías:

  • ¿Están cifradas tus salas? No estoy seguro si necesitamos hacer trabajo adicional para admitir salas cifradas.

  • Quizás los tokens de acceso expiran después de algún tiempo. Esto solía suceder cuando construí la integración en 2017, pero eso fue hace mucho tiempo :older_man:. Intentaré mi configuración local de nuevo más tarde esta semana y veré si todavía funciona.

1 me gusta

No lo están.

Quizás, pero estaba copiando la token de acceso y luego usándola básicamente de inmediato y eso no ayudó.

3 Me gusta

Para que conste, @mattdm y yo pudimos rastrear esto hasta una barra diagonal al final de la URL del servidor de origen en la configuración de Discourse.

He añadido una nota sobre esto a las instrucciones en el OP, y también he actualizado las instrucciones del token de acceso para que funcionen con la última interfaz de usuario de element.io.

5 Me gusta

¿Alguien ha tenido suerte con el soporte de hilos?

Al instalar la última versión del plugin de chat (commit ba40ede510986f74a23345082ac578e126467b97) y configurar una sala de Matrix de prueba (sala pública sin cifrar), recibo un error HTTP 500 cuando intento una prueba como se describe arriba. Mismo síntoma de spinner infinito que requiere actualizar la página.

El token de acceso de la cuenta del bot fue verificado de forma independiente enviando un mensaje a la sala usando la API (_matrix/client/r0/rooms/{room_id}/send/m.room.message) a nuestro propio servidor de Matrix.

Los registros de Discourse muestran

Started POST "/admin/plugins/chat-integration/test" for 141.142.60.55 at 2022-11-16 18:16:47 +0000
Processing by DiscourseChatIntegration::ChatController#test as */*
  Parameters: {"channel_id"=>"107", "topic_id"=>"466"}
Completed 500 Internal Server Error in 62ms (ActiveRecord: 0.0ms | Allocations: 10109)
NameError (uninitialized constant FinalDestination::HTTP)
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
1 me gusta

No lo he intentado, pero sería interesante. ¿Te refieres a poner todas las publicaciones en un solo hilo para reducir el desorden del canal, o se trataría de publicar respuestas de temas en un hilo de matrix?

2 Me gusta

Publicar respuestas a temas en un hilo de matrix.
(Mismo flujo que tiene Slack actualmente)

1 me gusta

Tengo curiosidad por saber si ha habido algún avance en la adición de soporte para respuestas encadenadas para matrix. Algunos de nuestros usuarios lo agradecerían.

3 Me gusta