Copiar códigoCopiar códigoCopiar códigoCopiar códigoCopiar códigoCopiar códigoCopiar código
Pular para o conteúdo principal

Referência da API para conectar o DobroDesk ao Zapier

Dobrik ajuda você a seguir este guia do DobroDesk

Atualizado:

Resultado

Ligue um acionador do Zapier e adicione notas visíveis apenas para a equipa com o contrato verificado da API DobroDesk.

URL base e chaves de acesso

A integração do Zapier usa a API HTTPS de produção em https://dobrodesk.com/api/v1. Envie uma chave de acesso ativa da DobroDesk no cabeçalho Authorization de cada pedido.

Crie uma chave para iniciar automatizações e outra para adicionar notas internas. A chave do acionador pode ler metadados das conversas em toda a área de trabalho, incluindo identificadores, caixa de entrada, estado, canal de origem e datas. Não pode ler o texto das mensagens dos clientes nem os anexos. O filtro da caixa de entrada limita os eventos entregues, mas não o acesso aos metadados. A chave das notas pode adicionar uma nota interna a uma conversa na área de trabalho.

As chaves do Zapier com finalidade definida são a opção recomendada para a ligação de autosserviço. A chave do acionador usa conversations:read e funciona nas rotas de acionador descritas e na verificação da ligação. A chave das notas usa conversations:write e funciona na rota de notas internas e na verificação da ligação. Estas chaves são recusadas noutras rotas da API com HTTP 403 e o código api_token_purpose_forbidden. Uma chave REST API genérica ativa também é aceite nestas rotas do Zapier de acordo com os respetivos âmbitos habituais: a verificação da ligação não requer âmbito, as rotas de leitura e subscrição requerem conversations:read e adicionar uma nota requer conversations:write. As chaves genéricas mantêm o seu acesso REST API habitual. Para limitar as permissões, use as chaves com finalidade definida.

Trate uma chave de acesso como uma palavra-passe. Não a inclua num URL, código do navegador, registo partilhado ou URL de destino de um webhook do Zapier.

Cabeçalho de autorização
Authorization: Bearer dd_live_<dedicated-access-key>

Verificar a ligação

GET /zapier/connection verifica uma chave REST API ativa e identifica a área de trabalho e a ligação. A rota aceita uma chave genérica ou qualquer uma das chaves Zapier com finalidade definida. Não requer um âmbito adicional. Em caso de sucesso, devolve HTTP 200.

O objeto data contém workspaceId, tokenId, scopes, workspaceName e connectionName. A rota não devolve a chave de acesso.

Pedido e resposta da ligação
GET https://dobrodesk.com/api/v1/zapier/connection
Authorization: Bearer dd_live_<dedicated-access-key>

{
  "data": {
    "workspaceId": "<workspaceId>",
    "tokenId": "<tokenId>",
    "scopes": ["conversations:read"],
    "workspaceName": "<workspaceName>",
    "connectionName": "<connectionName>"
  }
}

Consultar caixas de entrada e exemplos de conversas

GET /zapier/inboxes?page=0&limit=100 devolve uma página de caixas de entrada em data. Cada elemento contém id e name. page é um número inteiro entre 0 e 10 000 e tem o valor predefinido 0. limit é um número inteiro entre 1 e 100 e tem o valor predefinido 100.

GET /zapier/conversations?limit=3&inboxId=<inboxId> devolve metadados de conversas para testar o passo no editor do Zapier. inboxId é opcional e, quando indicado, tem de ser uma cadeia não vazia. limit é um número inteiro entre 1 e 100 e tem o valor predefinido 10. Cada resultado contém id, workspaceId, conversationId, status, sourceChannel e createdAt, além de inboxId quando existe. id corresponde ao ID da conversa. O texto das mensagens dos clientes e os anexos não são devolvidos.

Ambas as rotas requerem conversations:read. Use a chave do acionador com finalidade definida ou uma chave REST API genérica ativa com esse âmbito. No resultado do acionador ativo, eventId identifica o evento e occurredAt indica a respetiva hora. O ID da conversa continua a ser o identificador estável da conversa.

Pedidos de metadados
GET /api/v1/zapier/inboxes?page=0&limit=100
GET /api/v1/zapier/conversations?limit=3&inboxId=<inboxId>

Criar uma subscrição New Conversation

POST /zapier/subscriptions regista o destino REST Hook do Zapier e requer conversations:read. Use a chave do acionador com finalidade definida ou uma chave REST API genérica ativa com esse âmbito. O corpo JSON requer targetUrl e pode incluir inboxId como cadeia. Se omitir inboxId, a subscrição recebe conversas novas de todas as caixas de entrada. Uma área de trabalho pode ter até 100 subscrições de webhook ativas entre o Zapier e outras integrações de webhook. Em caso de sucesso, devolve HTTP 200 com o ID da subscrição em data.id.

A DobroDesk aceita apenas destinos HTTPS cujo host seja exatamente hooks.zapier.com. Não inclua credenciais, uma porta explícita nem um fragmento de URL. O Zapier fornece o caminho e os parâmetros de consulta. A URL completa de destino é um segredo opaco. Mantenha-a em sigilo. O filtro da Caixa de entrada altera somente os eventos entregues. A chave do acionador continua tendo acesso aos metadados descritos em toda a área de trabalho.

Para cada conversa nova, a DobroDesk envia um POST para o URL de destino com os cabeçalhos X-DobroDesk-Delivery e X-DobroDesk-Event: conversation.created e um corpo JSON com deliveryId. O callback não tem assinatura HMAC. O acionador do Zapier confirma se o ID de entrega no cabeçalho X-DobroDesk-Delivery corresponde a deliveryId no corpo do pedido e depois obtém o evento canónico da DobroDesk com a respetiva chave autenticada.

Pedido e resposta da subscrição
POST /api/v1/zapier/subscriptions
Authorization: Bearer dd_live_<trigger-access-key>
Content-Type: application/json

{
  "targetUrl": "https://hooks.zapier.com/<Zapier-assigned-path>",
  "inboxId": "<inboxId>"
}

{
  "data": {
    "id": "<subscriptionId>"
  }
}

Ler um evento entregue e cancelar a subscrição

GET /zapier/events/<deliveryId> requer conversations:read e a mesma chave que criou a subscrição. Se a subscrição estiver ativa, devolve HTTP 200 e o evento canónico. A resposta contém data.id, data.type, data.workspaceId, data.occurredAt e data.data. O tipo é conversation.created. O objeto data aninhado contém conversationId, inboxId opcional, status, sourceChannel e createdAt.

O acionador ativo expõe o ID do evento como eventId e a hora do evento como occurredAt. A API devolve apenas metadados da conversa, sem texto de mensagens dos clientes nem anexos.

DELETE /zapier/subscriptions/<subscriptionId> requer conversations:read e a mesma chave que criou a subscrição. Desativa a subscrição e, em caso de sucesso, devolve HTTP 200, data.id e data.disabled com o valor true. Se a subscrição ou o evento não existir, estiver inativo ou não for acessível com esta chave, a resposta é 404. Desative o Zap antes de desligar a chave para que o Zapier possa cancelar a subscrição corretamente.

Leitura do evento e cancelamento
GET /api/v1/zapier/events/<deliveryId>
Authorization: Bearer dd_live_<trigger-access-key>

DELETE /api/v1/zapier/subscriptions/<subscriptionId>
Authorization: Bearer dd_live_<trigger-access-key>

Adicionar uma nota interna

POST /conversations/<conversationId>/notes requer conversations:write. Use a chave das notas com finalidade definida ou uma chave REST API genérica ativa com esse escopo. Envie um corpo JSON com bodyText. Depois de remover os espaços do início e do fim, o texto deve ter entre 1 e 20 000 caracteres. Em caso de sucesso, a resposta HTTP 200 contém data.id e data.status, que passa a saved quando a nota é salva. Esta ação adiciona uma nota visível para a equipe. Ela não envia uma resposta ao cliente.

Envie um Idempotency-Key em cada escrita. Na ação do Zapier, associe Source event or operation ID a um valor estável não vazio com até 1 024 caracteres. O conector aplica SHA-256 e envia uma chave com o prefixo zapier-note- seguido de 64 caracteres hexadecimais minúsculos. O valor do cabeçalho Idempotency-Key deve ter entre 1 e 200 caracteres e usar apenas letras ou algarismos ASCII, além de `.`, `_`, `:` ou `-`. Ao repetir a solicitação, mantenha a mesma conexão Access key, o mesmo Idempotency-Key, o mesmo conversationId e o mesmo texto da nota. A DobroDesk retém o resultado durante 365 dias, associado à área de trabalho e à identidade da chave de acesso. Reutilizar uma chave com outro conversationId ou outro texto da nota devolve HTTP 409 com o código idempotency_conflict. Se uma repetição devolver idempotency_in_progress, aguarde um pouco e repita a solicitação com o mesmo ID de origem, conversationId e texto da nota. O conector não garante uma nova tentativa automática.

Pedido e resposta de nota interna
POST /api/v1/conversations/<conversationId>/notes
Authorization: Bearer dd_live_<note-access-key>
Idempotency-Key: zapier-note-<sha256-of-source-reference>
Content-Type: application/json

{
  "bodyText": "Internal update from an approved automation."
}

{
  "data": {
    "id": "<noteId>",
    "status": "saved"
  }
}

Erros e limites de pedidos

Uma chave em falta, inválida, expirada ou revogada devolve HTTP 401. Uma finalidade de chave não permitida devolve HTTP 403 com o código api_token_purpose_forbidden. Se faltar um âmbito, HTTP 403 devolve o código insufficient_scope e requiredScope.

Os pedidos de API autorizados estão limitados a 300 por minuto por chave. As respostas incluem X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Quando o limite é ultrapassado, a DobroDesk devolve HTTP 429 com o código rate_limit_exceeded e Retry-After. Este limite não garante disponibilidade nem tempo de entrega. Um pedido válido também pode devolver HTTP 5xx se o serviço estiver temporariamente indisponível.

  • GET /zapier/connection: zapier_connection_unavailable (503).
  • GET /zapier/inboxes e GET /zapier/conversations: zapier_query_invalid (400).
  • POST /zapier/subscriptions: zapier_subscription_invalid ou zapier_target_url_invalid (400), inbox_not_found (404), zapier_subscription_conflict ou zapier_subscription_limit_reached (409), e zapier_subscription_unavailable (503). Um conflito significa que o mesmo destino já está ativo com definições diferentes. O limite da área de trabalho é de 100 subscrições de webhook ativas.
  • DELETE /zapier/subscriptions/<subscriptionId>: zapier_subscription_not_found (404).
  • GET /zapier/events/<deliveryId>: zapier_event_not_found (404).
  • POST /conversations/<conversationId>/notes: conversation_id_required (400), conversation_not_found (404), idempotency_key_required ou internal_note_body_invalid (400), idempotency_conflict ou idempotency_in_progress (409). idempotency_in_progress significa que o mesmo pedido continua a ser processado.
Códigos data.code e estados HTTP comuns
HTTP 403
data.code = api_token_purpose_forbidden

HTTP 429
data.code = rate_limit_exceeded

Coloque este guia em prática

Abra a Central de configuração para aplicar as instruções no seu espaço. Entre na sua conta quando solicitado.

Próximos passos