Este manual explica cómo crear consultas de insignias personalizadas activadas en Discourse, incluidos los tipos de insignias, las restricciones para las insignias activadas y una consulta de ejemplo.
Nivel de usuario requerido: Administrador
Esta función está deshabilitada por defecto. Para habilitarla, sigue esta guía.
Al definir insignias en Discourse, encontrarás una opción de “Activador” (Trigger) con las siguientes opciones:
- Actualizar diariamente
- Cuando un usuario realiza una acción en una publicación
- Cuando un usuario edita o crea una publicación
- Cuando un usuario cambia el nivel de confianza
- Cuando se edita o crea un usuario
Estos activadores fuerzan la ejecución de las insignias en intervalos más frecuentes que el diario, asegurando que los usuarios sean notificados de las nuevas insignias más cerca del momento en que ocurrió la acción.
Tipos de insignias
Hay dos tipos de insignias que puedes definir:
- Insignias que se dirigen a publicaciones
- Insignias que no se dirigen a publicaciones
Todas las definiciones SQL de insignias requieren que selecciones las columnas
user_idygranted_at. Si tu insignia se dirige a publicaciones, también debes seleccionar una columna llamadapost_id.
Si estas columnas no están disponibles directamente, puedes darles un alias. Por ejemplo:
u.id as user_idRestricciones para insignias activadas
Dado que las insignias activadas pueden ejecutarse una vez por minuto, debes proporcionar más “pistas” en la definición de la insignia. No es suficiente con devolver el conjunto completo de insignias; también debes proporcionar pistas sobre cómo ejecutar la insignia en un subconjunto.
Activadores basados en el usuario
Si tu activador se basa en el usuario, proporciona una cláusula sobre cómo filtrarlo basándote en
:user_ids.Activadores basados en la publicación
Si tu activador se basa en la publicación, proporciona información sobre cómo activarlo basándote en
:post_ids.
Recuerda que una retroalimentación completa (full backfill) se ejecuta diariamente de todos modos, por lo que debes considerarlo e incluir el manejo del parámetro
:backfill.Tu consulta de insignia activada siempre incluirá el parámetro
:backfilly el parámetro:post_idso el parámetro:user_ids.Ejemplo de consulta de insignia activada
Aquí hay un ejemplo de una insignia activada “cuando un usuario realiza una acción en una publicación”. En este caso, las aplicaciones “delta” recibirán el parámetro
:post_ids:SELECT p.user_id, p.id post_id, p.updated_at granted_at FROM badge_posts p WHERE p.like_count >= 25 AND (:backfill OR p.id IN (:post_ids) )La cláusula
(:backfill OR p.id IN (:post_ids) )permite filtrar los resultados. Cuando se ejecuta el trabajo diario,:backfilles verdadero, por lo que se escanea el conjunto completo. Cuando se ejecutan los trabajos delta,:backfilles falso y se establece:post_ids.¿Por qué es necesario el direccionamiento manual?
La consulta de concesión de insignias ejecuta tu consulta de insignia en una “subconsulta”. A menudo, el optimizador de PostgreSQL tiene dificultades al escanear el conjunto completo cuando la cláusula está en la consulta principal. Si bien puede manejar bien las consultas triviales, puede fallar con agregaciones más complejas.
Para evitar posibles problemas, se añadió esta restricción, lo que te permite aplicar filtros en la ubicación más apropiada.
¿Necesitas ayuda?
Si tienes problemas para escribir una consulta de insignia, publica una pregunta en Support describe lo que estás tratando de lograr e incluye tu trabajo en progreso. La comunidad intentará ayudarte.
Los activadores de insignias pueden ser complejos. A menudo, las actualizaciones “diarias” son suficientes y puedes omitir los aspectos más intrincados de las consultas activadas.
38 Me gusta
