Para crear y configurar un buzón de canal API en instalaciones de Chatwoot, sigue el paso descrito a continuación.

## Configura el canal API

**Paso 1.** Ve a Configuración → Buzones → “Agregar Buzón”.

![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCT2lUNVFVPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--7b7f67b095a98e003a8e33bb9e252f6b158dc484/adding-20an-20inbox-20in-20chatwoot.png)

**Paso 2.** Haz clic en el icono "API".

![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCT2VUNVFVPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--99015badc003b6e268c815135bc0f923a848b996/api-20channel-20inbox-20in-20chatwoot.png)

**Paso 3.** Proporciona un nombre para el canal y una URL de callback. Aquí tienes un ejemplo:

![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCT21UNVFVPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--93339388fa0383b9b51c8e3608d6560ac26da731/api-20channel-20settings.png)

**Paso 4.** "Agregar agentes" a tu buzón API.

![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCT3FUNVFVPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--023a79c856039bb35d0bca5541c33ab797b71675/adding-20agents-20to-20a-20chatwoot-20inbox.png)

La configuración del buzón está completa.

## Envía mensajes al canal API

Para enviar mensajes al canal API, asegúrate de comprender los siguientes modelos y la [nomenclatura](https://app.chatwoot.com/hc/chatwoot-user-guide-cloud-version/es/chatwoot-101/49624) utilizada en Chatwoot.

1. **Canal**: Un canal define el tipo de fuente de las conversaciones. Ej., Facebook, Twitter, API, etc.

2. **Buzón**: Puedes crear múltiples fuentes de conversaciones del mismo tipo de canal. Ej., Puedes tener más de una página de Facebook conectada a una cuenta de Chatwoot. Cada página se llama buzón en Chatwoot.

3. **Conversación**: Una conversación es una colección de mensajes.

4. **Contacto**: Cada conversación tiene una persona real asociada a ella, llamada contacto.

5. **Buzones de contacto**: Esta es la sesión de cada contacto en un buzón. Un contacto puede tener múltiples sesiones y múltiples conversaciones en el mismo buzón.

### ¿Cómo enviar un mensaje en un canal API?

Para enviar un mensaje en un canal API, crea un contacto, inicia una conversación y finalmente envía el mensaje.

Las API requieren el `api_access_token` en el encabezado de la solicitud. Puedes obtener este token visitando tu configuración de Perfil → Token de Acceso.

**1. Crear un contacto**

**Ref:** [Documentación de la API](https://www.chatwoot.com/developers/api/#operation/contactCreate)

Pasa el ID del buzón del canal API junto con los demás parámetros especificados. Esto creará una sesión para ti automáticamente. Una respuesta de ejemplo se vería como la siguiente.

```
{
  "email": "string",
  "name": "string",
  "phone_number": "string",
  "thumbnail": "string",
  "additional_attributes": {},
  "contact_inboxes": [
    {
      "source_id": "string",
      "inbox": {
        "id": 0,
        "name": "string",
        "website_url": "string",
        "channel_type": "string",
        "avatar_url": "string",
        "widget_color": "string",
        "website_token": "string",
        "enable_auto_assignment": true,
        "web_widget_script": "string",
        "welcome_title": "string",
        "welcome_tagline": "string",
        "greeting_enabled": true,
        "greeting_message": "string"
      }
    }
  ],
  "id": 0,
  "availability_status": "string"
}
```

Como puedes ver en la carga útil, podrás ver los `contact_inboxes` y cada `contact_inbox` tendrá un `source_id`. Source ID puede ser visto como el identificador de sesión. Utilizarás este `source_id` para crear una nueva conversación como se define a continuación.

**2. Crear una conversación**

**Ref:** [Documentación de la API](https://www.chatwoot.com/developers/api/#operation/newConversation)

Usa el `source_id` recibido en la llamada API anterior. Recibirás un ID de conversación que puede ser utilizado para crear un mensaje.

```
{
  "id": 0
}
```

**3. Crear un mensaje nuevo**

**Ref:** [Documentación de la API](https://www.chatwoot.com/developers/api/#operation/create-a-new-message-in-a-conversation)

Hay 2 tipos de mensajes.

1. **Entrante**: Los mensajes enviados por el usuario final se clasifican como mensajes entrantes.

2. **Saliente**: Los mensajes enviados por el agente se clasifican como mensajes salientes.

Si llamas a la API con el contenido correcto, recibirás una carga útil similar a esta:

```
{
    "id": 0,
    "content": "This is a incoming message from API Channel",
    "inbox_id": 0,
    "conversation_id": 0,
    "message_type": 0,
    "content_type": null,
    "content_attributes": {},
    "created_at": 0,
    "private": false,
    "sender": {
        "id": 0,
        "name": "Pranav",
        "type": "contact"
    }
}
```

Si todo es exitoso, verás la conversación en el panel como se muestra a continuación.

![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCT3VUNVFVPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--37c03d34a3acd1e62d222c2f24b6645ae2223078/api-20inbox.png)

Serás notificado cuando se cree un nuevo mensaje en la URL especificada al crear el canal API. Puedes leer sobre la carga útil del mensaje [aquí](https://www.chatwoot.com/docs/product/channels/api/receive-messages).

## Recibir mensajes usando URL de callback

Cuando se crea un mensaje nuevo en el canal API, recibirás una solicitud POST en la URL de Callback especificada al crear el canal API. La carga útil sería así.

Encuentra la lista completa de eventos soportados por el webhook [aquí](https://www.chatwoot.com/docs/product/others/webhook-events).

**Tipo de evento:** `message_created`

```
{
  "id": 0,
  "content": "This is a incoming message from API Channel",
  "created_at": "2020-08-30T15:43:04.000Z",
  "message_type": "incoming",
  "content_type": null,
  "content_attributes": {},
  "source_id": null,
  "sender": {
    "id": 0,
    "name": "contact-name",
    "avatar": "",
    "type": "contact"
  },
  "inbox": {
    "id": 0,
    "name": "API Channel"
  },
  "conversation": {
    "additional_attributes": null,
    "channel": "Channel::Api",
    "id": 0,
    "inbox_id": 0,
    "status": "open",
    "agent_last_seen_at": 0,
    "contact_last_seen_at": 0,
    "timestamp": 0
  },
  "account": {
    "id": 1,
    "name": "API testing"
  },
  "event": "message_created"
}
```

## Crear interfaces usando APIs cliente

Las APIs cliente disponibles para el canal API te ayudarán a construir interfaces orientadas al cliente para Chatwoot.

Estas APIs son útiles para casos como los listados a continuación.

1. Usar una interfaz de chat personalizada en lugar del widget de chat de Chatwoot.

2. Construir interfaces conversacionales en tus aplicaciones móviles.

3. Agregar Chatwoot a otras plataformas para las que Chatwoot no tenga un SDK oficial.

### Creando objetos de cliente

Puedes crear y recuperar objetos de datos de clientes usando el `inbox_identifier` y el `customer_identifier`.

**Identificador de Buzón**

Puedes obtener el `inbox_identifier` desde tu canal API -> Configuración -> Configuración.

**Identificador de Cliente**

El `customer_identifier` o `source_id` se puede obtener al crear el cliente utilizando la API de [crear](https://www.chatwoot.com/developers/api#operation/create-a-contact). Deberás almacenar este identificador en tu lado cliente para realizar más solicitudes en nombre del cliente. Esto se puede hacer en cookies, almacenamiento local, etc.

**APIs Disponibles**

Las APIs cliente disponibles están documentadas [aquí](https://www.chatwoot.com/developers/api#tag/Contacts-API). Algunas de las cosas que puedes hacer con las APIs son:

* Crear, Ver y Actualizar Contactos

* Crear y Listar Conversaciones

* Crear, Listar y Actualizar Mensajes

### Autenticación HMAC

Las APIs cliente también soportan [Autenticación HMAC](https://www.chatwoot.com/docs/product/channels/live-chat/sdk/identity-validation). El token HMAC del canal puede obtenerse ejecutando lo siguiente en tu consola de rails.

```
# reemplaza api_inbox_id con tu id de buzón
Inbox.find(api_inbox_id).channel.hmac_token
```

### Conectar a los WebSockets de Chatwoot

Para obtener actualizaciones en tiempo real desde el panel de agente, conéctate a los WebSockets de Chatwoot usando la siguiente URL.

```
<your installation url>/cable
```

### Autenticando tu conexión WebSocket

Después de suscribirte usando el `pubsub_token` del cliente, recibirás eventos dirigidos hacia tu objeto cliente. El `pubsub_token` se proporciona durante la llamada API de creación del cliente.

**Ejemplo**

```
const connection = new WebSocket('ws://localhost:3000/cable');
connection.send(JSON.stringify({ command:"subscribe", identifier: "{\\"channel\\":\\"RoomChannel\\",\\"pubsub_token\\":\\""+ customer_pubsub_token+"\\"}" }));
```

Encuentra la lista completa de eventos soportados por WebSockets [aquí](https://www.chatwoot.com/docs/product/others/websocket-events).

### Verificación de Webhook

Una vez que crees un canal API, generamos automáticamente un secreto que puedes usar para verificar la carga útil que recibe tu aplicación. Puedes leer más sobre la verificación de webhooks [aquí](https://www.chatwoot.com/hc/user-guide/articles/1677693021-how-to-use-webhooks#verifying-webhooks).

### Implementación

[He aquí un ejemplo](https://github.com/chatwoot/client-api-demo) de interfaz de chat construida sobre las APIs cliente.