> ## 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.

# Exemplos das Solicitações Webhook

> Este endpoint deve ser implementado no SEU servidor (por exemplo: https://seudominio.com/treble-webhooks). O Treble chamará este webhook para diferentes tipos de eventos. Você deve configurar a URL deste webhook no painel de administração do Treble.



## OpenAPI

````yaml open-api-files/treble-api-pt.json POST /treble-webhooks
openapi: 3.0.1
info:
  title: API do Treble Poll
  description: Documentação para o endpoint de implantação de polls no Treble
  version: 1.0.0
servers:
  - url: https://main.treble.ai
    description: Servidor principal do Treble
  - url: https://seudominio.com
    description: >-
      Servidor de exemplo para implementar os webhooks. Isso representa SEU
      servidor onde você deve implementar os endpoints que o Treble chamará.
security: []
tags:
  - name: Webhooks
    description: >-
      Endpoints que o Treble chamará no seu servidor. Estes não são endpoints
      reais que você possa chamar, mas uma representação dos webhooks que o
      Treble invocará no seu sistema.
paths:
  /treble-webhooks:
    post:
      tags:
        - Webhooks
      summary: Webhook - Eventos do Treble
      description: >-
        Este endpoint deve ser implementado no SEU servidor (por exemplo:
        https://seudominio.com/treble-webhooks). O Treble chamará este webhook
        para diferentes tipos de eventos. Você deve configurar a URL deste
        webhook no painel de administração do Treble.
      requestBody:
        description: >-
          Informações do evento. O tipo de evento é determinado pelo 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: Atualização de status 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: Conversa fechada
                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: Hello, how are you?
                      created_at: '2024-09-10T14:50:30.145000Z'
                      delivered_at: null
                      read_at: null
                    - sender: company
                      type: text
                      text:
                        message: Hello, how are you?, what's your name?
                      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: John
                      type: null
                    - key: location
                      value: >-
                        {"latitude": 4.5935443, "longitude": -72.0345404,
                        "address": "Carrera 7 #100-06"}
                      type: location
                  hsm:
                    name: welcome_message
                    text: >-
                      Olá {{1}}, bem-vindo ao nosso serviço de atendimento ao
                      cliente.
                    answers:
                      - message: Obrigado pela boas-vindas
                    header:
                      type: image
                      url: https://example.com/logo.jpg
                    footer: Responda a esta mensagem para continuar
                    buttons:
                      type: actions
                      options:
                        - type: quick_reply
                          message: Preciso de ajuda
                        - type: call_to_action
                          subtype: website
                          url: https://example.com/catalog
                          message: Ver catálogo
              deployment.failure:
                summary: Falha na implantação
                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: John
                      type: null
      responses:
        '200':
          description: Resposta bem-sucedida
          content:
            application/json:
              schema:
                type: object
                description: >-
                  Objeto JSON com a confirmação de recepção. O serviço deve
                  responder em menos de 5 segundos.
      servers:
        - url: https://{webhookUrl}
          description: Enter your webhook endpoint URL
          variables:
            webhookUrl:
              default: seudominio.com
              description: URL do seu servidor onde o webhook será implementado
components:
  schemas:
    HSMStatusUpdateEvent:
      title: hsm.status
      type: object
      required:
        - event_type
        - event_id
        - timestamp
        - status
        - name
        - affected_conversation_ids
      description: >-
        Evento que é disparado quando o estado de um HSM (Highly Structured
        Message) muda
      properties:
        event_type:
          type: string
          enum:
            - hsm.status
          description: >-
            Tipo de evento, sempre 'hsm.status' para atualizações 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: Novo estado do HSM
        name:
          type: string
          description: Nombre o identificador del HSM
        affected_conversation_ids:
          type: array
          description: IDs das conversas afetadas pela mudança de estado
          items:
            type: integer
            description: ID de uma conversa afetada
    ConversationClosedEvent:
      title: session.close
      type: object
      required:
        - event_type
        - event_id
        - timestamp
        - session
        - user
        - company
        - messages
        - user_session_keys
        - hsm
      description: >-
        Evento que é disparado quando uma conversa é fechada entre um usuário e
        a empresa
      properties:
        event_type:
          type: string
          enum:
            - session.close
          description: Tipo de evento, sempre 'session.close' para conversas fechadas
        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: Informação da sessão fechada
        user:
          $ref: '#/components/schemas/UserInfo'
          description: Informação do usuário
        company:
          $ref: '#/components/schemas/CompanyInfo'
          description: Informação da empresa
        messages:
          type: array
          description: Mensagens trocadas durante a conversa
          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: Informação do HSM que iniciou a conversa (se aplicável)
    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 é disparado quando ocorre uma falha na implantação de uma
        conversa
      properties:
        event_type:
          type: string
          enum:
            - deployment.failure
          description: >-
            Tipo de evento, sempre 'deployment.failure' para falhas na
            implantação
        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ão específica da falha da implantação
        user:
          $ref: '#/components/schemas/UserInfo'
          description: Informação do usuário associado à implantação
        conversation_id:
          type: integer
          description: ID da conversa relacionada à implantação
        failed_at:
          type: string
          format: date-time
          description: Marca de tempo em que ocorreu a falha
        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 da sessão
        closed_at:
          type: string
          format: date-time
          description: Data e hora em que a conversa foi fechada
    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 da empresa no Treble
        cellphone:
          type: string
          description: Número de telefone da empresa
    Message:
      type: object
      required:
        - sender
        - type
        - created_at
        - delivered_at
        - read_at
      properties:
        sender:
          type: string
          description: Quem enviou a mensagem (usuário ou empresa)
          enum:
            - user
            - company
        type:
          type: string
          description: Tipo de mensagem
          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: Data e hora em que a mensagem foi criada
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: Data e hora em que a mensagem foi entregue
        read_at:
          type: string
          format: date-time
          nullable: true
          description: Data e hora em que a mensagem foi lida
    ExtendedUserSessionKey:
      type: object
      required:
        - key
        - value
      properties:
        key:
          type: string
          description: Nome da variável
        value:
          type: string
          description: Valor da variável
        type:
          type: string
          nullable: true
          description: >-
            Tipo da variável. Pode ser null ou um tipo específico como
            'location'.
    HSMInfo:
      type: object
      required:
        - name
        - text
        - answers
        - header
        - footer
        - buttons
      properties:
        name:
          type: string
          description: Nome ou identificador do HSM
        text:
          type: string
          description: Texto principal do HSM
        answers:
          type: array
          description: Respostas possíveis para o HSM
          items:
            type: object
            required:
              - message
            properties:
              message:
                type: string
                description: Texto da resposta
        header:
          oneOf:
            - $ref: '#/components/schemas/HSMHeaderText'
            - $ref: '#/components/schemas/HSMHeaderMedia'
          nullable: true
          description: Cabeçalho do HSM (pode ser texto ou multimídia)
        footer:
          type: string
          nullable: true
          description: Rodapé do HSM
        buttons:
          type: object
          required:
            - type
            - options
          properties:
            type:
              type: string
              enum:
                - actions
                - otp
              description: Categoria de botões
            options:
              type: array
              description: Opções de botões
              items:
                oneOf:
                  - $ref: '#/components/schemas/HSMButtonQuickReply'
                  - $ref: '#/components/schemas/HSMButtonCallToAction'
                  - $ref: '#/components/schemas/HSMButtonOTP'
          nullable: true
          description: Botões do HSM
    TextMessage:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Conteúdo da mensagem de texto
    HSMMessage:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Conteúdo da mensagem HSM
    MediaContent:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          description: URL do arquivo multimídia
        message:
          type: string
          description: Legenda ou descrição do conteúdo multimídia
    LocationContent:
      type: object
      required:
        - latitude
        - longitude
      properties:
        latitude:
          type: number
          format: float
          description: Latitude da localização
        longitude:
          type: number
          format: float
          description: Longitude da localização
    HSMHeaderText:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - text
          description: Tipo de cabeçalho
        message:
          type: string
          description: Texto do cabeçalho
    HSMHeaderMedia:
      type: object
      required:
        - type
        - url
      properties:
        type:
          type: string
          enum:
            - image
            - video
            - document
          description: Tipo de mídia do cabeçalho
        url:
          type: string
          description: URL do arquivo multimídia do cabeçalho
    HSMButtonQuickReply:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - quick_reply
          description: Tipo de botão de resposta rápida
        message:
          type: string
          description: Texto do botão de resposta rápida
    HSMButtonCallToAction:
      type: object
      required:
        - type
        - message
        - subtype
      properties:
        type:
          type: string
          enum:
            - call_to_action
          description: Tipo de botão de chamada para ação
        subtype:
          type: string
          enum:
            - website
            - phone
          description: Subtipo de botão de chamada para ação
        url:
          type: string
          description: URL do botão de chamada para ação se o subtype for website
        phone:
          type: string
          description: >-
            Número de telefone do botão de chamada para ação se o subtype for
            phone
    HSMButtonOTP:
      type: object
      required:
        - type
        - message
      properties:
        type:
          type: string
          enum:
            - otp
          description: Tipo de botão de OTP
        message:
          type: string
          description: Texto do botão de OTP

````