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

# Configurare il Webhook di Top.gg su Square Cloud

> Una guida dettagliata alla configurazione del webhook di Top.gg su Square Cloud.

## Introduzione

* Questa guida presuppone che tu abbia un bot approvato su [top.gg](https://top.gg/) e che stia utilizzando Node.js o Python per il tuo progetto.
* Successivamente, dovrai creare un account su Square Cloud, cosa che puoi fare tramite la [pagina di registrazione](https://squarecloud.app/signup). Puoi usare la tua email per creare un account.
* Infine, devi avere un piano a pagamento attivo sul tuo account. Puoi visualizzare i nostri piani e acquistarne uno in base alle tue esigenze [qui](https://squarecloud.app/it/pricing).

## Configurare l'ambiente

<Tabs>
  <Tab title="Node.js">
    1. Prima di iniziare, assicurati di avere Node.js e npm installati sul tuo sistema. Se non li hai ancora, puoi scaricarli dal [sito ufficiale di Node.js](https://nodejs.org/).
    2. Avvia un nuovo progetto Node.js con il seguente comando:

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

    Questo comando crea un file package.json nella directory corrente.

    2. Installa le librerie necessarie:

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

  <Tab title="Python">
    1. Assicurati di avere Python e Pip (un gestore di pacchetti per Python) installati sul tuo sistema. In caso contrario, puoi scaricarli dal [sito ufficiale di Python](https://www.python.org/) e dal [sito ufficiale di Pip](https://pypi.org/).
    2. Installa le librerie `flask` e `waitress` usando pip:

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

## Configurare il progetto

**1. Ottieni l'autenticazione del tuo webhook:**

* Vai al tuo profilo Top.gg [qui](https://top.gg/user/me).
* Clicca su "edit" sul bot per cui vuoi ricevere notifiche dei voti.
* Sotto "GENERAL", scegli l'opzione "webhook".
* Imposta l'autenticazione del webhook in "Authorization". In questo esempio, abbiamo usato "myappsquare".

**2. Implementa il listener del webhook:**

Le sezioni seguenti forniscono esempi di codice sia per Javascript che per Python:

<Tabs>
  <Tab title="Node.js">
    Useremo l'esempio fornito dalla documentazione di top.gg [qui](https://docs.top.gg/docs/Libraries/javascript), con alcune modifiche.

    ```javascript index.js theme={null}
    // Import libraries
    const Topgg = require("@top-gg/sdk");
    const express = require("express");

    // Create Express app and Top.gg webhook instances
    const app = express();
    const webhook = new Topgg.Webhook("YOUR_AUTHORIZATION_TOKEN");

    // Define route for '/topgg' endpoint (POST requests)
    app.post("/topgg", webhook.listener((vote) => {
      // Log vote received message with user ID
      console.log(`Vote received successfully! User ID: ${vote.user}`);
    }));

    // Start server on port 80 (default HTTP)
    app.listen(80);
    ```
  </Tab>

  <Tab title="Python">
    Per Python, puoi usare il seguente codice:

    ```python app.py theme={null}
    # Import the necessary libraries
    import logging
    import json
    from waitress import serve
    from flask import Flask, request, abort

    # Create an instance of the Flask app
    app = Flask(__name__)

    # Define your authorization token
    AUTH_TOKEN = 'YOUR_AUTHORIZATION'

    # Define a route for the '/topgg' endpoint that accepts POST requests
    @app.route("/topgg", methods=["POST"])
    def hook():
        # Check the authorization header
        auth = request.headers.get('Authorization')
        if auth != AUTH_TOKEN:
            logging.error('Access denied')
            abort(401)  # Unauthorized

        # Convert the request data from bytes to a JSON dictionary
        data = json.loads(request.data)
        # Print the ID of the user who voted
        print(f'Vote received successfully! User ID: {data["user"]}')
        # Return a response with the string "Data received" and status 200 to indicate that the request was processed successfully
        return "Data received"

    # Check if this script is being run directly and not imported as a module
    if __name__ == "__main__":
        # Set the log message format to exclude the log level
        logging.basicConfig(format='%(message)s', level=logging.INFO)
        # Serve our Flask app on port 80 and listen on all network interfaces
        serve(app, host="0.0.0.0", port=80)
    ```
  </Tab>
</Tabs>

## Creare il file di configurazione squarecloud

<Card title="Scopri di più su: come creare il file di configurazione per Square Cloud." icon="link" href="https://docs.squarecloud.app/it/getting-started/config-file">
  Il file squarecloud.app è un file di configurazione che verrà utilizzato per configurare la tua applicazione; sarà usato per definire il nome, la descrizione, la versione, il file principale, tra le altre cose.
</Card>

## Caricare l'applicazione su Square Cloud

Dopo aver seguito tutti i passaggi, inserisci i file della tua applicazione in un file `.zip`, incluso il file di configurazione.

Se la tua applicazione è un progetto Node.js, dai un'occhiata al nostro articolo su [Node.js](/it/articles/getting-started-with-nodejs).

Se la tua applicazione è un progetto Python, dai un'occhiata al nostro articolo su [Python](/it/articles/getting-started-with-python).

<Tabs>
  <Tab title="Dashboard Upload">
    Accedi alla [Dashboard di Square
    Cloud](https://squarecloud.app/it/dashboard/new) e carica i file del tuo
    progetto.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/dashboard/uploading.gif" alt="Caricamento dell'applicazione su Square Cloud" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Tab>

  <Tab title="CLI Upload">
    <Steps>
      <Step title="Primo passo">
        Per prima cosa, devi avere la CLI installata nel tuo ambiente. Se
        non l'hai ancora, esegui il seguente comando nel tuo terminale:

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

        Se la possiedi già, ti consigliamo di aggiornarla. Per farlo, esegui il seguente comando nel tuo terminale:

        <Tabs>
          <Tab title="Windows">
            ```bash theme={null}
            squarecloud update
            ```
          </Tab>

          <Tab title="Linux, macOS e WSL">
            ```bash theme={null}
            curl -fsSL https://cli.squarecloud.app/install | bash
            ```
          </Tab>
        </Tabs>
      </Step>

      <Step title="Secondo passo">
        Ora, per autenticarti e usare gli altri comandi della CLI, troverai la tua
        chiave di autorizzazione [qui](https://squarecloud.app/it/account) cliccando su
        "Request API Key". Dopo aver ottenuto la tua chiave di autorizzazione, esegui il
        seguente comando:

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

      <Step title="Terzo passo">
        Infine, per effettuare il deploy della tua applicazione su Square Cloud usando la CLI, devi eseguire il seguente comando, passando il percorso del tuo file zip:

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

## Avviare i test

Se hai fatto tutto correttamente, prova ad accedere al tuo sito usando il subdomain definito nel file di configurazione. Se lo hai definito come "mysite", per accedervi sarà `mysite.squareweb.app`. Dopo aver effettuato l'accesso, se compare solo "Cannot GET /" o "Method Not Allowed", è tutto a posto.

Ora, devi tornare alla pagina precedente dove è stata definita l'autorizzazione. Nel campo Webhook URL, dovresti inserire l'URL del tuo sito con la route che riceverà i voti.

* Per il codice JavaScript che abbiamo creato con `app.post("/topgg", webhook.listener((vote) => {...})`, la route che riceverà i voti è "/topgg". Quindi, se il tuo sito web è "mysite.squareweb.app", dovresti inserire "mysite.squareweb.app/topgg" come Webhook URL.

* Per il codice Python che abbiamo creato con `@app.route("/topgg", methods=["POST"])`, la route che riceverà i voti è anch'essa "/topgg". Quindi, il Webhook URL sarebbe lo stesso "mysite.squareweb.app/topgg".

<Frame>
  <img src="https://cdn.squarecloud.app/docs/articles/topgg/example-url.png" alt="Esempio di configurazione dell'URL del webhook di Top.gg" style={{ borderRadius: "0.2rem" }} />
</Frame>

Infine, clicca sul pulsante "Send Test". Dopodiché, controlla il terminale. Se tutto è andato bene, il messaggio che hai definito in `console.log` o `print` dovrebbe apparire nel terminale.

<Frame>
  <img src="https://cdn.squarecloud.app/docs/articles/topgg/example-send.png" alt="Esempio di test di invio del webhook di Top.gg" style={{ borderRadius: "0.2rem" }} />
</Frame>

E con questo, se tutto è stato configurato correttamente, il tuo webhook sarà pronto a inviare notifiche quando il tuo bot riceve un voto su top.gg.

## Risoluzione dei problemi

<CardGroup cols={1}>
  ### Dominio personalizzato

  <Card horizontal>
    Per utilizzare un dominio personalizzato (ad esempio, `mysite.com`) invece dell'URL predefinito `mysite.squareweb.app`, hai bisogno del **piano Standard o superiore**. Il sottodominio è definito dal campo **SUBDOMAIN** nel file di configurazione.
  </Card>

  ### Requisiti minimi di RAM

  <Card horizontal>
    **Minimo: 512MB di RAM** per siti web/API semplici. Per siti con framework (Next.JS, React, Vue, Angular, ecc.), consigliamo sempre **almeno 1GB di RAM**. Per applicazioni più grandi, alloca più RAM per evitare che l'applicazione esaurisca la memoria e si arresti in modo anomalo.
  </Card>

  ### Impossibile trovare questo sito.

  <Card horizontal>
    Verifica che il **sottodominio/dominio** corrisponda a quanto configurato nel campo **SUBDOMAIN** o nelle **impostazioni del dominio personalizzato**. Se hai appena caricato il sito, attendi fino a **60 secondi** affinché Square abiliti il **primo accesso**.
  </Card>

  ### Il sito ha impiegato troppo tempo per rispondere...

  <Card horizontal>
    Verifica di aver configurato correttamente la **porta 80** e l'**host 0.0.0.0** nell'applicazione. Consigliamo di utilizzare le variabili d'ambiente forzate di Square: **PORT** e **HOST** dal file `.env`.
  </Card>
</CardGroup>

## Contattaci

Se continui a riscontrare **difficoltà tecniche**, il nostro **team di supporto specializzato** è disponibile ad assisterti. [**Contattaci**](https://squarecloud.app/it/support) e saremo felici di aiutarti a risolvere qualsiasi problema.
