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

> Hospede um bot do Slack na Square Cloud com Bolt para JavaScript ou Python: crie os tokens, rode em Socket Mode sem URL pública, faça o deploy e teste.

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 Slack"

## 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 Slack" 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) ou o [runtime Python](/pt-br/articles/getting-started-with-python).

## Crie o projeto

Para criar um bot do Slack, você precisará de uma conta e de permissões para criar apps no Slack. Crie ou acesse sua conta no [Slack](https://slack.com/) antes de seguir os próximos passos.

### Aplicação de bot no Slack

1. Acesse o [Slack API - Your Apps](https://api.slack.com/apps) e clique em "Create New App".
2. Escolha "From scratch" (Do zero), dê um nome ao app e selecione o workspace onde você irá instalá-lo.
3. Na seção "Socket Mode", ative o Socket Mode e gere um *app-level token* com o escopo `connections:write`. Copie-o (ele começa com `xapp-`): este é o seu `SLACK_APP_TOKEN`.
4. Na seção "OAuth & Permissions", adicione os escopos de que o seu bot precisa (ex.: `chat:write`, `app_mentions:read`, `commands`), instale o app no seu workspace e copie o *Bot User OAuth Token* (ele começa com `xoxb-`): este é o seu `SLACK_BOT_TOKEN`.
5. Em "Event Subscriptions", ative os eventos e assine o evento de bot `app_mention`. Em "Slash Commands", crie o comando `/hello`. Com o Socket Mode ativo, nenhum dos dois pede uma Request URL.

<Warning>**Segurança:** nunca exponha o app-level token ou o Bot Token publicamente. Trate-os como credenciais sensíveis: os exemplos abaixo os leem de variáveis de ambiente, nunca do seu código.</Warning>

Com o Socket Mode, o próprio bot abre a conexão com o Slack, então ele roda como qualquer outro bot: não é preciso URL pública nem porta. Se preferir que o Slack envie os eventos por HTTP, veja [Use o modo HTTP em vez do Socket Mode](#use-o-modo-http-em-vez-do-socket-mode).

## Desenvolva o bot

Use a aba da linguagem que você escolher. Os dois exemplos respondem a menções e ao comando de barra `/hello`.

<Tabs>
  <Tab title="Node.js - @slack/bolt">
    1. Certifique-se de que o Node.js está instalado.
    2. Inicialize um projeto e instale as dependências:

    ```bash Terminal theme={"system"}
    npm init -y
    npm install @slack/bolt
    ```

    3. Crie um arquivo `index.js` com o seguinte conteúdo:

    ```javascript index.js theme={"system"}
    const { App } = require('@slack/bolt');

    const app = new App({
      token: process.env.SLACK_BOT_TOKEN,
      appToken: process.env.SLACK_APP_TOKEN,
      // Socket Mode: o bot se conecta ao Slack, então não é preciso URL pública
      socketMode: true,
    });

    // Responde quando mencionado
    app.event('app_mention', async ({ event, say }) => {
      await say(`<@${event.user}> Obrigado por me mencionar!`);
    });

    // Exemplo de comando de barra (slash command)
    app.command('/hello', async ({ ack, respond }) => {
      await ack();
      await respond('Olá da Square Cloud!');
    });

    (async () => {
      await app.start();
      console.log('⚡️ O app Slack Bolt está rodando!');
    })();
    ```
  </Tab>

  <Tab title="Python - slack_bolt">
    1. Certifique-se de que o Python e o pip estão instalados.
    2. Instale a biblioteca Bolt para Python:

    ```bash Terminal theme={"system"}
    pip install slack_bolt
    ```

    3. Crie um arquivo `app.py` com o seguinte conteúdo:

    ```python app.py theme={"system"}
    import os

    from slack_bolt import App
    from slack_bolt.adapter.socket_mode import SocketModeHandler

    app = App(token=os.environ.get('SLACK_BOT_TOKEN'))

    @app.event('app_mention')
    def handle_mention(event, say):
        user = event.get('user')
        say(f'<@{user}> Obrigado por me mencionar!')

    @app.command('/hello')
    def hello_command(ack, respond):
        ack()
        respond('Olá da Square Cloud!')

    if __name__ == '__main__':
        # Socket Mode: o bot se conecta ao Slack, então não é preciso URL pública
        SocketModeHandler(app, os.environ.get('SLACK_APP_TOKEN')).start()
    ```

    4. Para projetos Python, inclua um `requirements.txt` com:

    ```txt requirements.txt theme={"system"}
    slack_bolt
    ```
  </Tab>
</Tabs>

## Configure a Square Cloud

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

<CodeGroup>
  ```systemd Node.js theme={"system"}
  DISPLAY_NAME=My Slack Bot
  MAIN=index.js
  MEMORY=512
  VERSION=recommended
  AUTORESTART=true
  ```

  ```systemd Python theme={"system"}
  DISPLAY_NAME=My Slack Bot
  MAIN=app.py
  MEMORY=512
  VERSION=recommended
  AUTORESTART=true
  ```
</CodeGroup>

* `MAIN` é o arquivo que a Square Cloud executa, e `MEMORY` é a RAM do bot em MB. Bots precisam de pelo menos 256 MB; 512 MB deixa espaço para crescer.
* `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`: no Socket Mode, o bot não precisa de URL pública.

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

## Defina os tokens

O seu código lê os dois tokens das variáveis de ambiente `SLACK_BOT_TOKEN` e `SLACK_APP_TOKEN`, então eles nunca entram nos seus arquivos. Defina-os de uma destas formas:

* **Dashboard**: na página de upload, abra **Configuração avançada** e adicione as duas variáveis. Para um bot que já está no ar, adicione-as na página **Variáveis de ambiente** da aplicação e reinicie o bot.
* **CLI**: logo depois de enviar o bot (veja [Faça o deploy e verifique](#faça-o-deploy-e-verifique)), defina-as com [`squarecloud app env set`](/pt-br/cli-reference/environment-variables#squarecloud-app-env-set) e reinicie o bot:

```bash theme={"system"}
squarecloud app env set SLACK_BOT_TOKEN=xoxb-your-token SLACK_APP_TOKEN=xapp-your-token
squarecloud app restart
```

O bot lê as variáveis de ambiente quando inicia, então reinicie-o após cada alteração. Veja [Variáveis de ambiente](/pt-br/platform/environment-variables) para as outras formas de gerenciá-las.

## O que vai no ZIP

* O seu arquivo principal (`index.js` ou `app.py`) e os seus outros arquivos de código.
* `package.json` ou `requirements.txt`.
* `squarecloud.app`.

Deixe de fora a `node_modules`, a `.venv` e a `__pycache__`: a Square Cloud instala as suas dependências quando o bot inicia.

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

### Teste o bot

1. Nas configurações do app no Slack, em "OAuth & Permissions", instale o app no workspace (se ainda não tiver instalado).
2. Verifique os logs da aplicação no dashboard da Square Cloud em busca de erros de inicialização. Com o Socket Mode não há Request URL para configurar: o bot se conecta ao Slack assim que inicia.
3. Convide o bot para um canal e, em seguida, mencione-o ou rode o comando `/hello` para validar as respostas.

Exemplo de link de instalação (substitua o client\_id):

```txt theme={"system"}
https://slack.com/oauth/v2/authorize?client_id=000000000000.000000000000&scope=commands,chat:write,app_mentions:read
```

## Erros comuns

### You must provide an appToken when socketMode is set to true

O Bolt para JavaScript para na inicialização com esta mensagem quando a `SLACK_APP_TOKEN` não está definida. Defina o app-level token (o que começa com `xapp-`) e reinicie o bot.

### Either an env variable `SLACK_BOT_TOKEN` or `token` argument in the constructor is required

O Bolt para Python para na inicialização com esta mensagem quando a `SLACK_BOT_TOKEN` não está definida. Defina o Bot User OAuth Token (o que começa com `xoxb-`) e reinicie o bot.

### O bot não responde a menções

Confira se o bot é membro do canal, se o "Event Subscriptions" assina o evento de bot `app_mention` e se você reinstalou o app depois de adicionar escopos.

## Use o modo HTTP em vez do Socket Mode

Apps que usam Socket Mode não podem ser listados no Slack Marketplace público. Se você precisa que o Slack envie os eventos por HTTP, rode o bot como uma aplicação web:

1. Nas configurações do app no Slack, desative o Socket Mode e copie o *Signing Secret* (em "Basic Information") para uma variável de ambiente `SLACK_SIGNING_SECRET`, definida da mesma forma que os tokens.
2. Crie o app com o signing secret em vez do app-level token e escute na porta da variável de ambiente `PORT`:

<CodeGroup>
  ```javascript index.js theme={"system"}
  const app = new App({
    token: process.env.SLACK_BOT_TOKEN,
    signingSecret: process.env.SLACK_SIGNING_SECRET,
  });

  (async () => {
    // A Square Cloud define PORT=80
    await app.start(Number(process.env.PORT) || 80);
    console.log('⚡️ O app Slack Bolt está rodando!');
  })();
  ```

  ```python app.py theme={"system"}
  app = App(
      token=os.environ.get('SLACK_BOT_TOKEN'),
      signing_secret=os.environ.get('SLACK_SIGNING_SECRET')
  )

  if __name__ == '__main__':
      # A Square Cloud define PORT=80
      app.start(port=int(os.environ.get('PORT', 80)))
  ```
</CodeGroup>

Os dois servidores escutam em todas as interfaces de rede (`0.0.0.0`), como a Square Cloud exige.

3. Adicione um `SUBDOMAIN` ao seu arquivo de configuração (ou selecione "Publicação na Web" e defina um subdomínio ao enviar pelo dashboard) para que o bot tenha uma URL pública. Aplicações web precisam de pelo menos `MEMORY=512`:

```systemd squarecloud.app theme={"system"}
DISPLAY_NAME=My Slack Bot
MAIN=index.js
MEMORY=512
VERSION=recommended
AUTORESTART=true
SUBDOMAIN=my-slack-bot
```

<Note>Uma aplicação enviada sem subdomínio não pode ganhar um depois. Se o seu bot já roda em Socket Mode, envie a versão HTTP como uma nova aplicação.</Note>

4. Em "Event Subscriptions" e no comando de barra `/hello`, defina a Request URL como `https://<subdomain>.squareweb.app/slack/events`.

## 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="Variáveis de ambiente" icon="key" href="/pt-br/platform/environment-variables">
    Gerencie os tokens do seu bot e outros segredos.
  </Card>

  <Card title="Bot do Discord" icon="discord" href="/pt-br/tutorials/bots/discord">
    Hospede um bot do Discord ao lado do seu bot do Slack.
  </Card>
</CardGroup>

Para saber mais sobre o Bolt, consulte a documentação oficial do Slack para o [Bolt para JavaScript](https://docs.slack.dev/tools/bolt-js/) e o [Bolt para Python](https://docs.slack.dev/tools/bolt-python/).

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