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

# Ejemplos de las solicitudes Webhook

> Este endpoint debe ser implementado en TU servidor (por ejemplo: https://tudominio.com/treble-webhooks). Treble llamará a este webhook para diferentes tipos de eventos. Debes configurar la URL de este webhook en el panel de administración de Treble.



## OpenAPI

````yaml open-api-files/treble-api-es.json POST /treble-webhooks
openapi: 3.0.1
info:
  title: API de Treble Poll
  description: Documentación para el endpoint de despliegue de polls en Treble
  version: 1.0.0
servers:
  - url: https://main.treble.ai
    description: Servidor principal de Treble
  - url: https://tudominio.com
    description: >-
      Servidor de ejemplo para implementar los webhooks. Esto representa TU
      servidor donde debes implementar los endpoints que Treble llamará.
security: []
tags:
  - name: Webhooks
    description: >-
      Endpoints que Treble llamará en tu servidor. Estos no son endpoints reales
      que puedas llamar, sino una representación de los webhooks que Treble
      invocará en tu sistema.
paths:
  /treble-webhooks:
    post:
      tags:
        - Webhooks
      summary: Webhook - Eventos de Treble
      description: >-
        Este endpoint debe ser implementado en TU servidor (por ejemplo:
        https://tudominio.com/treble-webhooks). Treble llamará a este webhook
        para diferentes tipos de eventos. Debes configurar la URL de este
        webhook en el panel de administración de Treble.
      requestBody:
        description: >-
          Información del evento. El tipo de evento se determina por el campo
          'event_type'.
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/HSMStatusUpdateEvent'
                - $ref: '#/components/schemas/ConversationClosedEvent'
                - $ref: '#/components/schemas/DeploymentFailureEvent'
              discriminator:
                propertyName: event_type
                mapping:
                  hsm.status:
                    $ref: '#/components/schemas/HSMStatusUpdateEvent'
                  session.close:
                    $ref: '#/components/schemas/ConversationClosedEvent'
                  deployment.failure:
                    $ref: '#/components/schemas/DeploymentFailureEvent'
            examples:
              hsm.status:
                summary: Actualización de estado HSM
                value:
                  event_type: hsm.status
                  event_id: 5f8d7e6a5f8d7e6a5f8d7e6a
                  timestamp: '2024-09-10T12:34:56.789Z'
                  status: APPROVED
                  name: welcome_message
                  affected_conversation_ids:
                    - 12345
                    - 67890
                    - 54321
              session.close:
                summary: Conversación cerrada
                value:
                  event_type: session.close
                  event_id: f49e36d5-e0b0-4831-87c3-21c4bff033b2
                  timestamp: '2024-09-10T14:50:40.145000Z'
                  session:
                    external_id: f49e36d5-e0b0-4831-87c3-21c4bff033b2
                    closed_at: '2024-09-10T14:50:40.145000Z'
                  user:
                    country_code: '+57'
                    cellphone: '1234567890'
                  company:
                    id: 1
                    cellphone: '+12056192992'
                  messages:
                    - sender: user
                      type: text
                      text:
                        message: Hola, ¿cómo estás?
                      created_at: '2024-09-10T14:50:30.145000Z'
                      delivered_at: null
                      read_at: null
                    - sender: company
                      type: text
                      text:
                        message: Hola, ¿cómo estás?, ¿cuál es tu nombre?
                      created_at: '2024-09-10T14:50:30.145000Z'
                      delivered_at: '2024-09-10T14:50:31.145000Z'
                      read_at: '2024-09-10T14:50:32.145000Z'
                  user_session_keys:
                    - key: name
                      value: Juan
                      type: null
                    - key: location
                      value: >-
                        {"latitude": 4.5935443, "longitude": -72.0345404,
                        "address": "Carrera 7 #100-06"}
                      type: location
                  hsm:
                    name: welcome_message
                    text: >-
                      Hola {{1}}, bienvenido a nuestro servicio de atención al
                      cliente.
                    answers:
                      - message: Gracias por la bienvenida
                    header:
                      type: image
                      url: https://example.com/logo.jpg
                    footer: Responde a este mensaje para continuar
                    buttons:
                      type: actions
                      options:
                        - type: quick_reply
                          message: Necesito ayuda
                        - type: call_to_action
                          subtype: website
                          url: https://example.com/catalogo
                          message: Ver catálogo
              deployment.failure:
                summary: Falla en despliegue
                value:
                  event_id: f49e36d5-e0b0-4831-87c3-21c4bff033b2
                  timestamp: '2024-09-10T14:50:44.145000Z'
                  event_type: deployment.failure
                  failure_reason: FAILURE_BY_HUMAN_HANDOVER
                  user:
                    country_code: '+57'
                    cellphone: '3178901234'
                  conversation_id: 1
                  failed_at: '2024-09-10T14:50:44.145000Z'
                  user_session_keys:
                    - key: name
                      value: Juan
                      type: null
      responses:
        '200':
          description: Respuesta exitosa
          content:
            application/json:
              schema:
                type: object
                description: >-
                  Objeto JSON con la confirmación de recepción. El servicio debe
                  responder en menos de 5 segundos.
      servers:
        - url: https://{webhookUrl}
          description: URL de tu servidor donde se implementará el webhook
          variables:
            webhookUrl:
              default: tudominio.com
              description: URL de tu servidor donde se implementará el webhook
components:
  schemas:
    HSMStatusUpdateEvent:
      title: hsm.status
      type: object
      required:
        - event_type
        - event_id
        - timestamp
        - status
        - name
        - affected_conversation_ids
      description: >-
        Evento que se dispara cuando cambia el estado de un HSM (Highly
        Structured Message)
      properties:
        event_type:
          type: string
          enum:
            - hsm.status
          description: >-
            Tipo de evento, siempre 'hsm.status' para actualizaciones de estado
            de HSM
        event_id:
          type: string
          description: Identificador único del evento
        timestamp:
          type: string
          format: date-time
          description: Marca de tiempo del evento en formato ISO 8601
        status:
          type: string
          enum:
            - APPROVED
            - REJECTED
            - PAUSED
            - DISABLED
            - PENDING_DELETION
          description: Nuevo estado del HSM
        name:
          type: string
          description: Nombre o identificador del HSM
        affected_conversation_ids:
          type: array
          description: IDs de las conversaciones afectadas por el cambio de estado
          items:
            type: integer
            description: ID de una conversación afectada
    ConversationClosedEvent:
      title: session.close
      type: object
      required:
        - event_type
        - event_id
        - timestamp
        - session
        - user
        - company
        - messages
        - user_session_keys
        - hsm
      description: >-
        Evento que se dispara cuando se cierra una conversación entre un usuario
        y la empresa
      properties:
        event_type:
          type: string
          enum:
            - session.close
          description: Tipo de evento, siempre 'session.close' para conversaciones cerradas
        event_id:
          type: string
          description: Identificador único del evento
        timestamp:
          type: string
          format: date-time
          description: Marca de tiempo del evento en formato ISO 8601
        session:
          $ref: '#/components/schemas/Session'
          description: Información de la sesión cerrada
        user:
          $ref: '#/components/schemas/UserInfo'
          description: Información del usuario
        company:
          $ref: '#/components/schemas/CompanyInfo'
          description: Información de la empresa
        messages:
          type: array
          description: Mensajes intercambiados durante la conversación
          items:
            $ref: '#/components/schemas/Message'
        user_session_keys:
          type: array
          description: Claves de sesión del usuario recopiladas durante la conversación
          items:
            $ref: '#/components/schemas/ExtendedUserSessionKey'
        hsm:
          $ref: '#/components/schemas/HSMInfo'
          nullable: true
          description: Información del HSM que inició la conversación (si aplica)
    DeploymentFailureEvent:
      title: deployment.failure
      type: object
      required:
        - event_type
        - event_id
        - timestamp
        - failure_reason
        - user
        - conversation_id
        - failed_at
        - user_session_keys
      description: >-
        Evento que se dispara cuando ocurre una falla en el despliegue de una
        conversación
      properties:
        event_type:
          type: string
          enum:
            - deployment.failure
          description: >-
            Tipo de evento, siempre 'deployment.failure' para fallas en
            despliegue
        event_id:
          type: string
          description: Identificador único del evento
        timestamp:
          type: string
          format: date-time
          description: Marca de tiempo del evento en formato ISO 8601
        failure_reason:
          type: string
          enum:
            - FAILURE
            - FAILURE_BY_HUMAN_HANDOVER
            - REVOKED
            - INVALID_PHONE
            - FAILURE_BY_RATE_LIMIT
            - COMPANY_RATE_LIMIT
            - FAILURE_BY_TIER_CAPACITY
            - MISSING_PARAMETER
            - PARAMETER_MISMATCH
            - FAILURE_BY_BLOCKED_CONTACT
            - FAILURE_BY_OPTOUT_CONTACT
            - INVALID_POLL
            - CHARACTER_LIMIT_HEADER
            - CHARACTER_LIMIT_BODY
            - FAILURE_BY_DISABLED_HSM
            - FAILURE_BY_SPAM_RATE_LIMIT
            - FAILURE_BY_EXPERIMENT_NUMBER
            - FAILURE_BY_UNABLE_TO_CONTACT
          description: Razón específica de la falla del despliegue
        user:
          $ref: '#/components/schemas/UserInfo'
          description: Información del usuario asociado al despliegue
        conversation_id:
          type: integer
          description: ID de la conversación relacionada con el despliegue
        failed_at:
          type: string
          format: date-time
          description: Marca de tiempo en que ocurrió la falla
        user_session_keys:
          type: array
          description: Claves de sesión del usuario recopiladas durante la conversación
          items:
            $ref: '#/components/schemas/ExtendedUserSessionKey'
    Session:
      type: object
      required:
        - external_id
        - closed_at
      properties:
        external_id:
          type: string
          description: ID externo único de la sesión
        closed_at:
          type: string
          format: date-time
          description: Fecha y hora en que se cerró la conversación
    UserInfo:
      type: object
      required:
        - country_code
        - cellphone
      properties:
        country_code:
          type: string
          description: Código de país del usuario
        cellphone:
          type: string
          description: Número de teléfono del usuario sin el código de país
    CompanyInfo:
      type: object
      required:
        - id
        - cellphone
      properties:
        id:
          type: integer
          description: ID de la empresa en Treble
        cellphone:
          type: string
          description: Número de teléfono de la empresa
    Message:
      type: object
      required:
        - sender
        - type
        - created_at
        - delivered_at
        - read_at
      properties:
        sender:
          type: string
          description: Quien envió el mensaje (usuario o empresa)
          enum:
            - user
            - company
        type:
          type: string
          description: Tipo de mensaje
          enum:
            - text
            - hsm
            - image
            - video
            - audio
            - document
            - location
        text:
          $ref: '#/components/schemas/TextMessage'
        hsm:
          $ref: '#/components/schemas/HSMMessage'
        image:
          $ref: '#/components/schemas/MediaContent'
        video:
          $ref: '#/components/schemas/MediaContent'
        audio:
          $ref: '#/components/schemas/MediaContent'
        document:
          $ref: '#/components/schemas/MediaContent'
        location:
          $ref: '#/components/schemas/LocationContent'
        created_at:
          type: string
          format: date-time
          description: Fecha y hora en que se creó el mensaje
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: Fecha y hora en que se entregó el mensaje
        read_at:
          type: string
          format: date-time
          nullable: true
          description: Fecha y hora en que se leyó el mensaje
    ExtendedUserSessionKey:
      type: object
      required:
        - key
        - value
      properties:
        key:
          type: string
          description: Nombre de la variable
        value:
          type: string
          description: Valor de la variable
        type:
          type: string
          nullable: true
          description: >-
            Tipo de la variable. Puede ser null o un tipo específico como
            'location'.
    HSMInfo:
      type: object
      required:
        - name
        - text
        - answers
        - header
        - footer
        - buttons
      properties:
        name:
          type: string
          description: Nombre o identificador del HSM
        text:
          type: string
          description: Texto principal del HSM
        answers:
          type: array
          description: Respuestas posibles para el HSM
          items:
            type: object
            required:
              - message
            properties:
              message:
                type: string
                description: Texto de la respuesta
        header:
          oneOf:
            - $ref: '#/components/schemas/HSMHeaderText'
            - $ref: '#/components/schemas/HSMHeaderMedia'
          nullable: true
          description: Encabezado del HSM (puede ser texto o multimedia)
        footer:
          type: string
          nullable: true
          description: Pie de página del HSM
        buttons:
          type: object
          required:
            - type
            - options
          properties:
            type:
              type: string
              enum:
                - actions
                - otp
              description: Categoría de botones
            options:
              type: array
              description: Opciones de botones
              items:
                oneOf:
                  - $ref: '#/components/schemas/HSMButtonQuickReply'
                  - $ref: '#/components/schemas/HSMButtonCallToAction'
                  - $ref: '#/components/schemas/HSMButtonOTP'
          nullable: true
          description: Botones del HSM
    TextMessage:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Contenido del mensaje de texto
    HSMMessage:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Contenido del mensaje HSM
    MediaContent:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          description: URL del archivo multimedia
        message:
          type: string
          description: Pie de foto o descripción del contenido multimedia
    LocationContent:
      type: object
      required:
        - latitude
        - longitude
      properties:
        latitude:
          type: number
          format: float
          description: Latitud de la ubicación
        longitude:
          type: number
          format: float
          description: Longitud de la ubicación
    HSMHeaderText:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - text
          description: Tipo de encabezado
        message:
          type: string
          description: Texto del encabezado
    HSMHeaderMedia:
      type: object
      required:
        - type
        - url
      properties:
        type:
          type: string
          enum:
            - image
            - video
            - document
          description: Tipo de medio del encabezado
        url:
          type: string
          description: URL del archivo multimedia del encabezado
    HSMButtonQuickReply:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - quick_reply
          description: Tipo de botón de respuesta rápida
        message:
          type: string
          description: Texto del botón de respuesta rápida
    HSMButtonCallToAction:
      type: object
      required:
        - type
        - message
        - subtype
      properties:
        type:
          type: string
          enum:
            - call_to_action
          description: Tipo de botón de llamada a la acción
        subtype:
          type: string
          enum:
            - website
            - phone
          description: Subtipo de botón de llamada a la acción
        url:
          type: string
          description: URL del botón de llamada a la acción si el subtype es website
        phone:
          type: string
          description: >-
            Número de teléfono del botón de llamada a la acción si el subtype es
            phone
    HSMButtonOTP:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - otp
          description: Tipo de botón de OTP
        message:
          type: string
          description: Texto del botón de OTP

````