> ## Documentation Index
> Fetch the complete documentation index at: https://developer.iobot.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear Ticket como Business

> Crea un ticket directamente para un contacto a partir de un paso del guion, sin enviar una plantilla

Crea un ticket directamente para un contacto a partir de un **paso** (`paso_id`) del guion. A diferencia de [Enviar Plantilla como Business](/chats/enviar-plantilla-business), este endpoint **no envía una plantilla**: reutiliza el flujo interno de creación de tickets (asignación de agente, mensaje de ticket, aplicación de etiquetas del paso, eventos de embudo) y luego **sube el chat al tope del inbox** actualizando su `ultimo_mensaje`.

Al igual que el endpoint de plantilla, no requiere un `chat_id` ni `contacto_id` preexistentes — crea automáticamente el contacto, el chat y la conversación si no existen.

Útil para disparos externos, integraciones de CRM, o flujos donde el negocio necesita escalar un contacto a un agente sin enviar una plantilla.

## Autenticación

Requiere el encabezado `x-api-key` con el App Key del negocio. Consulta [Autenticación](/authentication).

## Encabezados

<ParamField header="x-api-key" type="string" required>
  App Key del negocio. Consulta [Autenticación](/authentication).
</ParamField>

## Parámetros de ruta

<ParamField path="id" type="number" required>
  ID del paso (`paso_id`) del guion a partir del cual se crea el ticket. Debe pertenecer al negocio indicado en `empresa_id`. El paso determina el departamento de asignación, las etiquetas aplicadas al chat y el contenido del mensaje de bienvenida.
</ParamField>

## Cuerpo de la solicitud

<ParamField body="empresa_id" type="number" required>
  ID del negocio que crea el ticket.
</ParamField>

<ParamField body="phone_number" type="string" required>
  Número de WhatsApp del destinatario. Se aceptan formatos con o sin caracteres especiales (guiones, espacios, `+`) — el sistema extrae solo los dígitos. Ejemplo: `+52 155 1234 5678` o `5215512345678`.
</ParamField>

<ParamField body="name" type="string">
  Nombre del contacto. Se usa como nombre visible si el contacto es creado por primera vez. Si se omite, se usa el número de teléfono como nombre. Debe ser un texto; de lo contrario la solicitud será rechazada con `400`.
</ParamField>

## Comportamiento

* Si no hay un agente disponible para el paso, el sistema responde al contacto con el mensaje de fuera de horario y **no crea el ticket**. En ese caso la respuesta tendrá `ticket_id: null`.
* El chat siempre se sube al tope del inbox actualizando `ultimo_mensaje`, y se emite un evento de Pusher para reordenar el inbox en tiempo real.

## Respuesta

<ResponseField name="success" type="boolean">
  `true` cuando la solicitud se procesó correctamente.
</ResponseField>

<ResponseField name="chat_id" type="number">
  ID del chat creado o actualizado.
</ResponseField>

<ResponseField name="ticket_id" type="number | null">
  ID del ticket creado. Es `null` cuando no había un agente disponible y el ticket no se generó.
</ResponseField>

<RequestExample>
  ```bash theme={null}
  curl -X POST https://beta.api-iobot-desarrollo.com/chats/crear/ticket/business/45 \
    -H "Content-Type: application/json" \
    -H "x-api-key: TU_APP_KEY" \
    -d '{
      "empresa_id": 1,
      "phone_number": "5215512345678",
      "name": "Juan Pérez"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 Éxito theme={null}
  {
    "success": true,
    "chat_id": 9982,
    "ticket_id": 5521
  }
  ```

  ```json 200 Sin agente disponible theme={null}
  {
    "success": true,
    "chat_id": 9982,
    "ticket_id": null
  }
  ```

  ```json 400 Validación de campo requerido theme={null}
  {
    "success": false,
    "error": "paso_id es requerido y debe ser un número"
  }
  ```

  ```json 404 Negocio no encontrado theme={null}
  {
    "success": false,
    "error": "Empresa no encontrada"
  }
  ```

  ```json 404 Paso no encontrado theme={null}
  {
    "success": false,
    "error": "Paso no encontrado"
  }
  ```

  ```json 404 Paso de otra empresa theme={null}
  {
    "success": false,
    "error": "El paso no pertenece a la empresa"
  }
  ```

  ```json 500 Error inesperado theme={null}
  {
    "success": false,
    "error": "Error: ..."
  }
  ```
</ResponseExample>
