Saltar al contenido

Confirma e coloca a importação de posts na fila

POST/api/import/spreadsheet/{id}/start

Auth
Requiere token
Quién puede:
owner
admin
moderator
finance
SuperAdmin
X-CommunityId
X-CommunityId Envía el X-CommunityId de la comunidad en la que ocurre la operación.
Las descripciones de los endpoints vienen de la especificación de la API y, por ahora, están en portugués. La interfaz alrededor está traducida.

Owner e admin. Recebe o mesmo `mapping` e `options` da prévia, valida, congela e coloca na fila (`QUEUED`, 202). O processamento roda em segundo plano, linha a linha: cada post é gravado com a data de publicação da planilha (`createdAt` fica com a hora real da importação) e **em silêncio** (sem pontos de ranking, fora do bloco de novidades dos e-mails). Quem inicia passa a ser quem importa. O autor segue as regras de `authorProfileId` em `POST /api/content`: a pessoa **desta** comunidade com o e-mail da coluna `authorEmail`; e-mail de quem não é da comunidade pula a linha (`AUTHOR_NOT_MEMBER`), a menos que `options.unknownAuthor` seja `importer` (a linha fica com quem importa, aviso `AUTHOR_NOT_FOUND`); e-mail de um só vale para quem tem papel abaixo do de quem importa: owner sobre admin, moderador, financeiro e membro; admin sobre moderador, financeiro e membro; SuperAdmin sobre qualquer um (senão a linha é pulada, `AUTHOR_ROLE_PROTECTED`). Nunca uma linha é atribuída a outra pessoa sem o aviso. Post em nome de outra pessoa guarda quem importou (`postedByProfileId`) e vai para o log da comunidade (`post.created_on_behalf`). Quem deixou de ser owner ou admin antes de o processamento começar não importa nada (`FAILED`). **Limites** que nenhum arquivo contorna: o texto da planilha inteira depois de descompactada (30 milhões de caracteres, na análise), o HTML dos conteúdos a importar (25 MB; acima, 400 `bodyTooLarge`), 20 imagens por linha e 300 imagens ou 500 MB por importação (o que passar vira link e aviso `IMAGE_LIMIT` ou `IMAGE_BUDGET`). Uma importação de posts por vez na comunidade: outra na fila ou rodando dá 409 `importRunning`. Imagens do corpo são baixadas com as mesmas regras de segurança e os mesmos limites de uma imagem enviada (até 50 MB, JPEG, PNG, WebP ou GIF; endereços internos recusados) e hospedadas na Memberfy; a que falhar vira link para o original e aviso `IMAGE_FAILED` na linha. Uma linha cujo post (mesmo título e data) já existe é pulada (`ALREADY_EXISTS`), então importar o mesmo arquivo de novo não duplica. Ao terminar, quem importou recebe um e-mail com o resumo. Acompanhe em `GET /api/import/spreadsheet/{id}`; `DELETE /api/import/{id}` cancela (o que já entrou fica).

Parámetros

NombreDóndeTipoDescripción
idobligatoriopathstring (uuid)

Headers

NombreTipoDescripción
X-CommunityIdopcionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Cuerpo de la solicitud application/json

NombreTipoDescripción
sheetopcionalstring
headerRowopcionalinteger≥ 1, ≤ 30
delimiteropcional, | ; | | |
encodingopcionalutf-8 | windows-1252 | iso-8859-1 | utf-16le | utf-16be
mappingobligatorioobject[]
mapping[].columnobligatoriointegerO `index` da coluna, como veio na análise.
mapping[].targetobligatorioignore | title | body | authorEmail | publishedAt | space | type | tags`title` (obrigatório em post e artigo), `body` (Markdown ou HTML; imagens são baixadas e hospedadas na Memberfy), `authorEmail` (pessoa da comunidade; sem correspondência, quem importa), `publishedAt` (data de publicação no fuso da comunidade), `space` (id, slug ou nome), `type` (post, artigo ou curto), `tags` (separadas por vírgula, ponto e vírgula ou barra vertical). Cada destino em uma coluna só.
optionsopcionalobject
options.spaceIdopcionalstring (uuid)Space padrão (módulo `content` ou `feed`). Obrigatório sem coluna `space`; vale também quando o space da linha não existe ou não aceita o tipo.
options.typeopcionalpost | article | shortTipo das linhas sem coluna `type` (padrão `post`). `post` e `artigo` viram post com título; `short` vira post curto (até 500 caracteres, só em space de feed).
options.visibilityopcionalpublic | membersPadrão `members`.
options.unknownAuthoropcionalskip | importerLinha com e-mail de quem não é da comunidade: `skip` (padrão) pula a linha; `importer` publica como quem importa, com aviso.
options.dateOrderopcionalDMY | MDYOrdem de datas como 03/04/2024. Sem a opção, deduzida da coluna (um dia acima de 12 decide) ou do idioma da comunidade.

Respuestas

CódigoDescripción
202Na fila; devolve a importação (sem as linhas).
400Requisição inválida — falha de validação.
401Token ausente, inválido ou expirado.
403Autenticado, mas sem permissão para esta operação.
404Recurso não encontrado.
409A importação não está mais `ANALYZED` (`notEditable`) ou já há outra importação de posts na fila ou rodando nesta comunidade (`importRunning`).

Ejemplo con curl

curl -X POST "https://api.memberfy.net/api/import/spreadsheet/<id>/start" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"mapping":[{}]}'