YouTube Node: Create Playlist wirft 400 INVALID_ARGUMENT in Production, funktioniert aber perfekt in Manual UI Test

Das Problem/den Fehler/die Frage beschreiben

Hey zusammen, ich stoße auf ein wirklich seltsames Problem mit dem YouTube Node, wenn ich versuche, eine Playlist dynamisch zu erstellen. Es funktioniert tadellos, wenn ich manuell im n8n UI auf „Execute Step

Der manuelle UI-Test kann die Unstimmigkeit verbergen, da er gegen das aktuell im Editor ausgewählte Element läuft. Bei der fehlgeschlagenen Produktionsausführung ist nur die Eingabe direkt im YouTube-Knoten relevant, nicht der vorgelagerte Match-Knoten.

Überprüfe diesen Bereich auf das Element, das der YouTube-Knoten tatsächlich erhalten hat. Falls artist_name / album_name dort fehlen oder von einem gekoppelten Element stammen, friere den Titel in einem Set/Edit Fields-Knoten direkt vor YouTube ein und ordne den Playlist-Titel aus diesem neuen Feld zu. Falls das Feld bereits eine einfache Zeichenkette ist, poste dieses eine redigierte YouTube-Knoten-Eingabeelement plus den vollständigen 400er-Antwortkörper.

Hey, danke für deine Antwort. Ich habe den Workflow umstrukturiert und nutze jetzt den Merge-Node im combine-Modus (wie in der Anlage zu sehen), um sicherzustellen, dass die Binärdaten und JSON-Metadaten während der gesamten Pipeline perfekt synchron bleiben.

Also schien alles perfekt zu sein, bis zur Ausführung hier. Basierend auf deiner Antwort dachte ich, dass ich die gleiche Situation für das Hochladen von Videos anwenden kann. Das hat aber nicht funktioniert. Ich habe meinen merge-Node-Modus auch auf combine geändert. Leider hat das auch nicht funktioniert. Den aktuellen Status meines Workflows findest du unten.

Danke. Die Screenshots zeigen immer noch nicht die fehlgeschlagene YouTube-Node-Eingabe, daher liegt Merge mode einen Schritt vor dem Element, das darüber entscheidet.

Öffne die fehlgeschlagene Produktionsausführung, klicke auf die YouTube-Node selbst und kopiere ein redigiertes Eingabe-JSON-Element von dieser Node plus den vollständigen 400-Response-Body. Falls diese Node bereits einen einfachen Playlist-Titel-String erhält, ist der nächste Schritt die exakte Payload, die YouTube ablehnt; falls nicht, befindet sich die Lösung unmittelbar vor YouTube.

Du hast absolut recht. Die Reparatur des Merge-Knotens hat das Video Upload-Problem gelöst, aber der ursprüngliche Playlist 400-Fehler trat tatsächlich upstream auf, bevor der Merge-Knoten überhaupt ausgeführt wurde.

Da der Workflow jetzt nach meinem Umbau dieses Bereichs reibungslos in der Produktion läuft, bin ich zu den alten Ausführungsprotokollen mit fehlgeschlagenen Ausführungen zurückgegangen, um genau zu sehen, was der YouTube Playlist-Knoten während des Absturzes in seinem Input-Panel erhalten hat, nur um die Root Cause Analysis abzuschließen.

Hier ist das redigierte JSON vom INPUT-Panel des fehlgeschlagenen YouTube Playlist-Knotens:

{
"json": {
"album_name": "Follow You Down - Keys N Krates Remix",
"artist_name": "Zedd, Bright Lights"
}
}

Und der Ausdruck im Titelfeld war:
{{ $json.artist_name }} - {{ $json.album_name }} (Full Release)

Obwohl es visuell in der Benutzeroberflächen-Vorschau einwandfrei aufgelöst wurde, verlor n8n in dieser spezifischen Produktionsausführung den gepaarten Element-Kontext, weil der Input-Stream direkt von einem Multi-Element-Binary-Knoten kam, ohne explizite Element-Index-Verankerung (wie die Verwendung von .item.json). YouTube erhielt wahrscheinlich eine leere oder fehlgeformte Payload-Zeichenkette unter der Haube.

Jetzt habe ich einige Fragen:

1- Du hast gesagt:

„Manuelle UI-Tests können die Nichtübereinstimmung verbergen, weil sie mit dem aktuell im Editor ausgewählten Element ausgeführt werden.‟

Wie kann ich es dann testen? Ist das immer in der Produktion oder gibt es eine spezielle Umgebung?

2- Wenn ich den Workflow starte (veröffentlicht), läuft er perfekt an, aber dann treten irgendwann ohne erkennbaren Grund Fehler auf. Zum Beispiel ausdrucksbezogene Fehler usw. Warum passiert das, obwohl es kein Problem gibt?

Danke schön.

Gute Detektivarbeit beim Durchforsten der alten Ausführungsprotokolle.

Zu Frage 1 — Testen des Produktionsverhaltens ohne Live-Trigger:
Die sauberste Methode ist, den Button „Test workflow

Hey, nur noch eine Aktualisierung bevor ich das in die Produktion überführe, das Problem tritt weiterhin auf. Der Merge-Knoten hat nicht funktioniert, und ich habe verschiedene Wege versucht, um Binärdaten durch den Code-Knoten zu leiten, aber konnte es immer noch nicht zum Laufen bringen. Danke trotzdem für die Hilfe!

Match-Code:

const jsonData = $("Multi-track splitter").all();
const videoFiles = $input.all();

let matchedItems = [];
const normalize = (str) => str ? str.toLowerCase().replace(/[^a-z0-9]/g, '') : '';

for (const item of jsonData) {
    const song = item.json;
    const safeSongName = normalize(song.song_name);
    
    const match = videoFiles.find(v => {
        const fileName = v.json.fileName || '';
        const cleanFileName = fileName.replace('.mp4', '').replace(/_\d+$/, '');
        const safeFileName = normalize(cleanFileName);
        
        return safeFileName.includes(safeSongName) || safeSongName.includes(safeFileName);
    });

    if (match) {
        matchedItems.push({
            json: {
                ...song,
                yt_description: `Artist: ${song.artist_name}\n\nAlbum: ${song.album_name}\n\nRelease Date: ${song.release_date}\n\n${song.company_name}\n${song.publisher_name}\n\nNOT auto-generated by YouTube.`,
                yt_title: `${song.artist_name} - ${song.song_name}`
            },
          
            binary: match.binary 
        });
    }
}

return matchedItems;