Fale com a equipe sobre um espaço ou uma seção com cadeado
POST/api/chat/contact-team
- Auth
- Richiede un token
- Chi può:
- owner
- admin
- moderator
- Chiave API:
- Non accetta chiavi API
- X-CommunityId
X-CommunityIdInvia l’X-CommunityId della community in cui avviene l’operazione.
Abre (ou reusa) uma conversa direta com alguém da equipe para pedir acesso. Não envia mensagem: o rascunho "Quero acesso a {espaço}" é só do app.
**Quem pode:** o membro (não visitante, não cadastro pendente) a quem aquele espaço ou seção é **mostrado com cadeado** e cujo 403 traz `askTeam` (fechado por grupo, ou nada à venda), o mesmo predicado do `canContactTeam` do 403 do espaço e do `denial` da seção. Fora disso, 403 `contactTeamNotAllowed` (inclusive para id de outra comunidade ou inexistente). Chat desligado: 403 `disabled`.
**Quem atende:** o primeiro admin online, depois o primeiro moderador online (por nome dentro do papel; presença do chat, últimos 90 s); com ninguém online, o owner. A pessoa precisa estar "Disponível para conversar" e sem bloqueio nos dois sentidos; o financeiro nunca atende. Ninguém elegível: 403 `teamUnavailable`.
**Regras:** passa por cima do `whoCanStart`; quem pede não precisa estar disponível; se já existe conversa direta com alguém elegível agora, devolve essa (200, `created: false`, não conta no limite); conversa nova conta no limite de 10 por hora e 30 por dia (429, ver `ChatRateLimited`).
Header
| Nome | Tipo | Descrizione |
|---|---|---|
X-CommunityIdfacoltativo | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Corpo della richiesta application/json
| Nome | Tipo | Descrizione |
|---|---|---|
spaceIdfacoltativo | string (uuid) | O espaço com cadeado. |
sectionIdfacoltativo | string (uuid) | A seção com cadeado (página da seção). |
Risposte
| Codice | Descrizione |
|---|---|
200 | A conversa que já existia com alguém elegível da equipe. |
201 | Conversa criada com quem atende. |
400 | Requisição inválida — falha de validação. |
401 | Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`). |
403 | Autenticado, mas sem permissão para esta operação. |
429 | Limite anti-spam do chat (por pessoa, por comunidade, valendo para o app e o MCP). `errors[0].code` diz qual: `limitConnectionsDaily` (20 pedidos de conexão/dia), `limitConnectionsWeekly` (100/semana), `limitPendingRequests` (200 pedidos esperando resposta ao mesmo tempo; libera cancelando, sem `retryAt`), `limitNewConversationsHourly` (10 conversas novas/hora), `limitNewConversationsDaily` (30/dia), `limitMessagesPerMinute` (30 mensagens/minuto) e `limitDuplicateMessage` (o mesmo texto para no máximo 5 pessoas diferentes por hora). Quem entrou na comunidade há menos de 24 h tem metade dos limites de pedidos de conexão e de conversas novas; a equipe (owner, admin, moderador, financeiro) tem o dobro de todos. Conversa que já existe nunca conta como nova. As janelas são móveis: `errors[0].retryAt` (e o header `Retry-After`, em segundos) dizem quando a próxima vaga abre, e a mensagem diz a hora no fuso da comunidade. `errors[0].limit` é o limite que vale para quem pediu. |
500 | Erro interno do servidor. |
Esempio con curl
curl -X POST "https://api.memberfy.net/api/chat/contact-team" \
-H "Authorization: Bearer $TOKEN" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{}'