Passar a conversa para humano
v1.0.0https://api.growthaisystem.com/api/v1/conversations/{id}/handoff- Exige
Authorization: Bearer gos_…— Chave de API (gos_…)· escoposconversations.write
O mesmo handoff da IA da plataforma: (1) PAUSA a IA nesta conversa — a da plataforma para de responder e ai.paused vira true, que é o sinal para o seu agente ficar quieto; (2) atribui a conversa a uma pessoa (quem já atende → dono do negócio aberto → dono do contato → dono da conta) e a avisa no sino, com o motivo e as últimas falas do contato; (3) etiqueta o contato com handoff-humano e handoff-<reasonType>.
Conversa já pausada por uma pessoa do time (ai.paused: true com pausedReason que não é de handoff, como humano_assumiu): a pausa fica como está, com a razão e o prazo da pessoa, e o POST …/resume seguinte responde 409 paused_by_human. A atribuição, o aviso, as etiquetas e a nota seguem como acima; o retry só é reconhecido pela Idempotency-Key.
assigneeUserId (id de GET /users) escolhe quem assume — membro ativo do workspace, senão 422 invalid_assignee e nada muda. note grava uma nota interna no contato, que aparece na linha do tempo e no chat da conversa (não vai ao contato).
A pausa do handoff só termina quando alguém do time clica Devolver ao agente na conversa (com a IA da plataforma ligada em modo de pausa por minutos, ela vence sozinha no prazo configurado; na conversa de um funcionário digital da Fábrica, nunca: lá o handoff segura até o Devolver — handoff_externo sem prazo, ou a pausa da pessoa sem prazo, se alguém do time já tinha respondido).
Idempotente: chamar de novo com a conversa já passada para humano (pausada por handoff) e o mesmo responsável não avisa de novo, não grava outra nota e responde notified: false. Mande Idempotency-Key: o retry com a mesma chave devolve a mesma noteId e idempotency_replay: true.
Parâmetros de caminho
Entram no próprio endereço, no lugar das chaves.
- idstringobrigatório
- tamanho 1–80
Corpo da requisição
application/jsonobrigatórioV1ConversationHandoffInputInput
- reasonstringopcional
- tamanho 1–500
- reasonTypestringopcional
- padrão "pedido_explicito"
- um de"pedido_explicito""fora_de_escopo""cliente_irritado""negociacao""agenda"
- assigneeUserIdstringopcional
- tamanho 1–80
- notestringopcional
- tamanho 1–2000
Respostas
10 respostas documentadas — o código, o que ele significa nesta rota e a forma do corpo.
Conversa passada para humano: conversation.ai.paused: true, o responsável (assignedTo) e se ele foi avisado (notified).
V1ConversationHandoffResultado
- idstring
- channelstring
- connectionIdstring | null
- contactIdstring | null
- idstring
- namestring
- phonestring | null
- emailstring | null
- contactDisplaystring | null
- contactPhonestring | null
- assignedUserIdstring | null
- humanAssignedboolean
- assignedAtstring | null
- lastMessageAtstring | null
- lastMessageDirectionstring | null
- um de"inbound""outbound"
- lastMessageActorstring | null
- um de"user""contact""ia""automation""system""api""unknown"
- archivedboolean
- pausedboolean
- pausedUntilstring | null
- pausedReasonstring | null
- appliesboolean
- openboolean
- expiresAtstring | null
- createdAtstring
- updatedAtstring
- userIdstring
- namestring | null
- notifiedboolean
- noteIdstring | null
- idempotency_replaytruepode faltar
- sempre true