Bygg en aktiebevakningsbot för Slack och Discord
Lär dig hur du skapar ett enkelt script i Node.js för att skicka notiser till Slack eller Discord när dina favoritbolag publicerar nya rapporter.
Att manuellt söka efter nya delårsrapporter är tidskrävande. Genom att bygga en enkel serverless bot eller ett schemalagt Node.js-skript kan du få ett direktmeddelande i din Slack- eller Discord-kanal så fort dina favoritbolag publicerar sina bokslut.
Hur fungerar bevakningen?
Vi skapar ett Node.js-skript som:
- Anropar BörsAPI:s rapport-endpoint för dina bevakade aktier.
- Sparar den senaste rapporterade perioden i en lokal textfil eller minnescache.
- Jämför perioden mot föregående körning — om en ny period har dykt upp, skickar skriptet ett meddelande till en Discord/Slack-webhook.
Skapa en Webhook i Discord eller Slack
Innan du börjar behöver du skapa en inkommande webhook:
- Discord: Gå till kanalinställningar → Integrationer → Webhooks. Skapa en ny webhook och kopiera dess URL.
- Slack: Skapa en app på Slack API-hemsida, aktivera "Incoming Webhooks" och anslut den till din kanal.
Node.js-kod för boten
Nedan är ett komplett skript i JavaScript för Node.js. Installera först axios för att göra anropen:
npm install axiosconst axios = require('axios');
const fs = require('fs');
const API_KEY = "fd_din_api_nyckel_här";
const WEBHOOK_URL = "https://discord.com/api/webhooks/din_webhook_url";
const CACHE_FILE = "reports_cache.json";
// Listan med ISIN-koder för bolagen du vill bevaka
const WATCHLIST = [
{ isin: "SE0000115446", name: "Volvo AB" },
{ isin: "SE0011166610", name: "Atlas Copco" }
];
// Ladda historisk cache från disk
let cache = {};
if (fs.existsSync(CACHE_FILE)) {
cache = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'));
}
async function sendNotification(companyName, report) {
const message = {
content: `📢 **Ny rapport publicerad!**\n**Bolag:** ${companyName}\n**Period:** ${report.period}\n**Omsättning:** ${(report.revenue / 1000000).toFixed(1)} Mkr\n**Rörelseresultat:** ${(report.operating_income / 1000000).toFixed(1)} Mkr\n[Logga in på BörsAPI för att se mer](https://borsapi.se)`
};
await axios.post(WEBHOOK_URL, message);
}
async function checkReports() {
console.log("Söker efter nya finansiella rapporter...");
for (const item of WATCHLIST) {
try {
const url = `https://borsapi.se/api/v1/companies/${item.isin}/reports?limit=1`;
const response = await axios.get(url, {
headers: { "Authorization": `Bearer ${API_KEY}` }
});
const reports = response.data;
if (reports.length === 0) continue;
const latestReport = reports[0];
const cacheKey = item.isin;
// Kontrollera om perioden skiljer sig från sparad cache
if (cache[cacheKey] !== latestReport.period) {
console.log(`Ny rapport hittad för ${item.name}: ${latestReport.period}`);
await sendNotification(item.name, latestReport);
// Uppdatera cachen
cache[cacheKey] = latestReport.period;
}
} catch (err) {
console.error(`Misslyckades att hämta data för ${item.name}:`, err.message);
}
}
// Spara uppdaterad cache till fil
fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
console.log("Sökning klar.");
}
// Kör bevakningskontrollen
checkReports();Schemalägg körningen
För att boten ska köra automatiskt varje morgon kan du lägga till den som ett **cron-jobb** på din server eller använda en molnbaserad tjänst som AWS Lambda, Google Cloud Functions eller GitHub Actions (med workflow_dispatch och en tidsinställd trigger).
Kom igång med BörsAPI
För att använda dessa mallar och skript behöver du ett personligt konto och en API-nyckel. Det är helt kostnadsfritt under vår beta-period.
Registrera dig på några sekunder via registreringssidan.
Gå till din Dashboard och klicka på "Generera API-nyckel".
Ersätt placeholder-nyckeln i källkoden eller kalkylarket med din personliga nyckel.