Identificando a los principales colaboradores emergentes

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. :joy:)

A partir de ahí, es fácil recompensar aún más a los usuarios útiles e identificarlos para un mayor desarrollo.

5 Me gusta