I have the same problem!
I’m creating a flow with ChatGPT and Ghost for auto-posting content and the native integration of N8N with Ghost doesn’t have these parameters present. I had to make an HTTP Request including the parameters, however, it would be easier if it included the Ghost integration.
If you need it, here’s the HTTP Request code, remembering that you need to authenticate first to then use the json:
// Primeiro, obtém a resposta do ChatGPT (conteúdo do artigo)
const response = $json.response.text;
// Remover o markdown JSON, caso esteja presente
const cleanResponse = response.replace(/^```json\s*|```$/g, '');
try {
// Parse o JSON limpo
const parsedResponse = JSON.parse(cleanResponse);
// Verificar se o título está presente
if (!parsedResponse["titulo"]) {
throw new Error("Título está ausente. Verifique a resposta.");
}
// Verificar se o conteúdo está presente
if (!parsedResponse["conteudo"]) {
throw new Error("Conteúdo está ausente. Verifique a resposta.");
}
// Verificar se a imagem está presente (utilizando o ambiente n8n para checagem)
const featureImageUrl = $('Upload imagem no Ghost').first().json.images[0].url;
if (!featureImageUrl) {
throw new Error("Imagem está ausente. Verifique a resposta.");
}
// Criar o JSON para ser enviado ao próximo nó do HTTP Request
return {
json: {
posts: [
{
title: parsedResponse["titulo"],
html: parsedResponse["conteudo"],
feature_image: featureImageUrl,
feature_image_alt: parsedResponse["meta_titulo"],
visibility: "public",
meta_title: parsedResponse["meta_titulo"],
meta_description: parsedResponse["meta_descricao"],
featured: true,
tags: [
{
name: "News"
}
],
status: "published",
slug: parsedResponse["titulo"].toLowerCase().replace(/ /g, "-").replace(/[^a-z0-9-]/g, ""),
og_image: featureImageUrl,
og_title: parsedResponse["meta_titulo"],
og_description: parsedResponse["meta_descricao"],
twitter_image: featureImageUrl,
twitter_title: parsedResponse["meta_titulo"],
twitter_description: parsedResponse["meta_descricao"],
excerpt: parsedResponse["meta_descricao"]
}
]
}
};
} catch (error) {
return {
json: {
error: 'Failed to parse response',
details: error.message
}
};
}
Remembering that the line you need is probably here:
return {
json: {
posts: [
{
title: parsedResponse["titulo"],
html: parsedResponse["conteudo"],
feature_image: featureImageUrl,
feature_image_alt: parsedResponse["meta_titulo"],
visibility: "public",
meta_title: parsedResponse["meta_titulo"],
meta_description: parsedResponse["meta_descricao"],
featured: true,
tags: [
{
name: "News"
}
],
status: "published",
slug: parsedResponse["titulo"].toLowerCase().replace(/ /g, "-").replace(/[^a-z0-9-]/g, ""),
og_image: featureImageUrl,
og_title: parsedResponse["meta_titulo"],
og_description: parsedResponse["meta_descricao"],
twitter_image: featureImageUrl,
twitter_title: parsedResponse["meta_titulo"],
twitter_description: parsedResponse["meta_descricao"],
excerpt: parsedResponse["meta_descricao"]
}
]
}
I hope this helps!
Note: the variables are in pt-BR because I’m from Brazil!