Ninsaúde

Ninsaúde

Esta página do wiki foi descontinuada e pode estar desatualizada. A documentação oficial e atualizada do NicoChat está em docs.nicochat.com/p/463-ninsaude. Consulte sempre o link acima — o conteúdo abaixo é mantido apenas como histórico.

O Ninsaúde é o NicoApp de integração com o Ninsaúde, sistema de gestão para clínicas de saúde (prontuário eletrônico, agenda e pacientes). Com ele, seu bot busca, cadastra e atualiza pacientes, consulta horários disponíveis, agenda e reagenda consultas, altera o status de um atendimento e envia mensagens internas para a equipe — tudo direto do fluxo do NicoChat.

Disponível na aba de NicoApps. Base da integração: API REST oficial da Ninsaúde (api.ninsaude.com/v1), autenticada via Bearer Token enviado no cabeçalho Authorization de cada requisição.

Como obter as credenciais da API

Na instalação do NicoApp, você informa um único campo: o Token de Acesso (Bearer), usado em todas as chamadas como Authorization: Bearer <token>.

A própria Ninsaúde documenta a autenticação da sua plataforma de desenvolvimento (Ninsaúde Toro) como segue:

  • O padrão é OAuth2, com dois tokens: um Access Token, usado em todos os cabeçalhos de requisição, com validade de 15 minutos (funciona como uma sessão); e um Refresh Token, sem validade definida, usado apenas para obter novos Access Tokens — ele substitui o compartilhamento de usuário/senha com o app.

  • A API segue o padrão RESTful, com "milhares de rotas disponíveis", documentadas em uma coleção pública no Postman ("Ninsaúde Clinic").

A Ninsaúde não publica um guia de autoatendimento para gerar essas credenciais. Solicite ao suporte ou ao time comercial Ninsaúde o token/credencial de integração para uso neste miniapp.

Recomendação: entre em contato com o suporte ou o time comercial da Ninsaúde (pelo painel da clínica ou pelos canais de atendimento) e peça a emissão do Bearer Token de integração para a API. Ao configurar, confirme com eles se esse token expira (e precisa ser renovado periodicamente, como o Access Token de 15 min do fluxo OAuth2 padrão) ou se é um token de integração de longa duração — isso muda a forma como você deve reinstalá-lo/atualizá-lo no app.

Fontes: página de Desenvolvedores da Ninsaúde e coleção "Ninsaúde Clinic" no Postman.

Limitações

Limite de requisições e planos com acesso à API não são divulgados publicamente pela Ninsaúde. Confirme com o suporte Ninsaúde antes de dimensionar fluxos de alto volume.

  • Validade do token: se a credencial seguir o padrão OAuth2 descrito pela Ninsaúde, o Access Token dura apenas 15 minutos — o token usado neste app precisa ser confirmado com o suporte quanto à sua validade e à necessidade (ou não) de renovação periódica.

  • Plano necessário: não documentado publicamente. Trate como uma pergunta obrigatória ao ativar a integração com o cliente.

O que o miniapp faz

Pacientes

Ação

Endpoint

O que faz

Entradas principais

Saídas

Ação

Endpoint

O que faz

Entradas principais

Saídas

Criar Paciente

POST /cadastro_paciente

Cadastra um novo paciente

Nome (obrigatório); Nome Social, Nascimento, Sexo, Estado Civil, Raça/Cor, CPF, CNS, Nome da Mãe/Pai, E-mail, Profissão, Celular, Telefones, Endereço (CEP/Cidade/Bairro/Logradouro), Convênio/Plano/Carteirinha, Bandeira, Observação

ID do Paciente

Atualizar Paciente

PUT /cadastro_paciente/{id}

Atualiza os dados de um paciente existente

ID do Paciente (obrigatório) + os mesmos campos de Criar Paciente — só os campos preenchidos são enviados no PUT

ID do Paciente

Buscar Paciente

GET /cadastro_paciente/listar

Busca um paciente por CPF, e-mail ou celular (tenta nessa ordem)

CPF, E-mail ou Celular (ao menos um)

Todos os dados do paciente (nome, contatos, endereço, convênio…) e o ID; erros dedicados para "Paciente não encontrado" e "Múltiplos pacientes encontrados"

Remover Paciente

DELETE /cadastro_paciente/{id}

Exclui o cadastro de um paciente

ID do Paciente

Confirmação/Erro

Agenda

Ação

Endpoint

O que faz

Entradas principais

Saídas

Ação

Endpoint

O que faz

Entradas principais

Saídas

Horários Disponíveis

GET /atendimento_agenda/listar/horario/disponivel/profissional/{id}/dataInicial/{}/dataFinal/{}

Lista horários livres de um profissional

Profissional (obrigatório); Data Inicial (padrão: hoje) e Data Final (padrão: Data Inicial + 3 dias) — preenchidas automaticamente se vierem vazias

Lista de horários disponíveis

Agendar Consulta

POST /atendimento_agenda

Cria um novo agendamento

Unidade, Profissional, Data, Hora Inicial, Paciente, Status, Serviço, Especialidade, Sala; Hora Final é opcional

ID do Agendamento

Reagendar Consulta (sub-fluxo interno: "Agendar Consulta #1")

POST /atendimento_agenda/reagendar/agendamento/{id}

Move um agendamento existente para nova data/hora

ID do Agendamento (obrigatório), Nova Data, Nova Hora Inicial; Nova Hora Final é opcional

ID do Agendamento

Excluir Agendamento

DELETE /atendimento_agenda/{id}

Cancela/exclui um agendamento

ID do Agendamento

Confirmação/Erro

Editar Status Agendamento

PUT /atendimento_agenda/alterar/status/agendamento/{id}

Altera o status de um agendamento (ex.: presença/falta/cancelamento)

ID do Agendamento, Status

Confirmação/Erro

Comunicação interna

Ação

Endpoint

O que faz

Entradas principais

Saídas

Ação

Endpoint

O que faz

Entradas principais

Saídas

Mandar Mensagem Interna

POST /geral_batepapo

Envia uma mensagem no bate-papo interno da Ninsaúde para um usuário/atendente

Usuário Destino (ID), Mensagem

Confirmação/Erro

Dicas e observações

  • "Agendar Consulta" x "Agendar Consulta #1": apesar do nome parecido, não são duplicadas — Agendar Consulta cria um agendamento novo (POST /atendimento_agenda) e Agendar Consulta #1 na verdade reagenda um agendamento existente (POST /atendimento_agenda/reagendar/agendamento/{id}). Nesta documentação ela foi chamada de Reagendar Consulta para deixar o propósito claro.

Revisão futura sugerida: renomear o sub-fluxo "Agendar Consulta #1" no editor do app para "Reagendar Consulta" (ou similar), evitando a confusão com a ação "Agendar Consulta".

  • Cálculo automático de Hora Final: em Agendar Consulta e em Reagendar Consulta, se a Hora Final não for informada, o app busca a duração padrão do Serviço escolhido (GET /cadastro_servico/{id}duracaoPadrao) e calcula Hora Final = Hora Inicial + duração automaticamente — não é preciso informar os dois horários manualmente.

  • IDs encadeados: o ID do Paciente sai de Criar/Buscar Paciente e entra em Atualizar, Remover e Agendar Consulta. O ID do Agendamento sai de Agendar Consulta e entra em Reagendar Consulta, Excluir Agendamento e Editar Status Agendamento.

  • Formatos de data/hora: datas em AAAA-MM-DD (ex.: 2026-08-01); horários em HH:MM:SS (ex.: 17:00:00).

  • Buscar Paciente: a ação tenta CPF, depois e-mail, depois celular, nessa ordem, até achar exatamente um paciente — se não achar nenhum, o erro é "Paciente não encontrado"; se achar mais de um, "Múltiplos pacientes encontrados" (peça um dado mais específico ao usuário para refinar a busca).

  • Mensagem Interna: o texto enviado é higienizado antes do envio — quebras de linha e tabs viram espaço, aspas simples viram crase e aspas duplas viram aspas curvas, evitando quebrar o JSON da requisição.

  • Tratamento de erros: toda ação devolve o erro real da Ninsaúde (campo error da resposta) quando a chamada falha — use o caminho de erro do bloco para tratar no fluxo (ex.: token inválido/expirado, horário indisponível, campo obrigatório faltando).