Unser erster Versuch war die Rangliste, aber sie scheint das reine Volumen (denken Sie an „Ist es schon behoben? Ist es schon behoben? Ist es schon behoben? Hallo?“) gegenüber der Qualität zu bevorzugen. Okay, ja, „Qualität“ ist schwer zu algorithmisieren, obwohl es einige offensichtliche Anpassungen gibt, die vorgenommen werden können.
Was wir begonnen haben, um wirklich hilfreiche Benutzer zu identifizieren, ist,
nach Threads zu suchen, bei denen ein anderer Benutzer als Erster antwortet
-- Ziel: Themen finden, bei denen die erste Nicht-OP-Antwort ein Nicht-SonarSourcer ist
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'
)
-- 'normale' Themen finden, die von normalen Benutzern erstellt wurden
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 -- Themen von SonarSourcers weglassen
AND tt.topic_id IS NULL -- Themen mit dem Tag 'me-too' weglassen
AND user_id > 0 -- 'Willkommens'-PM/Tutorial-Threads von DiscoBot weglassen
AND visible = TRUE
AND archived = FALSE
AND archetype='regular'
AND created_at::DATE > '2023-07-01'
),
-- erste Nicht-OP-Antwort auf Benutzer-Themen finden
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 -- Themen eliminieren, bei denen SonarSourcer zuerst antwortet
AND ub.user_id IS NULL -- Themen eliminieren, bei denen bereits ein Abzeichen vergeben wurde
ORDER BY mr.created_at DESC
Sobald wir diese Threads identifiziert haben, bewerten wir die Benutzerantwort und vergeben entweder dem antwortenden Benutzer ein „Users helping Users“-Abzeichen oder markieren den Thread mit einem (für Nicht-Mitarbeiter unsichtbaren) „me-too“-Tag. (Übrigens hat dieser Benutzer-Antwort-Bericht den positiven Nebeneffekt, Vorfälle in unserem Cloud-Dienst schnell zu erkennen.
)
Von dort aus ist es einfach, hilfreiche Benutzer weiter zu belohnen und sie für weitere Förderung zu identifizieren.