# Especificações das mensagens do Chatlayer

Chatlayer.ai suporta diferentes tipos de mensagens de chat, cada uma com sua própria estrutura de objeto. Mensagens de chat podem ser enviadas:

* Na resposta do plugin da API
* Do seu [webhook](/chatlayer-documentation-pt-br/channels/all-channels/webhook-api.md) para o Chatlayer.ai

Cada mensagem tem dois campos obrigatórios:

* **type**: o tipo da mensagem (carousel, buttons, list, media, text, …)
* **config**: a configuração da mensagem

## Texto

Uma mensagem de texto inclui uma simples mensagem de texto do bot.

**Formato da requisição**:

```javascript
{
  "senderId": "a7355930-fa92-11e7-8308-2f056e75d1ee",
  "message":  {
    "text": "Hi, I'm a chatbot"
  },
  "messageCounter": 1,
  "verifyToken": "8wMsLZkdDPT64nqh"
}
```

| **Propriedade** | **Valor** | **Descrição**                   |
| --------------- | --------- | ------------------------------- |
| text            | string    | A mensagem de teste do usuário. |

## Modelo de Botão

Um modelo de botão inclui uma simples mensagem de texto do bot e um array de objetos botão.

**Formato da requisição**:

```javascript
{
  "senderId": "a7355930-fa92-11e7-8308-2f056e75d1ee",
  "message":  {
    "attachment": {
      "type": "template",
      "payload": {
        "template_type": "button",
        "text": "Hello, in which language can I help you?",
        "buttons": [
          {
            "type": "postback",
            "title": "Nederlands",
            "payload": "437a034cde170b50de1b6a87d1cba104e39b1f6e"
          },
          {
            "type": "postback",
            "title": "English",
            "payload": "a6a318dd6afe997f282b3c7472e038a2e0f4046a"
          },
        ]
      }
    }
  },
  "messageCounter": 1,
  "verifyToken": "8wMsLZkdDPT64nqh"
}
```

**Objeto de mensagem para modelo de botão**:

| **Propriedade** | **Valor** | **Descrição**        |
| --------------- | --------- | -------------------- |
| attachment      | object    | O objeto attachment. |

**Objeto de attachment**:

| **Propriedade** | **Valor** | **Descrição**                                                                       |
| --------------- | --------- | ----------------------------------------------------------------------------------- |
| type            | string    | O tipo de attachment (template)                                                     |
| payload         | object    | O objeto payload do attachment. A estrutura do objeto depende do tipo de attachment |

**Objeto payload do attachment**:

| **Propriedade** | **Valor**         | **Descrição**                                                    |
| --------------- | ----------------- | ---------------------------------------------------------------- |
| template\_type  | string            | O tipo de template (button)                                      |
| text            | string (opcional) | O texto acima dos botões (apenas para o tipo de template button) |
| buttons         | array             | Um array de objetos botão                                        |

**Objeto botão**:

| **Propriedade** | **Valor**                                                                        | **Descrição**                                                                                                                                                              |
| --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type            | string                                                                           | O tipo do botão (web\_url - postback - phone\_number - element\_share)                                                                                                     |
| title           | string                                                                           | A legenda do botão                                                                                                                                                         |
| payload         | string (conterá o número de telefone quando o tipo for phone\_number) - opcional | <p>O payload do botão. Apenas para botões do tipo postback.<br>Isto é um <strong>Identificador opaco</strong> por favor não tente alterar ou extrair significado dele.</p> |
| url             | string - opcional                                                                | A url do botão. Apenas para botões do tipo url                                                                                                                             |

## Respostas rápidas

Uma mensagem de resposta rápida inclui uma simples mensagem de texto do bot e um array de objetos de resposta rápida.

**Formato da requisição**:

```javascript
{
  "senderId": "a7355930-fa92-11e7-8308-2f056e75d1ee",
  "message":  {
    "text": "Hello, in which language can I help you?",
    "quick_replies": [
      {
        "content_type": "text",
        "title": "Nederlands",
        "payload": "c3e30be2f30687fea0ae419acaeb9d77261631a9",
        "image_url": "https://domain/logo.png"
      },
      {
        "content_type": "text",
        "title": "English",
        "payload": "2e29412e82c8eea8c8b0c170661070d28929a900",
        "image_url": "https://domain/logo.png"
      },
    ]
  },
  "messageCounter": 1,
  "verifyToken": "8wMsLZkdDPT64nqh"
}
```

**Objeto de mensagem para respostas rápidas**:

| **Propriedade** | **Valor** | **Descrição**                          |
| --------------- | --------- | -------------------------------------- |
| text            | string    | O texto antes das respostas rápidas.   |
| quick\_replies  | array     | Um array de objetos de resposta rápida |

**Objeto de resposta rápida**:

| **Propriedade** | **Valor** | **Descrição**                                                                                                                                   |
| --------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| content\_type   | string    | O tipo de conteúdo da resposta rápida (text)                                                                                                    |
| title           | string    | A legenda do botão                                                                                                                              |
| payload         | string    | <p>O payload da resposta rápida.<br>Isto é um <strong>Identificador opaco</strong> por favor não tente alterar ou extrair significado dele.</p> |

## Modelo genérico

Um modelo genérico (carrossel) inclui uma lista de elementos do template genérico. O elemento do template genérico é uma mensagem estruturada simples que inclui um título, subtítulo, imagem e até três botões

**Formato da requisição**:

```javascript
{
  "senderId": "a7355930-fa92-11e7-8308-2f056e75d1ee",
  "message":  {
    "attachment": {
      "type": "template",
      "payload": {
        "template_type": "generic",
        "elements": [
          {
             "title": "Language",
             "subtitle": "Please set your language",
             "image_url": "https://domain/lang.png",
             "item_url": "https://domain/lang",
             "buttons": [
               {
                 "type": "postback",
                 "title": "Nederlands",
                 "payload": "f0512bd2fcddc53963056dc0d63b52b8caa902ff"
               },
               {
                 "type": "postback",
                 "title": "English",
                 "payload": "4562ae76c34a13647fab90425c68a486b8acf356"
               },
            ]
          }
        ]
      }
    }
  },
  "messageCounter": 1,
  "verifyToken": "8wMsLZkdDPT64nqh"
}
```

**Objeto de mensagem para template genérico**:

| **Propriedade** | **Valor** | **Descrição**        |
| --------------- | --------- | -------------------- |
| attachment      | object    | O objeto attachment. |

**Objeto de attachment**:

| **Propriedade** | **Valor** | **Descrição**                                                                       |
| --------------- | --------- | ----------------------------------------------------------------------------------- |
| type            | string    | O tipo de attachment (template)                                                     |
| payload         | object    | O objeto payload do attachment. A estrutura do objeto depende do tipo de attachment |

**Objeto payload do attachment**:

| **Propriedade** | **Valor** | **Descrição**                                                   |
| --------------- | --------- | --------------------------------------------------------------- |
| template\_type  | string    | O tipo de template (generic)                                    |
| elements        | array     | Um array de elementos do template genérico (cards do carrossel) |

**Objeto de elemento do template genérico**:

| **Propriedade** | **Valor** | **Descrição**                                                                                                |
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------ |
| title           | string    | O título do card do carrossel                                                                                |
| subtitle        | string    | O subtítulo do card do carrossel                                                                             |
| image\_url      | string    | A imagem do card do carrossel                                                                                |
| item\_url       | string    | A url do card do carrossel. Quando o usuário clica na imagem a página web abre em uma nova aba do navegador. |
| buttons         | array     | Um array de objetos botão                                                                                    |

**Objeto botão**:

| **Propriedade** | **Valor**                                                                        | **Descrição**                                                                                                                                                              |
| --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type            | string                                                                           | O tipo do botão (web\_url - postback - phone\_number - element share)                                                                                                      |
| title           | string                                                                           | A legenda do botão                                                                                                                                                         |
| payload         | string (conterá o número de telefone quando o tipo for phone\_number) - opcional | <p>O payload do botão. Apenas para botões do tipo postback.<br>Isto é um <strong>Identificador opaco</strong> por favor não tente alterar ou extrair significado dele.</p> |
| url             | string - opcional                                                                | A url do botão. Apenas para botões do tipo url                                                                                                                             |

## Modelo de lista

O modelo de lista é uma lista de 2-4 itens estruturados com um botão global opcional exibido na parte inferior. Cada item pode conter uma imagem em miniatura, título, subtítulo e um botão. Você também pode especificar um objeto default\_action que define uma URL que será aberta quando o item for tocado.

**Formato da requisição**:

```javascript
{
  "senderId": "a7355930-fa92-11e7-8308-2f056e75d1ee",
  "message":  {
    "attachment": {
      "type": "template",
      "payload": {
        "template_type": "list",
        "elements": [
          {
             "title": "Language",
             "subtitle": "Select your language",
             "image_url": "https://domain/lang.png",
             "default_action": {
                "type": "web_url",
                "url": "default_url"
              }
             "buttons": [
               {
                 "type": "postback",
                 "title": "Nederlands",
                 "payload": "76601d56d0619ef87552bbfbbfcd714c4fda513b"
               }
            ]
          }
        ],
        "buttons": []
      }
    }
  },
  "messageCounter": 1,
  "verifyToken": "8wMsLZkdDPT64nqh"
}
```

**Objeto de mensagem para template de lista**:

| **Propriedade** | **Valor** | **Descrição**        |
| --------------- | --------- | -------------------- |
| attachment      | object    | O objeto attachment. |

**Objeto de attachment**:

| **Propriedade** | **Valor** | **Descrição**                                                                       |
| --------------- | --------- | ----------------------------------------------------------------------------------- |
| type            | string    | O tipo de attachment (template)                                                     |
| payload         | object    | O objeto payload do attachment. A estrutura do objeto depende do tipo de attachment |

**Objeto payload do attachment**:

| **Propriedade** | **Valor** | **Descrição**                                 |
| --------------- | --------- | --------------------------------------------- |
| template\_type  | string    | O tipo de template (list)                     |
| elements        | array     | Um array de elementos da lista                |
| buttons         | array     | Um array de objetos de botões gerais da lista |

**Objeto de elemento do template de lista**:

| **Propriedade** | **Valor** | **Descrição**                                         |
| --------------- | --------- | ----------------------------------------------------- |
| title           | string    | O título do card do carrossel                         |
| subtitle        | string    | O subtítulo do card do carrossel                      |
| image\_url      | string    | A imagem do card do carrossel                         |
| default\_action | object    | A ação padrão quando o usuário toca no item da lista. |
| buttons         | array     | Um array de objetos de botões do item da lista        |

**Objeto de ação padrão**:

| **Propriedade** | **Valor** | **Descrição**                                                                                                       |
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------- |
| type            | string    | O tipo de ação (web\_url)                                                                                           |
| url             | string    | A URL da ação. Quando o usuário toca no elemento da lista essa página web será aberta em uma nova aba do navegador. |

**Objeto botão**:

| **Propriedade** | **Valor**                                            | **Descrição**                                                                                                                                                              |
| --------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type            | string                                               | O tipo do botão (web\_url - postback - phone\_numberl - element share)                                                                                                     |
| title           | string                                               | A legenda do botão                                                                                                                                                         |
| payload         | <p></p><p>string (tipo phone\_number) - opcional</p> | <p>O payload do botão. Apenas para botões do tipo postback.<br>Isto é um <strong>Identificador opaco</strong> por favor não tente alterar ou extrair significado dele.</p> |
| url             | string - opcional                                    | A url do botão. Apenas para botões do tipo url                                                                                                                             |

## Attachment

Um attachment representa um arquivo como imagens e vídeo.

**Formato da requisição**:

```javascript
{
  "senderId": "a7355930-fa92-11e7-8308-2f056e75d1ee",
  "message":  {
    "attachment": {
      "type": "image"
      "payload": {
        "url": "image_url",
      }
    }
  },
  "messageCounter": 1,
  "verifyToken": "8wMsLZkdDPT64nqh"
}
```

**Objeto de mensagem para attachment**:

| **Propriedade** | **Valor** | **Descrição**        |
| --------------- | --------- | -------------------- |
| attachment      | object    | O objeto attachment. |

**Objeto de attachment**:

| **Propriedade** | **Valor** | **Descrição**                                                                       |
| --------------- | --------- | ----------------------------------------------------------------------------------- |
| type            | string    | O tipo de attachment (image-video)                                                  |
| payload         | object    | O objeto payload do attachment. A estrutura do objeto depende do tipo de attachment |

**Objeto payload do attachment**:

| **Propriedade** | **Valor** | **Descrição**       |
| --------------- | --------- | ------------------- |
| url             | string    | A url do attachment |

## Rich text

Rich text é texto ao qual se aplica formatação. A formatação possível é negrito, itálico, sublinhado, hyperlink para URL, hyperlink para bloco, título (1-4), lista com marcadores e lista ordenada.

**Formato da requisição**:

```javascript
{
  senderId: 'a7355930-fa92-11e7-8308-2f056e75d1ee',
  verifyToken: 'e63131e1-459f-45aa-be42-666e1e4ef197',
  message: {
    template: {
      __typename: 'RichTextMessageTemplate',
      order: 1,
      configTranslations: [Object]
    },
    richText: '<p>Paragraph</p>\n' +
      '<p><strong>Bold</strong></p>\n' +
      '<p><em>Italic</em></p>\n' +
      '<p><u>Underlined</u></p>\n' +
      '<p><a href="https://www.sinch.com" target="_blank" rel="noopener noreferrer">Hyperlink</a></p>\n' +
      '<p><a href="f36f9056-2659-4d59-8940-4e9c7d3855a3" target="_blank" rel="noopener noreferrer">Go to bot dialog</a></p>\n' +
      '<h1>Heading 1</h1>\n' +
      '<h2>Heading 2</h2>\n' +
      '<h3>Heading 3</h3>\n' +
      '<h4>Heading 4</h4>\n' +
      '<ul>\n' +
      '<li>Bulleted list</li>\n' +
      '</ul>\n' +
      '<ol>\n' +
      '<li>Ordered list</li>\n' +
      '</ol>',
    type: 'richText'
  },
  messageCounter: 2,
  nlp: { intent: { name: null, score: null } },
  dialogstate: {
    id: 'f444b20b-370a-434d-af00-822cbce056ec',
    name: 'Introduction',
    label: null
  }
}
```

**Objeto de mensagem para attachment**:

| **Propriedade** | **Valor** | **Descrição**        |
| --------------- | --------- | -------------------- |
| richText        | string    | A mensagem rich text |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chatlayer.ai/chatlayer-documentation-pt-br/integrateandcode/chat-message-structure-for-apis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
