Creación de consultas personalizadas de insignias activadas

:bookmark: 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.

:person_raising_hand: Nivel de usuario requerido: Administrador

:warning: 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:

  1. Insignias que se dirigen a publicaciones
  2. Insignias que no se dirigen a publicaciones

Todas las definiciones SQL de insignias requieren que selecciones las columnas user_id y granted_at. Si tu insignia se dirige a publicaciones, también debes seleccionar una columna llamada post_id.

:information_source: Si estas columnas no están disponibles directamente, puedes darles un alias. Por ejemplo: u.id as user_id

Restricciones 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.

:exclamation: 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 :backfill y el parámetro :post_ids o 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, :backfill es verdadero, por lo que se escanea el conjunto completo. Cuando se ejecutan los trabajos delta, :backfill es 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.

:information_source: 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
Creating Custom Badges and Triggers
Creating custom badge with custom rules
How to grant badges using Automation?
Two custom badges on moderation
Pre approval email in the dashboard waiting to go
Help me get Discourse set up for the first time
Grant badges based on gender profile field?
Badges for X Number of Solutions Created?
Discourse-Math badge
Assigned a badge based on multiple badge assignment
Problem testing Badge Query from Data Explorer
Understanding and using badges
First Post badge
Grant Badge when user visits link
Custom Icons for admins and moderators (and other groups)
A silver badge for _each_ 5 bronze badges
Automatically set active members to follow a category
A silver badge for _each_ 5 bronze badges
A silver badge for _each_ 5 bronze badges
About Badges
What is the 'backfill`?
Query to create some groups based on activity
Are badges customizable?
Badge query working in explorer but not in badge SQL?
Badges for posting
Plugin or other option to require a post and a like?
Gamification beyond Leaderboard
Bulk Award a badge to a set of users
What does admin_js.admin.badges.trigger_type.user_change mean in Discourse?
Grant Custom Badge Upon Reading ToS
Set badges to be auto granted?
Access to category after 10 posts (automatic group membership)
Add badge for adding profile picture
How do you assign a badge automatically as soon as someone is added to a group?
Moderator - Badges, Stars, etc. - Positive Feedback?
Hidden Settings on Discourse Hosted Sites
Require LinkedIn or GitHub account to advance from TL0 to TL1. Possible?
Need some Help with my Triggered Custom Badge Query
Exclude certain categories from the Trust Levels
How does Meta handle the bug reporter badge?
Restricting users to join any one private group
An automatic group of group owners
Is it possible to have a badge for 100 solutions?
Grant a badge for all members of a group
Can I change the threshold of the Solved badges?
Grant badges through Automation
What is the 'backfill`?