{
    "openapi": "3.0.0",
    "info": {
        "title": "API",
        "version": "1.0"
    },
    "servers": [
        {
            "url": "http://www.waboty.local"
        },
        {
            "url": "https://api.waboty.com"
        }
    ],
    "paths": {
        "/v1/messages": {
            "post": {
                "tags": [
                    "Mensajes"
                ],
                "summary": "Agregar un mensaje nuevo (texto o template oficial de WhatsApp)",
                "description": "Si se envía `template`, primero intenta canal oficial; si falla, cae a bots simples. `text` es requerido como fallback.",
                "operationId": "706fe4c4590439c4b8528522a476e565",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "phone",
                                    "text"
                                ],
                                "properties": {
                                    "phone": {
                                        "description": "Número en formato internacional.",
                                        "type": "string",
                                        "example": "+5491150052081"
                                    },
                                    "text": {
                                        "description": "Mensaje de texto libre (fallback obligatorio).",
                                        "type": "string",
                                        "example": "Hola!! soy un bot!! esta es una prueba!!"
                                    },
                                    "bot_id": {
                                        "description": "(Opcional) Forzar envío por un bot simple específico.",
                                        "type": "integer",
                                        "example": 3,
                                        "nullable": true
                                    },
                                    "template": {
                                        "description": "(Opcional) Tipo de template oficial.",
                                        "type": "string",
                                        "enum": [
                                            "verification_code",
                                            "appointment_confirmation_simple",
                                            "appointment_reminder",
                                            "turnos_cancelacion_simple"
                                        ],
                                        "example": "appointment_reminder",
                                        "nullable": true
                                    },
                                    "template_params": {
                                        "description": "Parámetros del template. Para `verification_code` puede ser un objeto como `{'value':'123456'}` o un string. Para los demás, un objeto con las claves esperadas por la plantilla.",
                                        "type": "object",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Mensaje creado/enviado. Si hay template, primero se intenta por canal oficial."
                    },
                    "400": {
                        "description": "Error de validación o credenciales inválidas."
                    }
                },
                "security": [
                    {
                        "clientId": []
                    },
                    {
                        "clientSecret": []
                    }
                ]
            }
        },
        "/v1/messages_bulk_sms": {
            "get": {
                "tags": [
                    "Mensajes SMS"
                ],
                "summary": "Get de mensajes masivos pendientes de enviar",
                "operationId": "f66dcbf3dbfd76c9b79abcc25dcbf4a6",
                "parameters": [
                    {
                        "parameter": "status",
                        "name": "status",
                        "in": "query",
                        "description": "estado",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "default": "pending"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": ""
                    }
                }
            }
        },
        "/v1/messages_bulk_sms/{id}/status": {
            "put": {
                "tags": [
                    "Mensajes SMS"
                ],
                "summary": "Editar estado del mensaje SMS",
                "operationId": "0d33d279921a0167bf8816b8090ce276",
                "parameters": [
                    {
                        "parameter": "id",
                        "name": "id",
                        "in": "path",
                        "description": "ID del turno",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "default": 1
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "external_videocall_url": {
                                        "type": "string"
                                    },
                                    "type_id": {
                                        "type": "integer"
                                    }
                                },
                                "type": "object",
                                "example": {
                                    "status": "sent"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ver un turno."
                    }
                },
                "security": [
                    {
                        "apiAuth": []
                    }
                ]
            }
        },
        "/v1/messages_sms": {
            "get": {
                "tags": [
                    "Mensajes SMS"
                ],
                "summary": "Get de mensajes masivos pendientes de enviar",
                "operationId": "41fd1f667f6d9856a6ae09734bfd2da2",
                "parameters": [
                    {
                        "parameter": "status",
                        "name": "status",
                        "in": "query",
                        "description": "estado",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "default": "pending"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": ""
                    }
                }
            }
        },
        "/v1/messages_sms/{id}/status": {
            "put": {
                "tags": [
                    "Mensajes SMS"
                ],
                "summary": "Editar estado del mensaje SMS",
                "operationId": "deddc4549f136dafb302edc9879c973d",
                "parameters": [
                    {
                        "parameter": "id",
                        "name": "id",
                        "in": "path",
                        "description": "ID del turno",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "default": 1
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "external_videocall_url": {
                                        "type": "string"
                                    },
                                    "type_id": {
                                        "type": "integer"
                                    }
                                },
                                "type": "object",
                                "example": {
                                    "status": "sent"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ver un turno."
                    }
                },
                "security": [
                    {
                        "apiAuth": []
                    }
                ]
            }
        },
        "/v1/reply": {
            "post": {
                "tags": [
                    "Mensajes"
                ],
                "summary": "Esta es una respuesta de un usuario a un mensaje. ",
                "operationId": "1fbc3e553f98396c08fcc899213c5095",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "medic_patient_id": {
                                        "type": "integer"
                                    },
                                    "msg": {
                                        "type": "string"
                                    }
                                },
                                "type": "object",
                                "example": {
                                    "from": "+5491150052081",
                                    "text": "Hola!! soy un bot!! esta es una prueba!!",
                                    "timestamp": "2023-10-01 12:00:00",
                                    "type": "text"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "clientId": []
                    },
                    {
                        "clientSecret": []
                    }
                ]
            }
        },
        "/v1/auto_reply": {
            "post": {
                "tags": [
                    "Mensajes"
                ],
                "summary": "Webhook para recibir mensajes entrantes y responder automáticamente con ChatGPT",
                "operationId": "e035273c84bb515fa3ff400d442d7a5a",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "event": {
                                        "type": "string"
                                    },
                                    "session": {
                                        "type": "string"
                                    },
                                    "payload": {
                                        "type": "object"
                                    }
                                },
                                "type": "object",
                                "example": {
                                    "event": "message",
                                    "session": "woopiba_01",
                                    "payload": {
                                        "from": "5491150052081@c.us",
                                        "fromMe": false,
                                        "body": "Hola como estas??",
                                        "timestamp": 1765121007
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mensaje procesado correctamente"
                    },
                    "400": {
                        "description": "Error de validación"
                    }
                },
                "security": [
                    {
                        "clientId": []
                    },
                    {
                        "clientSecret": []
                    }
                ]
            }
        }
    },
    "components": {
        "securitySchemes": {
            "clientId": {
                "type": "apiKey",
                "description": "Client Id ",
                "name": "Waboty-client-id",
                "in": "header"
            },
            "clientSecret": {
                "type": "apiKey",
                "description": "Client Secret ",
                "name": "Waboty-client-secret",
                "in": "header"
            }
        }
    },
    "tags": [
        {
            "name": "Mensajes",
            "description": "Mensajes del chat"
        },
        {
            "name": "Mensajes SMS",
            "description": "Mensajes SMS"
        },
        {
            "name": "Mensajes SMS",
            "description": "Mensajes SMS"
        },
        {
            "name": "Mensajes SMS",
            "description": "Mensajes SMS"
        },
        {
            "name": "Mensajes SMS",
            "description": "Mensajes SMS"
        }
    ]
}