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

# Configurar Webhook do Top.gg na Square Cloud

> Guia detalhado para configurar o webhook do Top.gg na Square Cloud.

## Introdução

* Este guia supõe que você tenha um bot aprovado no [top.gg](https://top.gg/) e esteja usando Node.js ou Python em seu projeto.
* Em seguida, crie uma conta na Square Cloud através da [página de cadastro](https://squarecloud.app/pt-br/signup). Você pode usar seu email para se registrar.
* Por fim, é necessário ter um plano pago ativo na sua conta. Você pode ver e adquirir nossos planos [aqui](https://squarecloud.app/pt-br/pricing).

## Configurando o Ambiente

<Tabs>
  <Tab title="Node.js">
    1. Antes de começar, verifique se você tem o Node.js e o npm instalados em seu sistema. Caso contrário, faça o download no [site oficial do Node.js](https://nodejs.org/).
    2. Inicie um novo projeto Node.js com o comando:

    ```bash theme={null}
    npm init -y
    ```

    Esse comando cria um arquivo package.json no diretório atual.

    3. Instale as bibliotecas necessárias:

    ```bash theme={null}
    npm install @top-gg/sdk express
    ```
  </Tab>

  <Tab title="Python">
    1. Verifique se você tem Python e pip instalados em seu sistema. Caso não tenha, baixe-os no [site oficial do Python](https://www.python.org/) e no [site oficial do pip](https://pypi.org/).
    2. Instale as bibliotecas necessárias:

    ```bash theme={null}
    pip install flask waitress
    ```
  </Tab>
</Tabs>

## Configurando o Projeto

**1. Obter o token de autenticação do webhook:**

* Acesse seu perfil no Top.gg [aqui](https://top.gg/user/me).
* Clique em "editar" no bot para o qual deseja receber notificações de votos.
* Em "GERAL", selecione a opção "webhook".
* Defina o token em "Authorization". Neste exemplo, usamos "myappsquare".

**2. Implemente o listener do webhook:**

Use os exemplos abaixo para Node.js ou Python:

<Tabs>
  <Tab title="Node.js">
    ```javascript theme={null}
    // Importe as bibliotecas
    const Topgg = require("@top-gg/sdk");
    const express = require("express");

    // Crie a aplicação Express e a instância do webhook Top.gg
    const app = express();
    const webhook = new Topgg.Webhook("YOUR_AUTHORIZATION_TOKEN");

    // Defina a rota para endpoint '/topgg' (requisições POST)
    app.post("/topgg", webhook.listener((vote) => {
      console.log(`Voto recebido com sucesso! ID do usuário: ${vote.user}`);
    }));

    // Inicie o servidor na porta 80
    app.listen(80);
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    # Importe as bibliotecas
    import logging
    import json
    from waitress import serve
    from flask import Flask, request, abort

    app = Flask(__name__)
    AUTH_TOKEN = 'YOUR_AUTHORIZATION_TOKEN'

    @app.route("/topgg", methods=["POST"])
    def hook():
        auth = request.headers.get('Authorization')
        if auth != AUTH_TOKEN:
            logging.error('Acesso negado')
            abort(401)
        data = json.loads(request.data)
        print(f'Voto recebido com sucesso! ID do usuário: {data["user"]}')
        return "Dados recebidos"

    if __name__ == "__main__":
        logging.basicConfig(format='%(message)s', level=logging.INFO)
        serve(app, host="0.0.0.0", port=80)
    ```
  </Tab>
</Tabs>

## Criando o arquivo de configuração da Square Cloud

<Card title="Aprenda como: criar o arquivo de configuração para a Square Cloud." icon="link" href="https://docs.squarecloud.app/pt-br/getting-started/config-file">
  O arquivo `squarecloud.app` é usado para definir nome, descrição, versão, arquivo principal e outras configurações da sua aplicação.
</Card>

## Enviando sua aplicação para a Square Cloud

Após seguir todos os passos, compacte os arquivos do seu projeto em um `.zip`, incluindo o arquivo de configuração.

<Tabs>
  <Tab title="Envio pelo Dashboard">
    Acesse o [Dashboard da Square Cloud](https://squarecloud.app/pt-br/dashboard/new) e faça o upload dos arquivos do seu projeto.
  </Tab>

  <Tab title="Envio via CLI">
    <Steps>
      <Step title="Primeiro passo">
        Instale o CLI com:

        ```
        npm install -g @squarecloud/cli
        ```

        Caso já tenha, atualize com:

        ```bash theme={null}
        squarecloud update
        ```
      </Step>

      <Step title="Segundo passo">
        Obtenha sua chave de autenticação [aqui](https://squarecloud.app/pt-br/account) e faça login:

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

      <Step title="Terceiro passo">
        Envie seu `.zip`:

        ```bash theme={null}
        squarecloud upload zip
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Iniciando os testes

Acesse seu site pelo subdomínio definido (ex: `meusite.squareweb.app`). Se aparecer apenas “Cannot GET /” ou “Method Not Allowed”, está tudo certo.

Em seguida, volte à página de webhook no Top.gg e defina a URL de teste:

* Para Node.js, use `meusite.squareweb.app/topgg`.
* Para Python, use `meusite.squareweb.app/topgg`.

Clique em “Send Test” e verifique o terminal; a mensagem de console deve aparecer.

## Solução de Problemas

<CardGroup cols={1}>
  ### Domínio Personalizado

  <Card horizontal>
    Para usar domínio personalizado (ex: `meusite.com`) ao invés da URL padrão `meusite.squareweb.app`, você precisa do **plano Standard ou superior**. O subdomínio é definido pelo campo **SUBDOMAIN** no arquivo de configuração. Veja: [Como configurar seu domínio personalizado](https://docs.squarecloud.app/pt-br/tutorials/platform/custom-domain).
  </Card>

  ### Requisitos Mínimos de RAM

  <Card horizontal>
    **Mínimo: 512MB de RAM** para websites/APIs simples. Para sites com frameworks (Next.JS, React, Vue, Angular, etc.), sugerimos sempre **pelo menos 1GB de RAM**. Para aplicações maiores, aumente a RAM para evitar que a aplicação fique sem memória e trave.
  </Card>

  ### Não foi possível encontrar esse site.

  <Card horizontal>
    Verifique se o **subdomínio/domínio** corresponde ao configurado no campo **SUBDOMAIN** ou nas **configurações de domínio personalizado**. Se você acabou de enviar o site, aguarde até **60 segundos** para a Square liberar o **primeiro acesso**.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/cloudflare/pt-br/unauthorized.webp" alt="Erro de site não encontrado no Cloudflare" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Card>

  ### Site demorou demais para responder...

  <Card horizontal>
    Verifique se configurou corretamente a **porta 80** e **host 0.0.0.0** na aplicação. Recomendamos usar as variáveis de ambiente forçadas da Square: **PORT** e **HOST** do arquivo `.env`.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/cloudflare/pt-br/timeout.webp" alt="Erro de timeout no Cloudflare" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Card>
</CardGroup>

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