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-CommunityIdEnvía el X-CommunityId de la comunidad en la que ocurre la operación.
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
| Nombre | Dónde | Tipo | Descripción |
|---|---|---|---|
idobligatorio | path | string (uuid) |
Headers
| Nombre | Tipo | Descripción |
|---|---|---|
X-CommunityIdopcional | string (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
| Nombre | Tipo | Descripción |
|---|---|---|
sheetopcional | string | |
headerRowopcional | integer | ≥ 1, ≤ 30 |
delimiteropcional | , | ; | | | | |
encodingopcional | utf-8 | windows-1252 | iso-8859-1 | utf-16le | utf-16be | |
mappingobligatorio | object[] | |
mapping[].columnobligatorio | integer | O `index` da coluna, como veio na análise. |
mapping[].targetobligatorio | ignore | 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ó. |
optionsopcional | object | |
options.spaceIdopcional | string (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.typeopcional | post | article | short | Tipo 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.visibilityopcional | public | members | Padrão `members`. |
options.unknownAuthoropcional | skip | importer | Linha com e-mail de quem não é da comunidade: `skip` (padrão) pula a linha; `importer` publica como quem importa, com aviso. |
options.dateOrderopcional | DMY | MDY | Ordem 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ódigo | Descripción |
|---|---|
202 | Na fila; devolve a importação (sem as linhas). |
400 | Requisição inválida — falha de validação. |
401 | Token ausente, inválido ou expirado. |
403 | Autenticado, mas sem permissão para esta operação. |
404 | Recurso não encontrado. |
409 | A 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":[{}]}'