{
    "openapi": "3.0.0",
    "info": {
        "title": "Convert Touch",
        "description": "Com a API, é possível realizar ações como atender, desligar e discar chamadas, enviar DTMF, verificar o status de chamadas e contas, estacionar ligações e muito mais. Ela também oferece suporte para criação e gerenciamento de contas, além de métodos para troca de abas no sistema e controle de configurações via chave de provisionamento.",
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "http://localhost:4079",
            "description": "Servidor Local"
        }
    ],
    "paths": {
        "/touch": {
            "get": {
                "tags": [
                    "Conta"
                ],
                "summary": "Buscar a conta atual",
                "description": "Retorna os dados da conta atual do usuário.",
                "responses": {
                    "200": {
                        "description": "Conta ativa",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "object",
                                            "properties": {
                                                "name": {
                                                    "type": "string",
                                                    "description": "Nome do usuário",
                                                    "example": "João Silva"
                                                },
                                                "user": {
                                                    "type": "string",
                                                    "description": "Ramal do usuário",
                                                    "example": "101"
                                                },
                                                "password": {
                                                    "type": "string",
                                                    "description": "Senha do ramal",
                                                    "example": "1234"
                                                },
                                                "server": {
                                                    "type": "string",
                                                    "description": "Servidor",
                                                    "example": "empresa.app.br"
                                                },
                                                "status": {
                                                    "type": "integer",
                                                    "description": "Status do usuário (-1:Falha, 0:Desconectado, 1:Conectado)",
                                                    "example": 1,
                                                    "enum": [
                                                        -1,
                                                        0,
                                                        1
                                                    ]
                                                },
                                                "show": {
                                                    "type": "boolean"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/answer": {
            "get": {
                "summary": "Atender uma chamada",
                "description": "Utilizado para atender chamadas recebidas.",
                "tags": [
                    "Chamadas"
                ],
                "responses": {
                    "200": {
                        "description": "Ligação atendida com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/reject": {
            "get": {
                "summary": "Rejeitar uma chamada",
                "description": "Utilizado para rejeitar chamadas recebidas.",
                "tags": [
                    "Chamadas"
                ],
                "responses": {
                    "200": {
                        "description": "Chamada rejeitada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/dial": {
            "get": {
                "summary": "Realizar uma chamada",
                "description": "Utilizado para realizar chamadas para um número específico.",
                "tags": [
                    "Chamadas"
                ],
                "parameters": [
                    {
                        "name": "numero",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Número de telefone para discagem",
                        "example": "005421037000"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ligação executada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/hangup": {
            "get": {
                "summary": "Desligar chamada",
                "description": "Utilizado para desligar uma chamada ativa.",
                "tags": [
                    "Chamadas"
                ],
                "responses": {
                    "200": {
                        "description": "Ligação desligada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/dtmf": {
            "get": {
                "summary": "Enviar DTMF na chamada",
                "description": "Util para enviar comandos em chamadas ativas, como transferência, parking, etc.",
                "tags": [
                    "Chamadas"
                ],
                "parameters": [
                    {
                        "name": "dtmf",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "DTMF a ser enviado",
                        "example": "*27001"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "DTMF enviado com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/parking": {
            "get": {
                "summary": "Colocar a chamada em parking",
                "description": "Utilizado para estacionar uma chamada ativa.",
                "tags": [
                    "Chamadas"
                ],
                "responses": {
                    "200": {
                        "description": "Ligação estacionada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/open": {
            "get": {
                "summary": "Abrir janela do Touch",
                "description": "Utilizado para abrir a janela do Touch na tela do usuário.",
                "tags": [
                    "Aplicação"
                ],
                "responses": {
                    "200": {
                        "description": "Janela mostrada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/status": {
            "get": {
                "summary": "Buscar status atual",
                "description": "Retorna o status atual do usuário, incluindo informações sobre a chamada ativa e a conta.",
                "tags": [
                    "Conta",
                    "Chamadas"
                ],
                "responses": {
                    "200": {
                        "description": "Status do usuário",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "object",
                                            "properties": {
                                                "chamada": {
                                                    "type": "object",
                                                    "properties": {
                                                        "active": {
                                                            "type": "boolean",
                                                            "description": "Indica se há uma chamada ativa",
                                                            "example": true
                                                        },
                                                        "mute": {
                                                            "type": "boolean",
                                                            "description": "Indica se o microfone está mudo",
                                                            "example": false
                                                        },
                                                        "status": {
                                                            "type": "string",
                                                            "description": "Status da chamada Atendida, Chamando",
                                                            "example": "Atendida"
                                                        },
                                                        "title": {
                                                            "type": "string",
                                                            "description": "Título da chamada",
                                                            "example": "João Silva"
                                                        },
                                                        "number": {
                                                            "type": "string",
                                                            "description": "Número da chamada",
                                                            "example": "005421037000"
                                                        },
                                                        "tipo": {
                                                            "type": "string",
                                                            "description": "Tipo da chamada (Entrada, Saída)",
                                                            "example": "Entrada"
                                                        },
                                                        "foto": {
                                                            "type": [
                                                                "string",
                                                                "null"
                                                            ],
                                                            "description": "Foto do contato",
                                                            "example": "http://empresa.app.br/foto.jpg"
                                                        }
                                                    }
                                                },
                                                "conta": {
                                                    "type": "object",
                                                    "properties": {
                                                        "name": {
                                                            "type": "string",
                                                            "description": "Nome do usuário",
                                                            "example": "João Silva"
                                                        },
                                                        "user": {
                                                            "type": "string",
                                                            "description": "Ramal do usuário",
                                                            "example": "101"
                                                        },
                                                        "password": {
                                                            "type": "string",
                                                            "description": "Senha do ramal",
                                                            "example": "1234"
                                                        },
                                                        "server": {
                                                            "type": "string",
                                                            "description": "Servidor",
                                                            "example": "empresa.app.br"
                                                        },
                                                        "status": {
                                                            "type": "integer",
                                                            "description": "Status do usuário (-1:Falha, 0:Desconectado, 1:Conectado)",
                                                            "example": 1,
                                                            "enum": [
                                                                -1,
                                                                0,
                                                                1
                                                            ]
                                                        },
                                                        "show": {
                                                            "type": "boolean"
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/changeTab": {
            "get": {
                "summary": "Trocar a aba ativa do Touch",
                "description": "Utilizado para trocar a aba ativa do Touch.",
                "tags": [
                    "Aplicação"
                ],
                "parameters": [
                    {
                        "name": "tab",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Nome da aba (ex: monitoramento, chamadas, contatos)",
                        "example": "monitoramento"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Aba trocada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/createAccount": {
            "get": {
                "summary": "Cria uma nova conta",
                "description": "Utilizado para criar uma nova conta SIP.",
                "tags": [
                    "Conta"
                ],
                "parameters": [
                    {
                        "name": "name",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Nome do usuário"
                    },
                    {
                        "name": "user",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Ramal do usuário"
                    },
                    {
                        "name": "password",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Senha do ramal"
                    },
                    {
                        "name": "server",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Servidor"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Conta criada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        },
                                        "response": {
                                            "type": "object",
                                            "properties": {
                                                "name": {
                                                    "type": "string",
                                                    "description": "Nome do usuário",
                                                    "example": "João Silva"
                                                },
                                                "user": {
                                                    "type": "string",
                                                    "description": "Ramal do usuário",
                                                    "example": "101"
                                                },
                                                "password": {
                                                    "type": "string",
                                                    "description": "Senha do ramal",
                                                    "example": "1234"
                                                },
                                                "server": {
                                                    "type": "string",
                                                    "description": "Servidor",
                                                    "example": "empresa.app.br"
                                                },
                                                "status": {
                                                    "type": "integer",
                                                    "description": "Status do usuário (-1:Falha, 0:Desconectado, 1:Conectado)",
                                                    "example": 1,
                                                    "enum": [
                                                        -1,
                                                        0,
                                                        1
                                                    ]
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/fastConfig": {
            "get": {
                "summary": "Carregar chave de provisionamento",
                "description": "Utilizado para carregar uma chave de provisionamento no Touch.",
                "tags": [
                    "Provisionamento"
                ],
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Chave de configuração (base64)",
                        "example": "c29tZSBjb25maWc="
                    }
                ],
                "responses": {
                    "200": {
                        "description": "FastConfig carregado com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/register": {
            "get": {
                "summary": "Registrar ramal",
                "description": "Utilizado para registrar um ramal SIP no Touch.",
                "tags": [
                    "Conta"
                ],
                "responses": {
                    "200": {
                        "description": "Ramal registrado com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/unregister": {
            "get": {
                "summary": "Cancela registro do ramal",
                "description": "Utilizado para cancelar o registro de um ramal SIP no Touch.",
                "tags": [
                    "Conta"
                ],
                "responses": {
                    "200": {
                        "description": "Registro cancelado com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "description": "Status da operação (400: Falha, 200: Sucesso)",
                                            "example": 200
                                        },
                                        "msg": {
                                            "type": "string",
                                            "description": "Mensagem de retorno",
                                            "example": "Sucesso"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/notify": {
            "get": {
                "summary": "Enviar alerta para o usuário",
                "description": "Utilizado para enviar um alerta para o usuário do Touch.",
                "tags": [
                    "Aplicação"
                ],
                "parameters": [
                    {
                        "name": "title",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Título do alerta"
                    },
                    {
                        "name": "body",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Corpo do alerta"
                    },
                    {
                        "name": "type",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "info",
                                "success",
                                "error",
                                "warn"
                            ]
                        },
                        "description": "Tipo do alerta"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Alerta enviado com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Erro no envio do alerta",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/currentConfig": {
            "get": {
                "summary": "Buscar configuração atual",
                "description": "Retorna a configuração atual do Touch.",
                "tags": [
                    "Provisionamento"
                ],
                "responses": {
                    "200": {
                        "description": "Configurações retornadas com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "data": {
                                            "type": "object"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/createRoutine/executable": {
            "get": {
                "summary": "Criar uma nova rotina executável",
                "description": "Utilizado para criar uma nova rotina executável.",
                "tags": [
                    "Rotinas"
                ],
                "parameters": [
                    {
                        "name": "routine_id",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "ID da rotina"
                    },
                    {
                        "name": "routine_name",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Nome da rotina"
                    },
                    {
                        "name": "routine_actions",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Ações da rotina (codificadas em Base64)"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Rotina executável criada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Erro na criação da rotina",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/createRoutine/conditional": {
            "get": {
                "summary": "Criar uma nova rotina condicional",
                "description": "Utilizado para criar uma nova rotina condicional.",
                "tags": [
                    "Rotinas"
                ],
                "parameters": [
                    {
                        "name": "routine_name",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Nome da rotina"
                    },
                    {
                        "name": "routine_actions",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Ações da rotina (codificadas em Base64)"
                    },
                    {
                        "name": "routine_subconditions",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Subcondições da rotina (codificadas em Base64)"
                    },
                    {
                        "name": "routine_type",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Tipo da rotina"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Rotina condicional criada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Erro na criação da rotina condicional",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/touch/executeRoutine": {
            "get": {
                "summary": "Executar uma rotina",
                "description": "Utilizado para executar uma rotina já criada.",
                "tags": [
                    "Rotinas"
                ],
                "parameters": [
                    {
                        "name": "routine_id",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "ID da rotina"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Rotina executada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Erro na execução da rotina",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer"
                                        },
                                        "msg": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}