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

# Configurer le webhook Top.gg sur Square Cloud

> Un guide détaillé pour configurer le webhook Top.gg sur Square Cloud.

## Introduction

* Ce guide suppose que vous avez un bot approuvé sur [top.gg](https://top.gg/) et que vous utilisez Node.js ou Python pour votre projet.
* Ensuite, vous devrez créer un compte sur Square Cloud, ce que vous pouvez faire depuis la [page d'inscription](https://squarecloud.app/signup). Vous pouvez utiliser votre e-mail pour créer un compte.
* Enfin, vous devez disposer d'un plan payant actif sur votre compte. Vous pouvez consulter nos plans et en acheter un selon vos besoins [ici](https://squarecloud.app/fr/pricing).

## Configuration de l'environnement

<Tabs>
  <Tab title="Node.js">
    1. Avant de commencer, assurez-vous d'avoir Node.js et npm installés sur votre système. Si ce n'est pas encore le cas, vous pouvez les télécharger depuis le [site officiel de Node.js](https://nodejs.org/).
    2. Démarrez un nouveau projet Node.js avec la commande suivante :

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

    Cette commande crée un fichier package.json dans le répertoire courant.

    2. Installez les bibliothèques nécessaires :

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

  <Tab title="Python">
    1. Assurez-vous d'avoir Python et Pip (un gestionnaire de paquets pour Python) installés sur votre système. Si ce n'est pas le cas, vous pouvez les télécharger depuis le [site officiel de Python](https://www.python.org/) et le [site officiel de Pip](https://pypi.org/).
    2. Installez les bibliothèques `flask` et `waitress` avec pip :

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

## Configuration du projet

**1. Récupérez votre authentification de webhook :**

* Rendez-vous sur votre profil Top.gg [ici](https://top.gg/user/me).
* Cliquez sur « edit » sur le bot pour lequel vous voulez recevoir les notifications de votes.
* Sous « GENERAL », choisissez l'option « webhook ».
* Définissez l'authentification du webhook dans « Authorization ». Dans cet exemple, nous avons utilisé « myappsquare ».

**2. Implémentez l'écouteur de webhook :**

Les sections suivantes fournissent des exemples de code pour Javascript et Python :

<Tabs>
  <Tab title="Node.js">
    Nous allons utiliser l'exemple fourni par la documentation de top.gg [ici](https://docs.top.gg/docs/Libraries/javascript), avec quelques modifications.

    ```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">
    Pour Python, vous pouvez utiliser le code suivant :

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

## Créer le fichier de configuration squarecloud

<Card title="À découvrir : comment créer le fichier de configuration pour Square Cloud." icon="link" href="https://docs.squarecloud.app/fr/getting-started/config-file">
  Le fichier squarecloud.app est un fichier de configuration qui servira à configurer votre application ; il sera utilisé pour définir le nom, la description, la version, le fichier principal, entre autres choses.
</Card>

## Envoyer votre application sur Square Cloud

Après avoir suivi toutes les étapes, placez les fichiers de votre application dans un fichier `.zip`, y compris le fichier de configuration.

Si votre application est un projet Node.js, consultez notre article sur [Node.js](/fr/articles/getting-started-with-nodejs).

Si votre application est un projet Python, consultez notre article sur [Python](/fr/articles/getting-started-with-python).

<Tabs>
  <Tab title="Envoi via le Dashboard">
    Accédez au [Dashboard Square
    Cloud](https://squarecloud.app/fr/dashboard/new) et envoyez les fichiers de
    votre projet.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/dashboard/uploading.gif" alt="Téléversement d'une application vers Square Cloud" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Tab>

  <Tab title="Envoi via la CLI">
    <Steps>
      <Step title="Première étape">
        Tout d'abord, vous devez avoir la CLI installée dans votre environnement. Si vous
        ne l'avez pas encore, exécutez la commande suivante dans votre terminal :

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

        Si vous l'avez déjà, nous vous recommandons de la mettre à jour. Pour ce faire, exécutez la commande suivante dans votre terminal :

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

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

      <Step title="Deuxième étape">
        Maintenant, pour vous authentifier et utiliser les autres commandes de la CLI, vous trouverez votre
        clé d'autorisation [ici](https://squarecloud.app/fr/account) en cliquant sur
        « Request API Key ». Après avoir obtenu votre clé d'autorisation, exécutez la
        commande suivante :

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

      <Step title="Troisième étape">
        Enfin, pour déployer votre application sur Square Cloud à l'aide de la CLI, vous devez exécuter la commande suivante en passant le chemin de votre fichier zip :

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

## Lancer les tests

Si vous avez tout fait correctement, essayez d'accéder à votre site en utilisant le sous-domaine défini dans le fichier de configuration. Si vous l'avez défini comme « mysite », l'accès se fera via `mysite.squareweb.app`. Après y avoir accédé, si seul « Cannot GET / » ou « Method Not Allowed » s'affiche, tout est correct.

Vous devez maintenant revenir à la page précédente où l'autorisation a été définie. Dans le champ Webhook URL, vous devez mettre l'URL de votre site avec la route qui recevra les votes.

* Pour le code JavaScript que nous avons créé avec `app.post("/topgg", webhook.listener((vote) => {...})`, la route qui recevra les votes est « /topgg ». Donc, si votre site est « mysite.squareweb.app », vous devez mettre « mysite.squareweb.app/topgg » comme Webhook URL.

* Pour le code Python que nous avons créé avec `@app.route("/topgg", methods=["POST"])`, la route qui recevra les votes est également « /topgg ». Ainsi, l'URL du webhook serait la même « mysite.squareweb.app/topgg ».

<Frame>
  <img src="https://cdn.squarecloud.app/docs/articles/topgg/example-url.png" alt="Exemple de configuration de l'URL du webhook Top.gg" style={{ borderRadius: "0.2rem" }} />
</Frame>

Enfin, cliquez sur le bouton « Send Test ». Ensuite, vérifiez le terminal. Si tout s'est bien passé, le message que vous avez défini dans `console.log` ou `print` devrait apparaître dans le terminal.

<Frame>
  <img src="https://cdn.squarecloud.app/docs/articles/topgg/example-send.png" alt="Exemple d'envoi de test du webhook Top.gg" style={{ borderRadius: "0.2rem" }} />
</Frame>

Et avec cela, si tout a été configuré correctement, votre webhook sera prêt à envoyer des notifications lorsque votre bot reçoit un vote sur top.gg.

## Dépannage

<CardGroup cols={1}>
  ### Domaine personnalisé

  <Card horizontal>
    Pour utiliser un domaine personnalisé (par exemple `mysite.com`) au lieu de l'URL par défaut `mysite.squareweb.app`, vous avez besoin du **plan Standard ou supérieur**. Le sous-domaine est défini par le champ **SUBDOMAIN** dans le fichier de configuration.
  </Card>

  ### Prérequis minimum en RAM

  <Card horizontal>
    **Minimum : 512 Mo de RAM** pour les sites web/API simples. Pour les sites utilisant des frameworks (Next.JS, React, Vue, Angular, etc.), nous recommandons toujours **au moins 1 Go de RAM**. Pour les applications plus volumineuses, allouez davantage de RAM afin d'éviter que l'application ne manque de mémoire et ne plante.
  </Card>

  ### Impossible de trouver ce site.

  <Card horizontal>
    Vérifiez que le **sous-domaine/domaine** correspond à ce qui est configuré dans le champ **SUBDOMAIN** ou dans les **paramètres du domaine personnalisé**. Si vous venez tout juste de mettre en ligne le site, patientez jusqu'à **60 secondes** pour que Square active le **premier accès**.
  </Card>

  ### Le site a mis trop de temps à répondre...

  <Card horizontal>
    Vérifiez que vous avez correctement configuré le **port 80** et l'hôte **0.0.0.0** dans l'application. Nous recommandons d'utiliser les variables d'environnement forcées par Square : **PORT** et **HOST** du fichier `.env`.
  </Card>
</CardGroup>

## Contactez-nous

Si vous rencontrez toujours des **difficultés techniques**, notre **équipe de support spécialisée** est disponible pour vous aider. [**Contactez-nous**](https://squarecloud.app/fr/support) et nous serons ravis de vous aider à résoudre tout problème.
