Mensagens do cliente
Como o cliente conversa com a loja ou com um seller dentro da plataforma: conversas, respostas e confirmações de leitura.
A central de mensagens é o canal de conversa interno entre o cliente e a loja, ou entre o cliente e um seller (lojista) do marketplace. Cada conversa é uma thread (um assunto com várias mensagens). Ela pode ser solta ("Fale com a loja") ou ligada a um objeto, como um pedido ou um produto, para que quem atende veja o contexto.
Estas rotas atendem o cliente logado. As mesmas rotas existem para o painel do administrador e do seller, com outra visão dos mesmos dados.
Como funciona
- Achar ou criar a conversaAntes de abrir uma nova thread, procure uma existente para o mesmo seller e objeto com Buscar thread. Se não houver (
404), crie. - Conversar
- Confirmar leituraAo exibir as mensagens, avise a plataforma com entregue e lida para o outro lado ver os "tiques".
- EncerrarMarque como resolvida ou arquivada em Status da thread.
status (saída) | Valor de entrada na rota de status | Significado |
|---|---|---|
A | open | Aberta. Estado inicial de toda thread. |
R | resolved | Resolvida. |
C | archived | Arquivada. |
Conceitos principais
Quem fala em cada mensagem
sender_type diz o papel de quem enviou: customer, vendor ou admin. sender_id é o id do usuário que escreveu.
Objeto ligado à thread
object_type e object_id apontam para o assunto (por exemplo order e o id do pedido, ou product). O contexto resumido desse objeto sai em Ler thread e contexto. Os tipos com contexto são order, product, vendor e user.
Tempo real
O envio de mensagens, leituras e "digitando" também dispara eventos pelo WebSocket da plataforma (new_message, message.read, message.delivered, thread.typing). As rotas REST abaixo continuam sendo a fonte da verdade: ao abrir a tela, leia por REST.
Papéis
Com o token de um seller ou administrador, as mesmas rotas mostram as conversas daquele papel (o administrador vê todas). Este guia descreve o comportamento com token de cliente.
Endpoints
| Método | Rota | Para quê | Autenticação |
|---|---|---|---|
| GET | /api/v1/storefront/messages/threads | Lista as threads do cliente. | Cliente |
| GET | /api/v1/storefront/messages/threads/find | Acha a thread de um seller e objeto. | Cliente |
| GET | /api/v1/storefront/messages/unread-count | Conta mensagens não lidas. | Cliente |
| POST | /api/v1/storefront/messages/threads | Abre uma thread com a primeira mensagem. | Cliente |
| GET | /api/v1/storefront/messages/threads/{id} | Lê a thread com as mensagens. | Cliente |
| GET | /api/v1/storefront/messages/threads/{id}/context | Lê o contexto do objeto ligado. | Cliente |
| POST | /api/v1/storefront/messages/threads/{id}/reply | Envia uma mensagem na thread. | Cliente |
| PATCH | /api/v1/storefront/messages/threads/{id}/read | Marca como lidas. | Cliente |
| PATCH | /api/v1/storefront/messages/threads/{id}/delivered | Marca como entregues. | Cliente |
| PATCH | /api/v1/storefront/messages/threads/{id}/status | Muda o status da thread. | Cliente |
| POST | /api/v1/storefront/messages/threads/{id}/typing | Avisa que está digitando. | Cliente |
| GET | /api/v1/storefront/messages/threads/{id}/presence | Diz quem está online. | Cliente |
Erros comuns
- Ler o status como palavra. A resposta traz
A,RouC; só a escrita aceitaopen,resolved,archived. - Ordem diferente em duas leituras. A leitura sem paginação traz as mensagens da mais antiga para a mais nova; com
pageouper_pagevem da mais nova para a mais antiga. - Enviar um
object_idque não existe ou não é do cliente. A criação não valida o objeto: a thread é criada normalmente e o contexto vem vazio (context: null) se o objeto não for achado. Envie só objetos que o cliente realmente possui. - Mandar
{id}de outra coisa. O{id}é sempre o id da thread, nunca o do seller nem o do pedido. - Enviar mensagem vazia. É preciso
bodyou ao menos um anexo. - Achar que
typinggrava algo. Ele só avisa o outro lado e responde204.