Nuestra primera aproximación fue la tabla de clasificación, pero parece que da más peso al volumen puro (piensa en “¿Ya está arreglado? ¿Ya está arreglado? ¿Ya está arreglado? ¿Hola?”) en lugar de a la calidad. De acuerdo, sí, la “calidad” es difícil de algoritmizar, aunque hay algunos ajustes obvios que se pueden hacer.
Lo que hemos empezado a hacer para identificar a los usuarios verdaderamente útiles es
buscar hilos donde otro usuario es el primero en responder
-- Objetivo: Encontrar temas donde la primera respuesta que no es del OP es de un no-SonarSourcer
WITH
SonarSourcers AS (
SELECT u.id AS user_id
FROM groups g
INNER JOIN group_users gu ON g.id=gu.group_id
INNER JOIN users u ON u.id = gu.user_id
WHERE g.name='sonarsourcers'
),
tagged_topics AS (
SELECT tt.topic_id
FROM topic_tags tt
JOIN tags t on t.id=tt.tag_id
WHERE name = 'me-too'
),
-- encontrar temas 'regulares' creados por usuarios normales
topic_user AS (
SELECT id as topic_id, user_id, created_at
FROM topics
LEFT JOIN SonarSourcers ss USING(user_id)
LEFT JOIN tagged_topics tt on topics.id = tt.topic_id
WHERE ss.user_id IS NULL -- omitir temas iniciados por SonarSourcers
AND tt.topic_id IS NULL -- omitir temas etiquetados con me-too
AND user_id > 0 -- omitir los hilos de bienvenida/tutoriales de DiscoBot
AND visible = TRUE
AND archived = FALSE
AND archetype='regular'
AND created_at::DATE > '2023-07-01'
),
-- encontrar la primera respuesta que no es del OP al tema del usuario
min_response AS (
SELECT p.topic_id, tu.created_at, MIN(post_number) as post_number
FROM posts p
JOIN topic_user tu USING(topic_id)
WHERE p.post_type = 1
AND p.user_id != tu.user_id
AND p.post_number > 1
AND p.hidden = false
AND p.deleted_at IS NULL
GROUP BY topic_id, tu.created_at
)
SELECT p.topic_id, p.user_id, mr.created_at::DATE as thread_date
FROM posts p
JOIN min_response mr ON p.topic_id = mr.topic_id AND p.post_number=mr.post_number
LEFT JOIN SonarSourcers ss ON p.user_id=ss.user_id
LEFT JOIN user_badges ub on p.id = ub.post_id and ub.badge_id=110
WHERE ss.user_id IS NULL -- eliminar temas donde SonarSourcer es el primero en responder
AND ub.user_id IS NULL -- eliminar temas donde ya se ha concedido una insignia
ORDER BY mr.created_at DESC
Una vez que identificamos esos hilos, evaluamos la respuesta del usuario y luego otorgamos al usuario que respondió una insignia de “Usuarios ayudando a Usuarios” o etiquetamos el hilo con una etiqueta “me-too” (invisible para el personal). (Por cierto, este informe de respuesta del usuario tiene el efecto secundario positivo de detectar incidentes en nuestro servicio en la nube rápidamente.
)
A partir de ahí, es fácil recompensar aún más a los usuarios útiles e identificarlos para un mayor desarrollo.