¿Cómo puedo otorgar automáticamente una insignia cuando el usuario visita un enlace dentro del foro de Discourse?
¿Qué tal usar la tabla topic_link_clicks?
Creo que podría tener una insignia manual que se beneficiaría de esto.
Lo pensaré.
Si es un enlace específico compartido en una publicación específica, creo que este serviría:
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
LEFT JOIN topic_links tl ON tl.post_id = p.id
LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
AND tl.url = 'https://meta.discourse.org/'
AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id
Necesitarías obtener el post_id de tu publicación específica de su JSON (o ejecutar una búsqueda a través del explorador de datos).
Creo que esto podría funcionar.
Solo quiero otorgar esta insignia a los miembros de nuestro curso.
¿Hay alguna forma de ocultar un tema del público en general y hacerlo solo disponible para aquellos que hacen clic en él a través de un enlace?
En segundo lugar, ¿cómo se puede hacer esto usando el complemento Dfata explorer?
No estoy 100% seguro de seguir el método que estás utilizando para esto. Es posible que desees comprobar que no estás complicando demasiado la configuración.
Si revisar el json no es lo tuyo, una consulta de búsqueda de post_id sería algo como esto:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
Luego puedes usar la URL de la publicación para extraer el topic_id y el post_number para ingresarlos en los cuadros de parámetros. por ejemplo: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (vale la pena señalar que el OP es siempre el post_number 1, incluso si no está en el enlace del tema)
En realidad, hay un parámetro mágico que podría hacer que la búsqueda de un post_id usando el explorador de datos sea aún más fácil…
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
Pega la URL relevante de la publicación en el cuadro de parámetros, y voilà, te da el post_id ![]()
El fondo rojo me hace pensar que no es una URL de publicación completa. Si es una URL de tema, necesitas añadir /1 al final:
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
¡Eso funcionó!
Supongo que esto debe ser reemplazado con la URL de la publicación que incluye ‘/1’.
Esa parte debe ser reemplazada con el enlace en el que están haciendo clic dentro de la publicación.
Y el post_id es la publicación en la que se pega/comparte el enlace.
Ya veo, ¿así que no hay forma de otorgar la insignia simplemente visitando el enlace de la publicación?
Creo que debería haberlo, pero esa sería una consulta diferente.
Esta otorga una insignia por hacer clic en un enlace específico en una publicación de foro específica.
Si desea otorgar una insignia por un usuario que visita un tema en particular, creo que sería:
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id
(Reemplazando ‘728’ con el topic_id relevante)
Así que lo tengo configurado así:
Pero cuando visito la publicación en cuestión (como administrador), no obtengo la insignia. ¿Estoy haciendo algo mal aquí?
Como necesita el disparador Update Daily, se otorgará la próxima vez que se ejecute el trabajo de concesión de insignias diarias. Puede activar manualmente Jobs::BadgeGrant desde su página /sidekiq/scheduler si desea acelerarlo para verificar.
¿Cómo puedo hacer que se actualice instantáneamente?
Los únicos desencadenadores disponibles son:
- Actualizar diariamente
- Cuando un usuario edita o crea una publicación
- Cuando un usuario es editado o creado
- Cuando un usuario actúa sobre una publicación
- Cuando un usuario es editado o creado
- Cuando un usuario cambia el nivel de confianza
Para que una insignia se otorgue de forma más instantánea, necesitarías trabajar dentro de los límites de esas acciones. Puedes leer más en este tema: Creating triggered custom badge queries
Lo hice pero todavía no se me ha concedido.
Para que conste, funciona para mí.
¿Lo has habilitado? ¿Y te has asegurado de que tienes configurado el número de tema correcto?
Sí, está habilitado. Déjame intentarlo en otro perfil. Quizás sea porque soy el administrador.
En segundo lugar, ¿estás simplemente pegando el enlace del tema en tu navegador?
Ser administrador no hace diferencia en este caso.
Necesitarías visitar el tema para que se registre en la tabla topic_views en la que se basa esta insignia.





