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

# Webhook posterior a la llamada

> Webhook enviado tras finalizar una llamada que contiene las variables extraídas y los datos de la llamada

<Warning>
  **API de Famulor 1.0 (legado).** Esta página se aplica únicamente a Famulor 1.0 (`app.famulor.de`) y se conserva por compatibilidad. Para la plataforma actual, usa la [referencia de la API de Famulor 2.0](/es/api-reference/introduction).
</Warning>

El Webhook posterior a la llamada se envía automáticamente a la URL de webhook que hayas configurado después de que cada llamada se complete. Este webhook incluye los detalles de la llamada, las variables extraídas, la transcripción y, opcionalmente, la URL de la grabación.

## Configuración del webhook

Para activar los Webhooks posteriores a la llamada:

1. Configura la URL de webhook de tu asistente en los ajustes del asistente
2. Activa "Post call webhook" en la configuración del asistente
3. Define las variables posteriores a la llamada que quieres que la IA extraiga

## Formato de la solicitud

El webhook se envía como una solicitud POST a la URL configurada con el siguiente payload JSON:

### Estructura del payload

<ResponseField name="id" type="integer">
  Identificador único de la llamada
</ResponseField>

<ResponseField name="customer_phone" type="string">
  Número de teléfono del cliente en formato E.164 (p. ej. "+1234567890") o null si no está disponible
</ResponseField>

<ResponseField name="assistant_phone" type="string">
  Número de teléfono usado por el asistente en formato E.164 o null si no está disponible
</ResponseField>

<ResponseField name="duration" type="integer">
  Duración de la llamada en segundos
</ResponseField>

<ResponseField name="status" type="string">
  Estado final de la llamada (p. ej. "completed", "busy", "failed")
</ResponseField>

<ResponseField name="extracted_variables" type="object">
  Variables extraídas por la IA según la configuración de tu esquema posterior a la llamada

  <Expandable title="Ejemplo de variables extraídas">
    ```json theme={null}
    {
      "customer_interested": true,
      "appointment_scheduled": false,
      "contact_reason": "product_inquiry",
      "follow_up_needed": true,
      "customer_budget": "10000-50000"
    }
    ```
  </Expandable>
</ResponseField>

<ResponseField name="input_variables" type="object">
  Variables pasadas al asistente antes de que empezara la llamada
</ResponseField>

<ResponseField name="transcript" type="string">
  Transcripción completa de la conversación
</ResponseField>

<ResponseField name="recording_url" type="string">
  URL para descargar la grabación de la llamada (solo se incluye si "Include recording in webhook" está activado en los ajustes del asistente)
</ResponseField>

<ResponseField name="created_at" type="string">
  Marca de tiempo ISO 8601 de cuándo se inició la llamada
</ResponseField>

<ResponseField name="finished_at" type="string">
  Marca de tiempo ISO 8601 de cuándo se completó la llamada (tomada del updated\_at del registro de la llamada)
</ResponseField>

<ResponseField name="lead" type="object">
  Información del lead (solo se incluye para llamadas de campaña)

  <Expandable title="Propiedades del lead">
    <ResponseField name="id" type="integer">
      Identificador único del lead
    </ResponseField>

    <ResponseField name="phone_number" type="string">
      Número de teléfono del lead
    </ResponseField>

    <ResponseField name="variables" type="object">
      Variables asociadas al lead
    </ResponseField>

    <ResponseField name="status" type="string">
      Estado actual del lead
    </ResponseField>

    <ResponseField name="created_at" type="string">
      Cuándo se creó el lead
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      Cuándo se actualizó el lead por última vez
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="campaign" type="object">
  Información de la campaña (si está disponible)

  <Expandable title="Propiedades de la campaña">
    <ResponseField name="id" type="integer">
      ID de la campaña
    </ResponseField>

    <ResponseField name="name" type="string">
      Nombre de la campaña
    </ResponseField>

    <ResponseField name="status" type="string">
      Estado de la campaña
    </ResponseField>

    <ResponseField name="allowed_hours_start_time" type="string">
      Hora de inicio permitida de la campaña
    </ResponseField>

    <ResponseField name="allowed_hours_end_time" type="string">
      Hora de fin permitida de la campaña
    </ResponseField>

    <ResponseField name="allowed_days" type="array">
      Días permitidos de la campaña
    </ResponseField>

    <ResponseField name="max_calls_in_parallel" type="integer">
      Número máximo de llamadas simultáneas para la campaña
    </ResponseField>

    <ResponseField name="max_retries" type="integer">
      Número máximo de reintentos para los leads
    </ResponseField>

    <ResponseField name="retry_interval" type="integer">
      Intervalo de reintento en minutos
    </ResponseField>

    <ResponseField name="created_at" type="string">
      Cuándo se creó la campaña
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      Cuándo se actualizó la campaña por última vez
    </ResponseField>
  </Expandable>
</ResponseField>

## Ajustes del webhook

Puedes configurar las siguientes opciones para tu Webhook posterior a la llamada:

* **Enviar el webhook solo si se completa**: envía el webhook únicamente para las llamadas completadas correctamente
* **Incluir la grabación en el webhook**: incluye el campo `recording_url` en el payload
* **Variables personalizadas**: define variables personalizadas que la IA debe extraer de la conversación

## Notas importantes

* Los campos `customer_phone` y `assistant_phone` pueden ser null si la información no está disponible
* El campo `recording_url` solo se incluye si has activado "Include recording in webhook" en los ajustes de tu asistente
* El objeto `lead` solo se incluye para llamadas que forman parte de una campaña
* El objeto `extracted_variables` contiene las variables que definiste en la configuración del esquema posterior a la llamada de tu asistente

<ResponseExample>
  ```json Webhook Payload Example theme={null}
  {
    "id": 480336,
    "customer_phone": "+4915123456789",
    "assistant_phone": "+4912345678",
    "duration": 180,
    "status": "completed",
    "extracted_variables": {
      "customer_interested": true,
      "appointment_scheduled": false,
      "contact_reason": "product_inquiry",
      "follow_up_needed": true,
      "customer_budget": "10000-50000",
      "decision_maker": true,
      "next_contact_date": "2024-02-15"
    },
    "input_variables": {
      "customer_name": "Max Mustermann",
      "company": "Beispiel GmbH"
    },
    "transcript": "Assistant: Hello Mr. Mustermann! I am calling from Famulor...\nCustomer: Hello, yes I’m listening...",
    "recording_url": "https://recordings.famulor.de/call-480336.mp3",
    "created_at": "2024-01-15T10:30:00Z",
    "finished_at": "2024-01-15T10:33:00Z",
    "lead": {
      "id": 12345,
      "phone_number": "+4915123456789",
      "variables": {
        "customer_name": "Max Mustermann",
        "company": "Beispiel GmbH",
        "source": "website"
      },
      "status": "contacted",
      "created_at": "2024-01-14T09:00:00Z",
      "updated_at": "2024-01-15T10:33:00Z"
    },
    "campaign": {
      "id": 2324,
      "name": "New Customer Acquisition Q1 2024",
      "status": "in-progress",
      "allowed_hours_start_time": "09:00:00",
      "allowed_hours_end_time": "18:00:00",
      "allowed_days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
      "max_calls_in_parallel": 5,
      "max_retries": 3,
      "retry_interval": 60,
      "created_at": "2024-01-01T08:00:00Z",
      "updated_at": "2024-01-15T10:00:00Z"
    }
  }
  ```

  ```json Webhook without Lead/Campaign theme={null}
  {
    "id": 480337,
    "customer_phone": "+4917123456789",
    "assistant_phone": "+4912345678",
    "duration": 120,
    "status": "completed",
    "extracted_variables": {
      "issue_resolved": true,
      "customer_satisfaction": 9,
      "support_category": "technical"
    },
    "input_variables": {},
    "transcript": "Assistant: Hello! How can I assist you today?\nCustomer: I have a problem with...",
    "recording_url": null,
    "created_at": "2024-01-15T14:20:00Z",
    "finished_at": "2024-01-15T14:22:00Z",
    "lead": null,
    "campaign": null
  }
  ```
</ResponseExample>

<Tip>
  Páginas relacionadas: [Introducción](/es/api-v1/introduction) y [Guía de autenticación](/es/api-v1/authentication), y [Ejemplos de integración de la API](/es/api-v1/introduction).
</Tip>
