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

# Conectar canal Meta WhatsApp

> Fluxo completo para conectar um canal META_WHATSAPP à API Oficial do WhatsApp

export const frontendUrl = 'https://app.hubmessage.io';

export const projectName = 'Hub Message';

## Visão geral

Após [criar um canal](/channels/create-channel) do tipo `META_WHATSAPP`, você precisa **conectá-lo** a um número do WhatsApp Business. Existem duas formas:

* **Pelo painel** — Fluxo guiado diretamente no [Dashboard](\{frontendUrl})
* **Via SDK + API** — Integre o fluxo de conexão no seu sistema

## Conexão pelo painel

A forma mais simples. Acesse o [Dashboard](\{frontendUrl}), selecione o canal criado e siga o fluxo de conexão guiado.

## Conexão via SDK + API

Use este fluxo quando quiser que o **seu usuário** conecte o canal de dentro do **seu sistema**, sem precisar acessar o painel do {projectName}.

O fluxo tem 3 etapas:

<Steps>
  <Step title="Frontend — Iniciar conexão com o SDK">
    No **frontend** da sua aplicação, use o SDK para iniciar o fluxo de conexão. O SDK vai abrir o processo de autenticação com o WhatsApp e retornar as informações necessárias.

    ```javascript theme={null}
    import HubMessage from '@hubmessage/connect';

    const client = HubMessage.newClient({
      publicKey: 'SUA_PUBLIC_KEY'
    });

    const response = await client.connect({
      channelId: 'ID_DO_CANAL'
    });

    // Envie o response para o seu backend
    ```

    <Tip>
      A `publicKey` pode ser exposta no frontend. Veja mais em [Autenticação](/authentication).
    </Tip>
  </Step>

  <Step title="Frontend → Backend — Enviar dados">
    O SDK retorna um objeto com as informações da conexão. Envie esses dados para o **backend** da sua aplicação:

    ```json theme={null}
    {
      "wabaId": "428083093730937",
      "phoneId": "123456789012345",
      "code": "ABC123DEF456",
      "coexistence": false
    }
    ```

    | Campo         | Tipo    | Descrição                                   |
    | ------------- | ------- | ------------------------------------------- |
    | `wabaId`      | string  | ID do WhatsApp Business Account selecionado |
    | `phoneId`     | string  | ID do número de telefone selecionado        |
    | `code`        | string  | Código de autorização gerado pelo WhatsApp  |
    | `coexistence` | boolean | Se o número está em modo de coexistência    |
  </Step>

  <Step title="Backend — Finalizar conexão via API">
    No **backend**, chame a API de conexão passando os dados recebidos do frontend:

    `POST /v1/channels/{channelId}/connect`

    ```bash theme={null}
    curl -X POST https://api.hubmessage.io/v1/channels/ID_DO_CANAL/connect \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer SUA_SECRET_KEY" \
      -d '{
        "wabaId": "428083093730937",
        "phoneId": "123456789012345",
        "code": "ABC123DEF456",
        "coexistence": false
      }'
    ```

    <Warning>
      Esta chamada deve ser feita no **backend**, pois utiliza a Secret Key que nunca deve ser exposta no frontend.
    </Warning>
  </Step>
</Steps>

## Fluxo resumido

```
Frontend (SDK)              →  Backend (API)

1. client.connect()
2. Usuário autentica
3. SDK retorna dados ----→  4. POST /v1/channels/{id}/connect
                               com wabaId, phoneId, code, coexistence
                            5. Canal conectado ✓
```

<Note>
  Após a conexão, o canal está pronto para enviar e receber mensagens. Use o `channelId` nos endpoints de [mensagens livres](/messages/introduction) e [templates](/templates/introduction).
</Note>


## OpenAPI

````yaml pt/channels/openapi-connect.json POST /v1/channels/{channelId}/connect
openapi: 3.1.0
info:
  title: Hub Message - Conectar Canal
  version: 1.0.0
servers:
  - url: https://api.hubmessage.io
security:
  - bearerAuth: []
paths:
  /v1/channels/{channelId}/connect:
    post:
      tags:
        - Canais
      summary: Conectar canal Meta WhatsApp
      description: >-
        Finaliza a conexão de um canal **META_WHATSAPP** com os dados retornados
        pelo SDK `@hubmessage/connect`. Exclusivo para canais da API Oficial do
        WhatsApp (Meta).
      operationId: connectMetaChannel
      parameters:
        - name: channelId
          in: path
          required: true
          description: ID do canal (obtido via Criar canal)
          schema:
            type: string
            example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConnectChannelRequest'
            example:
              wabaId: '428083093730937'
              phoneId: '123456789012345'
              code: ABC123DEF456
              coexistence: false
      responses:
        '200':
          description: Canal conectado com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
              example:
                success: true
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    ConnectChannelRequest:
      type: object
      required:
        - wabaId
        - phoneId
        - code
        - coexistence
      properties:
        wabaId:
          type: string
          description: ID do WhatsApp Business Account
        phoneId:
          type: string
          description: ID do número de telefone
        code:
          type: string
          description: Código de autorização gerado pelo WhatsApp
        coexistence:
          type: boolean
          description: Se o número está em modo de coexistência
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Indica se a operação foi realizada com sucesso
    Error:
      type: object
      properties:
        error:
          type: integer
        message:
          type: string
  responses:
    Unauthorized:
      description: Token inválido ou ausente.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: 401
            message: Unauthorized
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Secret Key gerada no painel de Segurança do Hub Message

````