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

# Como hospedar um bot do WhatsApp 24/7

> Hospede um bot do WhatsApp 24/7 na Square Cloud com whatsapp-web.js ou Baileys: escaneie o QR Code pelos logs, mantenha a sessão salva e faça o deploy.

export const RecommendedPlan = ({lang, plan, tier, cpu, appType, min}) => {
  const t = {
    'en': {
      q: <>Which plan should you choose for {appType}?</>,
      rec: p => <>We recommend the {p} plan: its <b>{tier} GB</b> of RAM and <b>{cpu} vCPU</b> handle most projects of this kind, with headroom for traffic spikes.</>,
      min: m => <> Lighter projects also run on the {m} plan.</>,
      pro: p => <> For larger projects, the {p} plan adds more RAM and CPU.</>
    },
    'pt-br': {
      q: <>Qual plano escolher para {appType}?</>,
      rec: p => <>Recomendamos o plano {p}: seus <b>{tier} GB</b> de RAM e <b>{cpu} vCPU</b> atendem a maioria dos projetos desse tipo, com folga para picos de tráfego.</>,
      min: m => <> Projetos mais leves também rodam no plano {m}.</>,
      pro: p => <> Para projetos maiores, o plano {p} oferece mais RAM e CPU.</>
    },
    'es': {
      q: <>¿Qué plan elegir para {appType}?</>,
      rec: p => <>Te recomendamos el plan {p}: sus <b>{tier} GB</b> de RAM y <b>{cpu} vCPU</b> cubren la mayoría de los proyectos de este tipo, con margen para picos de tráfico.</>,
      min: m => <> Los proyectos más ligeros también funcionan en el plan {m}.</>,
      pro: p => <> Para proyectos más grandes, el plan {p} ofrece más RAM y CPU.</>
    },
    'fr': {
      q: <>Quel plan choisir pour héberger {appType} ?</>,
      rec: p => <>Nous recommandons le plan {p} : ses <b>{tier} Go</b> de RAM et <b>{cpu} vCPU</b> suffisent pour la plupart des projets de ce type, avec une marge pour les pics de trafic.</>,
      min: m => <> Les projets plus légers fonctionnent aussi avec le plan {m}.</>,
      pro: p => <> Pour les projets plus importants, le plan {p} offre davantage de RAM et de CPU.</>
    },
    'de': {
      q: <>Welcher Plan eignet sich für {appType}?</>,
      rec: p => <>Wir empfehlen den {p}-Plan: <b>{tier} GB</b> RAM und <b>{cpu} vCPU</b> reichen für die meisten Projekte dieser Art, mit Reserven für Lastspitzen.</>,
      min: m => <> Kleinere Projekte laufen auch mit dem {m}-Plan.</>,
      pro: p => <> Für größere Projekte bietet der {p}-Plan mehr RAM und CPU.</>
    },
    'it': {
      q: <>Quale piano scegliere per {appType}?</>,
      rec: p => <>Ti consigliamo il piano {p}: i suoi <b>{tier}GB</b> di RAM e <b>{cpu}vCPU</b> bastano per la maggior parte dei progetti di questo tipo, con margine per i picchi di traffico.</>,
      min: m => <> I progetti più leggeri funzionano anche con il piano {m}.</>,
      pro: p => <> Per progetti più grandi, il piano {p} offre più RAM e CPU.</>
    },
    'ja': {
      q: <>{appType}にはどのプランを選べばよいですか？</>,
      rec: p => <>{p}プランをおすすめします。<b>{tier}GB</b>のRAMと<b>{cpu}vCPU</b>があれば、この種のプロジェクトの多くをトラフィックのピークにも余裕を持って動かせます。</>,
      min: m => <>軽量なプロジェクトは{m}プランでも動作します。</>,
      pro: p => <>より大規模なプロジェクトには、RAMとCPUが増える{p}プランをご検討ください。</>
    },
    'zh': {
      q: <>托管{appType}应该选择哪个套餐？</>,
      rec: p => <>我们推荐 {p} 套餐：<b>{tier}GB</b> RAM 和 <b>{cpu}vCPU</b> 足以运行大多数此类项目，并能从容应对流量高峰。</>,
      min: m => <>较轻量的项目也可以在 {m} 套餐上运行。</>,
      pro: p => <>对于更大的项目，{p} 套餐提供更多 RAM 和 CPU。</>
    }
  };
  const siteLang = t[lang] ? lang : 'en';
  const c = t[siteLang];
  const pay = (name, query) => <a href={`https://squarecloud.app/${siteLang}/pay?${query}`}>{name}</a>;
  const isPro = plan.toLowerCase() === 'pro';
  return <Note>
      <b>{c.q}</b><br />
      {c.rec(pay(plan, `plan=${plan.toLowerCase()}&tier=${tier}`))}
      {min ? c.min(pay(min, `plan=${min.toLowerCase()}`)) : null}
      {isPro ? null : c.pro(pay('Pro', 'plan=pro'))}
    </Note>;
};

export const appType_0 = "um bot do WhatsApp"

## Introdução

Para desenvolver e hospedar {appType_0} na Square Cloud, siga a sequência de configurações e pré-requisitos abaixo.
Este guia cobre todo o processo, da configuração inicial ao deploy em produção.

### Pré-requisitos

* **Conta Square Cloud**: Cadastre-se através da [página de cadastro](https://squarecloud.app/pt-br/signup) usando seu e-mail.
* **Plano ativo**: Garante recursos dedicados e desempenho otimizado para seu aplicativo. Confira nossos [planos disponíveis](https://squarecloud.app/pt-br/pricing) e escolha o mais adequado às suas necessidades.

<RecommendedPlan appType="bots do WhatsApp" plan="Standard" tier="4" cpu="4" min="Hobby" lang="pt-br" />

Este guia usa o [runtime Node.js](/pt-br/articles/getting-started-with-nodejs).

## Crie o projeto

Você precisa do WhatsApp instalado no seu celular para vincular o bot à sua conta. Se você não tem o app, visite o [site oficial do WhatsApp](https://www.whatsapp.com/download) para download e configuração.

1. **Verificação do Node.js**: Confirme se o Node.js está instalado em seu sistema. Caso contrário, baixe-o no [site oficial do Node.js](https://nodejs.org/).

2. **Inicialização do projeto**: Configure um novo projeto Node.js executando o comando de inicialização:

```bash Terminal theme={"system"}
npm init -y
```

3. **Instalação de dependências**: Instale as bibliotecas essenciais para a funcionalidade do bot:

```bash Terminal theme={"system"}
npm install whatsapp-web.js qrcode-terminal
```

## Desenvolva o bot

Crie o arquivo `index.js` com a estrutura base do bot:

```javascript index.js theme={"system"}
// Importa os módulos necessários
const { Client, LocalAuth } = require("whatsapp-web.js");
const qrcode = require("qrcode-terminal");

// Cria uma nova instância do cliente WhatsApp
const client = new Client({
  // Salva a sessão na pasta .wwebjs_auth, para que os reinícios não peçam um novo QR Code
  authStrategy: new LocalAuth(),
  puppeteer: {
    // Roda o Chrome em modo headless (sem interface gráfica)
    headless: true,
    args: [
      // Desabilita recursos de sandboxing do Chrome
      // Necessário para execução em ambientes conteinerizados
      "--no-sandbox",
      // Flag adicional de sandboxing para desabilitar setuid sandbox
      "--disable-setuid-sandbox",
    ],
  },
});

// Listener de evento para geração do QR Code
client.on("qr", (qr) => {
  // Imprime o QR Code nos logs, para você escaneá-lo pelo dashboard da Square Cloud
  qrcode.generate(qr, { small: true });
  console.log("Escaneie o QR Code acima no WhatsApp: Aparelhos conectados > Conectar um aparelho");
});

// Listener de evento para cliente pronto
client.on("ready", () => {
  // Log de confirmação quando a sessão do WhatsApp Web é estabelecida
  console.log("Cliente WhatsApp inicializado com sucesso!");
});

// Listener de evento para mensagens criadas
client.on("message_create", (msg) => {
  // Log do conteúdo da mensagem no console
  console.log("Mensagem recebida:", msg.body);

  // Implementação de comando de teste
  if (msg.body === "!ping") {
    // Resposta automática para o comando ping
    msg.reply("pong - Bot funcionando corretamente!");
  }
});

// Inicializa o cliente WhatsApp
client.initialize();
```

## Configure a Square Cloud

Crie um arquivo `squarecloud.app` na raiz do projeto, ao lado do `index.js`. Ele diz à Square Cloud como rodar o seu bot:

```systemd squarecloud.app theme={"system"}
DISPLAY_NAME=My WhatsApp Bot
MAIN=index.js
MEMORY=1024
VERSION=recommended
AUTORESTART=true
```

* `MEMORY` é a RAM do bot em MB. O whatsapp-web.js roda um navegador Chromium headless, então dê a ele pelo menos 1024 MB.
* `AUTORESTART=true` inicia o bot de novo se ele travar. Veja [como funciona o auto restart](https://help.squarecloud.app/pt-br/article/como-usar-o-auto-restart-na-square-cloud-mdyj38/).
* Não há `SUBDOMAIN`: o bot não serve páginas web.

Veja a [referência do arquivo de configuração](/pt-br/getting-started/config-file) para todos os campos.

## O que vai no ZIP

* O `index.js` e os seus outros arquivos de código.
* `package.json`.
* `squarecloud.app`.

Deixe a `node_modules` de fora: a Square Cloud instala as suas dependências quando o bot inicia. Deixe de fora também as pastas `.wwebjs_auth` e `.wwebjs_cache` que uma execução no seu computador cria, para que o bot vincule a própria sessão na Square Cloud. Se você faz o upload pela CLI, liste as duas pastas no seu arquivo [`squarecloud.ignore`](/pt-br/getting-started/squarecloud-ignore).

## Faça o deploy e verifique

Crie o ZIP descrito acima e faça o upload:

### Via dashboard

<Steps>
  <Step title="Acesse a página de upload">
    Acesse a [página de upload](https://squarecloud.app/pt-br/dashboard/new) e envie seu arquivo zip.
  </Step>

  <Step title="Configure seu ambiente">
    Após fazer o upload do seu arquivo zip, você precisará configurar o nome, o arquivo principal ou o ambiente de execução e outras configurações do seu projeto.\
    Se você estiver enviando um projeto web, certifique-se de selecionar "Publicação na Web" e definir um subdomínio para o seu projeto.
  </Step>

  <Step title="Faça o deploy do projeto">
    Por fim, clique no botão "Deploy" para hospedar seu projeto na Square Cloud.
    Após o deploy, você poderá monitorar o status e os registros do seu projeto no dashboard.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/dashboard/uploading-pt-br.gif" alt="Enviando aplicação para a Square Cloud" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Step>

  <Step title="Confirme que seu app está no ar">
    Seu primeiro deploy geralmente leva menos de um minuto. No [dashboard](https://squarecloud.app/pt-br/dashboard), aguarde o status da sua aplicação mudar para em execução e verifique os registros em busca de erros de inicialização.\
    Se você fez deploy de um site ou API, abra `https://<seu-subdominio>.squareweb.app` no navegador: você deve ver sua aplicação respondendo. Se você fez deploy de um bot, envie um comando para confirmar que ele está online.
    <Tip>Seu app não está iniciando? Veja o [guia de solução de problemas](/pt-br/platform/troubleshooting/app-wont-start) para as causas e correções mais comuns.</Tip>
  </Step>
</Steps>

### Via CLI

Para usar esse método, seu projeto precisa de um arquivo de configuração chamado `squarecloud.app` na raiz. Ele informa à Square Cloud como executar a sua aplicação.

<Card title="Guia do arquivo de configuração" icon="link" href="/pt-br/getting-started/config-file">
  Saiba como criar o arquivo de configuração `squarecloud.app` que define o ambiente da sua aplicação.
</Card>

<Steps>
  <Step title="Instale a CLI">
    Instale a [CLI da Square Cloud](/pt-br/cli-reference/installation). Se você já a tem, execute o mesmo comando para atualizá-la:

    <CodeGroup>
      ```bash macOS, Linux e WSL theme={"system"}
      curl -fsSL https://cli.squarecloud.app/install | bash
      ```

      ```bash Windows com npm theme={"system"}
      npm install -g @squarecloud/cli@latest
      ```
    </CodeGroup>
  </Step>

  <Step title="Faça login">
    Execute o comando abaixo. Ele abre o seu navegador: aprove o login lá e a CLI está pronta. Não há nenhuma chave de API para copiar. Para scripts e CI, veja [autenticação da CLI](/pt-br/cli-reference/authentication).

    ```bash theme={"system"}
    squarecloud auth login
    ```
  </Step>

  <Step title="Envie o seu projeto">
    Na pasta do seu projeto, execute o comando abaixo. A CLI compacta a pasta atual, deixando de fora o que o [`squarecloud.ignore`](/pt-br/getting-started/squarecloud-ignore) lista, e faz o upload:

    ```bash theme={"system"}
    squarecloud upload
    ```

    Para enviar um zip que você mesmo criou, passe-o com `--file`:

    ```bash theme={"system"}
    squarecloud upload --file <caminho/para/zip>
    ```
  </Step>

  <Step title="Confirme que seu app está no ar">
    Seu primeiro deploy geralmente leva menos de um minuto. Verifique o status e os registros da sua aplicação diretamente pelo terminal:

    ```bash theme={"system"}
    squarecloud app status
    squarecloud app logs
    ```

    Se você fez deploy de um site ou API, abra `https://<seu-subdominio>.squareweb.app` no navegador: você deve ver sua aplicação respondendo. Se você fez deploy de um bot, envie um comando para confirmar que ele está online.
    <Tip>Seu app não está iniciando? Veja o [guia de solução de problemas](/pt-br/platform/troubleshooting/app-wont-start) para as causas e correções mais comuns.</Tip>
  </Step>
</Steps>

### Vincule a sua conta do WhatsApp

Abra os registros da aplicação no dashboard da Square Cloud. No primeiro boot, o bot imprime um QR Code ali: no seu celular, abra o WhatsApp, vá em **Aparelhos conectados** > **Conectar um aparelho** e escaneie-o. A mensagem `Cliente WhatsApp inicializado com sucesso!` confirma que a sessão está ativa. Em seguida, envie `!ping` de outro número para a conta do WhatsApp vinculada e confirme que ele responde com `pong - Bot funcionando corretamente!`.

O `LocalAuth` salva a sessão na pasta `.wwebjs_auth`, então os reinícios reconectam sem um novo QR Code. Para vincular outro número, apague essa pasta e reinicie a aplicação.

## Erros comuns

### O QR Code não pode ser escaneado

O QR Code é desenhado com caracteres de texto, e o WhatsApp o substitui periodicamente, então escaneie o mais recente. Se o seu celular não conseguir lê-lo, diminua o zoom até o código inteiro caber na tela, ou mude o dashboard para o tema escuro.

### O login parou de funcionar depois de uma atualização do WhatsApp Web

Atualize a biblioteca com `npm install whatsapp-web.js@latest` e faça o deploy de novo. Evite fixar uma versão antiga do WhatsApp Web com a opção `webVersionCache`: versões desatualizadas costumam quebrar o login.

### O bot fica sem memória

O whatsapp-web.js roda um navegador Chromium headless, que precisa de memória. Mantenha a `MEMORY` em 1024 MB ou mais, ou mude para o [Baileys](#use-o-baileys-em-vez-do-whatsapp-webjs), que roda sem navegador.

## Use o Baileys em vez do whatsapp-web.js

O [Baileys](https://github.com/WhiskeySockets/Baileys) é uma biblioteca alternativa que se conecta diretamente à API multi-dispositivo do WhatsApp via WebSocket, sem iniciar um navegador headless. Como não há uma instância do Chromium/Puppeteer para rodar, ele usa significativamente menos RAM do que o whatsapp-web.js.

O Baileys salva sua sessão (o arquivo `creds.json` e as chaves) na pasta `auth` por meio do `useMultiFileAuthState`. A Square Cloud mantém os arquivos da sua aplicação entre reinícios, então você só precisa escanear o QR Code de novo se sair da conta ou apagar essa pasta. Assim como a `.wwebjs_auth`, deixe uma pasta `auth` local fora do seu ZIP.

1. Instale a biblioteca:

```bash Terminal theme={"system"}
npm install @whiskeysockets/baileys qrcode-terminal
```

2. Crie um arquivo `index.js` usando `makeWASocket` e `useMultiFileAuthState` para carregar e persistir a sessão:

```javascript index.js theme={"system"}
const { makeWASocket, useMultiFileAuthState } = require("@whiskeysockets/baileys");
const qrcode = require("qrcode-terminal");

async function startBot() {
  // Carrega (ou cria) o estado de autenticação a partir da pasta "auth".
  // A Square Cloud mantém essa pasta entre reinícios, então a sessão sobrevive.
  const { state, saveCreds } = await useMultiFileAuthState("auth");

  const sock = makeWASocket({
    auth: state,
  });

  // Persiste as credenciais atualizadas sempre que o Baileys as renovar
  sock.ev.on("creds.update", saveCreds);

  // Imprime o QR Code no primeiro login e reconecta quando o socket fecha
  sock.ev.on("connection.update", ({ connection, qr, lastDisconnect }) => {
    if (qr) {
      // Imprime o QR Code nos logs, para você escaneá-lo pelo dashboard da Square Cloud
      qrcode.generate(qr, { small: true });
      console.log("Escaneie o QR Code acima no WhatsApp: Aparelhos conectados > Conectar um aparelho");
    }
    if (connection === "close") {
      const loggedOut = lastDisconnect?.error?.output?.statusCode === 401;
      if (!loggedOut) startBot();
    }
  });

  // Responde a um comando básico
  sock.ev.on("messages.upsert", async ({ messages }) => {
    const msg = messages[0];
    if (!msg.message || msg.key.fromMe) return;

    if (msg.message.conversation === "!ping") {
      await sock.sendMessage(msg.key.remoteJid, { text: "pong - Bot funcionando corretamente!" });
    }
  });
}

startBot();
```

Como o Baileys não precisa de um navegador, seu arquivo de configuração na Square Cloud pode usar um valor de `MEMORY` menor do que o exemplo com whatsapp-web.js acima:

```systemd squarecloud.app theme={"system"}
DISPLAY_NAME=My WhatsApp Bot
MAIN=index.js
MEMORY=512
VERSION=recommended
AUTORESTART=true
```

## Próximos passos

<CardGroup cols={3}>
  <Card title="A aplicação não inicia" icon="triangle-exclamation" href="/pt-br/platform/troubleshooting/app-wont-start">
    Corrija módulos faltando, erros de memória e outras falhas na inicialização.
  </Card>

  <Card title="Evolution API" icon="comment" href="/pt-br/tutorials/how-to-deploy-evolution-api">
    Rode uma API de WhatsApp que gerencia várias instâncias ao mesmo tempo.
  </Card>

  <Card title="Hospedagem de bots" icon="robot" href="/pt-br/services/bots">
    O que a Square Cloud oferece para bots que rodam 24/7.
  </Card>
</CardGroup>

Para saber mais sobre o whatsapp-web.js, consulte a [documentação oficial do whatsapp-web.js](https://wwebjs.dev/).

## Contate-nos

Se você continuar enfrentando **dificuldades técnicas**, nossa **equipe de suporte especializada** está disponível para auxiliá-lo. [**Entre em contato conosco**](https://squarecloud.app/pt-br/support) e teremos prazer em ajudá-lo a resolver qualquer questão: a qualidade do suporte é uma grande parte do motivo pelo qual desenvolvedores avaliam a Square Cloud com [**4,9/5 em 402 avaliações**](https://www.trustpilot.com/review/squarecloud.app) no Google e Trustpilot.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.