Hoe publiceer je social media posts vanuit Node.js

Hoe publiceer je social media posts vanuit Node.js

Post naar 15 netwerken vanuit Node met één API-call. Werkende voorbeelden voor aanmaken, inplannen en media bijvoegen, plus de fouten die je beter vermijdt.

Publiceren naar social platforms vanuit Node betekent normaal gesproken één OAuth-flow, één mediapijplijn en één publicatiemodel per platform, die allemaal blijven veranderen. Dit doet het via één enkele client.

Installeren en authenticeren

npm install bulkpublish
import { BulkPublish } from 'bulkpublish';

const bp = new BulkPublish({ apiKey: process.env.BULKPUBLISH_API_KEY });

Haal een key op uit de developer-instellingen in je account. Bewaar hem in een environment variable, niet in broncode.

Maak een concept aan

Begin hier in plaats van direct te publiceren. Een concept is zichtbaar in de app, zodat je precies kunt zien wat je code heeft geproduceerd voordat er iets bij een publiek terechtkomt.

const post = await bp.posts.create({
  content: 'Check out our latest update!',
  channels: [
    { channelId: 1, platform: 'facebook' },
    { channelId: 2, platform: 'x' },
    { channelId: 3, platform: 'linkedin' },
  ],
  status: 'draft',
});

Elk kanaal is een object met een channelId en een platform. Om de jouwe te vinden:

const channels = await bp.channels.list();

Hardcodeer geen kanaal-id’s uit een eenmalig script in iets langlevends. Zoek ze op, of bewaar ze in config waar ze veranderd kunnen worden zonder deploy.

Plan er een in

const post = await bp.posts.create({
  content: 'Check out our new feature!',
  channels: [{ channelId: 1, platform: 'instagram' }],
  mediaFiles: [uploadedFile.id],
  postFormat: 'reel',
  status: 'scheduled',
  scheduledAt: '2026-04-10T14:00:00Z',
  timezone: 'America/New_York',
});

Twee velden die de moeite waard zijn om samen te begrijpen. scheduledAt is een ISO-8601-tijdstempel, en timezone is een IANA-zonenaam. De tijdzone expliciet meegeven is wat terugkerende logica zich verstandig laat gedragen over zomertijdwisselingen heen, in plaats van twee keer per jaar een uur te verschuiven.

Media

Media wordt eerst geüpload, daarna verwezen via id bij het aanmaken van de post:

const file = await bp.media.upload(/* … */);

await bp.posts.create({
  content: 'New drop.',
  mediaFiles: [file.id],
  channels: [{ channelId: 1, platform: 'instagram' }],
  status: 'scheduled',
  scheduledAt: '2026-04-10T14:00:00Z',
});

De mediaregels van elk platform verschillen, en ze worden gevalideerd voordat de post wordt ingepland in plaats van op publicatiemoment. Dat is het gedrag dat je wilt van een script: een afwijzing die je nu kunt opvangen en loggen, geen stille mislukking om 9 uur morgenochtend.

De beschikbare resources

De client biedt posts, channels, channel sets, media, labels, schedules, RSS-feeds, analytics en platforms. Zo kan een script meer doen dan aanmaken: opzoeken wat er ingepland staat, quota checken, metrics ophalen na publicatie.

Dingen die de moeite waard zijn om goed te doen

Publiceer nooit direct in de eerste versie. Maak concepten aan, bekijk ze, schakel dan over naar scheduled. De kosten zijn nul en het vangt opmaakproblemen die onzichtbaar zijn in code.

Handel rate limits af. De toewijzing van je plan is een echt plafond:

FreeProBusiness
API-verzoeken/dag305.00050.000
API-keys1510
De 30 per dag van Free is bedoeld om de API te proberen, niet om er iets op te draaien. Een script in een retry-lus put het binnen seconden uit.

Genereer geen eigen planfeiten. Als je script posttekst schrijft, houd productcijfers eruit. Alles feitelijks moet uit een bron komen in plaats van uit een sjabloon dat na de volgende prijswijziging fout zal zijn.

De korte versie

npm install bulkpublish, maak een client aan met je API-key, roep bp.posts.create aan met content en channels. Begin met concepten, zoek kanaal-id’s op in plaats van ze te hardcoden, geef een tijdzone mee bij alles wat ingepland is.