Aperçu
Ce workflow recherche sur Reddit les mentions de votre marque, produit ou mots-clés choisis à intervalles réguliers. Lorsque de nouvelles mentions sont trouvées, il les formate en un message Slack avec le titre du post, le subreddit, le score et un lien direct. Les équipes l'utilisent pour recueillir les retours clients, les mentions de concurrents et les discussions communautaires avant qu'ils ne deviennent viraux.
Déclencheur
Planification Cron (toutes les 4 heures)
Planification
S'exécute toutes les 4 heures
Étapes du workflow
Définir les mots-clés de la marque
Définissez la liste des noms de marque, noms de produit et noms de concurrents à surveiller sur Reddit.
Rechercher sur Reddit via Scavio
Appelez l'API Scavio avec la plateforme reddit pour chaque mot-clé, en triant par récence.
Filtrer les nouvelles mentions
Comparez les résultats avec la liste des ID de posts déjà vus stockée lors des exécutions précédentes.
Formater le message Slack
Construisez un message Slack Block Kit avec le titre du post, le subreddit, le nombre de votes positifs et le permalien.
Publier sur Slack
Envoyez le message formaté au canal Slack configuré via webhook.
Mettre à jour la liste des vus
Ajoutez les nouveaux ID de posts à la liste des vus pour ne plus être alerté.
Implémentation Python
import requests
import json
from pathlib import Path
API_KEY = "your_scavio_api_key"
SLACK_WEBHOOK = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
def search_reddit(query: str) -> list[dict]:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "reddit", "query": query},
timeout=15,
)
res.raise_for_status()
return res.json().get("organic", [])
def send_slack(mentions: list[dict]):
blocks = [{"type": "header", "text": {"type": "plain_text", "text": "New Reddit Mentions"}}]
for m in mentions[:10]:
blocks.append({
"type": "section",
"text": {
"type": "mrkdwn",
"text": f"*<{m['link']}|{m['title']}>*\nr/{m.get('subreddit', 'unknown')} | score: {m.get('score', 0)}",
},
})
requests.post(SLACK_WEBHOOK, json={"blocks": blocks}, timeout=10)
def run():
keywords = ["your-brand", "your-product"]
seen_path = Path("seen_reddit.json")
seen = set(json.loads(seen_path.read_text())) if seen_path.exists() else set()
new_mentions = []
for kw in keywords:
results = search_reddit(kw)
for r in results:
post_id = r.get("link", "")
if post_id and post_id not in seen:
new_mentions.append(r)
seen.add(post_id)
if new_mentions:
send_slack(new_mentions)
print(f"Alerted {len(new_mentions)} new mentions")
else:
print("No new mentions")
seen_path.write_text(json.dumps(list(seen)))
if __name__ == "__main__":
run()Implémentation JavaScript
const API_KEY = "your_scavio_api_key";
const SLACK_WEBHOOK = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";
async function searchReddit(query) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: {
"x-api-key": API_KEY,
"content-type": "application/json",
},
body: JSON.stringify({ platform: "reddit", query }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
return data.organic ?? [];
}
async function sendSlack(mentions) {
const blocks = [
{ type: "header", text: { type: "plain_text", text: "New Reddit Mentions" } },
];
for (const m of mentions.slice(0, 10)) {
blocks.push({
type: "section",
text: {
type: "mrkdwn",
text: `*<${m.link}|${m.title}>*\nr/${m.subreddit ?? "unknown"} | score: ${m.score ?? 0}`,
},
});
}
await fetch(SLACK_WEBHOOK, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ blocks }),
});
}
async function run() {
const fs = await import("fs/promises");
const keywords = ["your-brand", "your-product"];
let seen = new Set();
try {
seen = new Set(JSON.parse(await fs.readFile("seen_reddit.json", "utf8")));
} catch {}
const newMentions = [];
for (const kw of keywords) {
const results = await searchReddit(kw);
for (const r of results) {
if (r.link && !seen.has(r.link)) {
newMentions.push(r);
seen.add(r.link);
}
}
}
if (newMentions.length) {
await sendSlack(newMentions);
console.log(`Alerted ${newMentions.length} new mentions`);
} else {
console.log("No new mentions");
}
await fs.writeFile("seen_reddit.json", JSON.stringify([...seen]));
}
run();Plateformes utilisées
Communauté, publications et commentaires imbriqués de n'importe quel subreddit