{"id":72194,"date":"2023-08-10T14:49:26","date_gmt":"2023-08-10T13:49:26","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=72194&#038;preview=true&#038;preview_id=72194"},"modified":"2023-10-11T07:55:36","modified_gmt":"2023-10-11T06:55:36","slug":"creare-slackbot-gestire-sito","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/","title":{"rendered":"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/it\/blog\/come-utilizzare-slack\/\">Slack<\/a> \u00e8 un&#8217;ottima piattaforma di messaggistica che permette ai team di collaborare in modo efficiente. E se questa collaborazione implica anche la gestione di pi\u00f9 siti <a href=\"https:\/\/kinsta.com\/wordpress\/\">WordPress<\/a> qui su Kinsta, \u00e8 possibile spostare alcune attivit\u00e0 comuni di gestione dei siti su Slack con l&#8217;aiuto dell&#8217;<a href=\"https:\/\/kinsta.com\/it\/docs\/kinsta-api\/\">API di Kinsta<\/a>.<\/p>\n<p>Integrare uno Slackbot nel proprio flusso di lavoro pu\u00f2 far risparmiare tempo e migliorare la produttivit\u00e0. Questo tutorial combina la potenza di Slack e dell&#8217;API di Kinsta per costruire uno Slackbot in grado di gestire attivit\u00e0 come la verifica dello stato del sito, la cancellazione della cache e il riavvio del motore PHP di un sito.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Cosa costruiremo<\/h2>\n<p>In questo caso, stiamo costruendo uno Slackbot su <a href=\"https:\/\/kinsta.com\/it\/blog\/come-installare-node-js\/\">Node.js<\/a> utilizzando l&#8217;<a href=\"https:\/\/api.slack.com\/tools\/bolt\" target=\"_blank\" rel=\"noopener noreferrer\">API Bolt<\/a> (il modo pi\u00f9 rapido per iniziare a programmare con la piattaforma Slack). L&#8217;applicazione trasformer\u00e0 i comandi slash di Slack in chiamate all&#8217;API di Kinsta e inoltrer\u00e0 le risposte in modo che tutta l&#8217;interazione con l&#8217;utente avvenga in Slack.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slackbot-demo-with-kinsta-api.gif\" alt=\"Demo di Slackbot con l'API di Kinsta\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Demo di Slackbot con l&#8217;API di Kinsta.<\/figcaption><\/figure>\n<h3>Prerequisiti<\/h3>\n<p>Per seguire questo progetto, \u00e8 necessario possedere i seguenti requisiti:<\/p>\n<ul>\n<li>Conoscenza di base di <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a> e Node.js<\/li>\n<li>Node.js versione 12 o superiore<\/li>\n<li>npm (<a href=\"https:\/\/kinsta.com\/it\/blog\/cos-e-npm\/\">Node Package Manager<\/a>) installato sul computer<\/li>\n<li>Spazio di lavoro Slack<\/li>\n<\/ul>\n<h2>Creare un&#8217;applicazione Slack<\/h2>\n<p>Uno Slackbot \u00e8 essenzialmente un&#8217;applicazione Slack. Per creare una nuova applicazione Slack, seguiamo questi passaggi:<\/p>\n<ol start=\"1\">\n<li>Andiamo alla dashboard di <a href=\"https:\/\/api.slack.com\/apps\/\" target=\"_blank\" rel=\"noopener noreferrer\">Slack API<\/a>.<\/li>\n<li>Clicchiamo sul pulsante <strong>Create New App<\/strong>, che aprir\u00e0 una finestra di dialogo.<\/li>\n<li>Selezioniamo l&#8217;opzione <strong>From Scratch<\/strong> per iniziare a creare l&#8217;applicazione da zero.<\/li>\n<li>Scegliamo un nome per l&#8217;app Slack. Ad esempio, <strong>Kinsta Bot<\/strong>.<\/li>\n<li>Scegliamo quindi l&#8217;area di lavoro in cui vogliamo installare l&#8217;app e clicchiamo sul pulsante <strong>Create app<\/strong>.<\/li>\n<\/ol>\n<p>Non esitate a modificare le informazioni di base dell&#8217;app navigando fino all&#8217;opzione <strong>Basic Information<\/strong> nella barra laterale. Scorrete verso il basso fino a <strong>Display Information<\/strong> per aggiungere dettagli come un&#8217;immagine, un nome, una descrizione, un colore e altro ancora.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slackbot-display-information.jpg\" alt=\"Display Information di Slackbot\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Display Information di Slackbot.<\/figcaption><\/figure>\n<h3>Configurare oAuth e i permessi<\/h3>\n<p>Abbiamo creato con successo uno Slackbot. Tuttavia, \u00e8 necessario concedere alcuni permessi per consentirgli di accedere ai dati ed eseguire azioni all&#8217;interno del nostro spazio di lavoro Slack. Per accedere alle impostazioni necessarie:<\/p>\n<ol start=\"1\">\n<li>Andiamo nella dashboard dell&#8217;app Slack e individuiamo l&#8217;opzione <strong>OAuth &#038; Permissions<\/strong> nella barra laterale sinistra.<\/li>\n<li>Una volta l\u00ec, scorriamo verso il basso fino alla sezione <strong>Scopes<\/strong>.<\/li>\n<li>Diamo al bot il permesso di leggere i messaggi istantanei degli utenti e di rispondere a tali messaggi.<\/li>\n<\/ol>\n<p>Di seguito \u00e8 riportata una schermata che mostra i permessi da fornire al bot:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slack-app-scopes.jpg\" alt=\"Permessi dell'app Slack\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Permessi dell&#8217;app Slack.<\/figcaption><\/figure>\n<p>Configurando questi permessi, il bot sar\u00e0 in grado di interagire perfettamente con gli utenti di Slack e di svolgere efficacemente le funzioni previste.<\/p>\n<h3>Installare lo Slackbot nello spazio di lavoro<\/h3>\n<p>Per completare il processo, dobbiamo installare il nuovo Slackbot nel nostro spazio di lavoro Slack. Andiamo nella barra laterale di sinistra e selezioniamo <strong>Install Apps<\/strong>. Da qui, clicchiamo su <strong>Install to Workspace<\/strong> e specifichiamo il canale in cui desideriamo aggiungere il bot.<\/p>\n<p>Lo Slackbot \u00e8 ora pronto. Configuriamo un server Node.js che verr\u00e0 utilizzato per ricevere ed elaborare le richieste.<\/p>\n<h2>Impostazione dell&#8217;ambiente di sviluppo<\/h2>\n<p>Per iniziare il nostro nuovo progetto Node.js, creiamo una nuova directory per l&#8217;applicazione e inizializziamola con npm:<\/p>\n<pre><code class=\"language-bash\">mkdir my-express-app \ncd my-express-app \nnpm init -y<\/code><\/pre>\n<p>Dopo aver eseguito il comando precedente, viene creato un nuovo file <strong>package.json<\/strong> nella directory scelta con i valori predefiniti. Il file <strong>package.json<\/strong> \u00e8 fondamentale perch\u00e9 contiene informazioni sul progetto e sulle sue dipendenze. Queste dipendenze permetteranno uno sviluppo fluido e miglioreranno le funzionalit\u00e0 del progetto:<\/p>\n<ol start=\"1\">\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/@slack\/bolt\" target=\"_blank\" rel=\"noopener noreferrer\">@slack\/bolt<\/a><\/code>: questo framework JavaScript permette di creare rapidamente applicazioni Slack ricche di funzionalit\u00e0, sfruttando le ultime funzionalit\u00e0 della piattaforma.<\/li>\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a><\/code>: un prezioso strumento che riavvia automaticamente l&#8217;applicazione Node.js ogni volta che vengono rilevate modifiche ai file nella directory, assicurando un flusso di sviluppo semplificato.<\/li>\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a><\/code>: questo modulo a dipendenza zero svolge un ruolo fondamentale nel caricamento delle variabili d&#8217;ambiente dal file <strong>.env<\/strong> a <code>process.env<\/code>, rendendo la gestione della configurazione un gioco da ragazzi.<\/li>\n<\/ol>\n<p>Per installare i pacchetti necessari, eseguiamo questi comandi:<\/p>\n<pre><code class=\"language-bash\">npm i @slack\/bolt\nnpm i --save-dev nodemon dotenv<\/code><\/pre>\n<p>Dopo aver installato con successo queste dipendenze e le dipendenze dev, \u00e8 il momento di aggiungere uno script dev al file <strong>package.json<\/strong>, utilizzando <code>nodemon<\/code> per eseguire il file JavaScript. Assicuriamoci che l&#8217;oggetto <strong>package.json<\/strong> includa quanto segue:<\/p>\n<pre><code class=\"language-json\">\"scripts\": {\n  \"dev\": \"nodemon app.js\"\n}<\/code><\/pre>\n<p>Infine, \u00e8 importante sottolineare che lo script <code>dev<\/code> punta a un file <strong>app.js<\/strong> inesistente. Creiamo questo file nella directory del progetto, poich\u00e9 \u00e8 qui che verr\u00e0 gestita la logica del progetto.<\/p>\n<pre><code class=\"language-bash\">touch app.js<\/code><\/pre>\n<h3>Configurazione delle variabili d&#8217;ambiente (token e segreti)<\/h3>\n<p>Avremo bisogno di token e segreti specifici per interagire con l&#8217;applicazione Slack dal progetto Node.js. Queste credenziali sono sensibili e per garantirne la protezione quando si utilizza il controllo di versione, le memorizzeremo nel file <strong>.env<\/strong>.<\/p>\n<p>Per ottenere il Signing Secret, o segreto di firma, accediamo alla dashboard di Slack, clicchiamo su <strong>Basic Information<\/strong> e poi scorriamo fino a <strong>App Credentials<\/strong>, dove troveremo il Signing Secret. Per il token, clicchiamo su <strong>Install App<\/strong> o su <strong>OAuth &#038; Permissions<\/strong> e troveremo il token OAuth. In genere, il token inizia con &#8220;xoxb&#8221;.<\/p>\n<p>Creaiamo un file chiamato <strong>.env<\/strong> nella directory principale del progetto e aggiungiamo il Signing Secret e il Bot Token nel seguente formato:<\/p>\n<pre><code class=\"language-bash\">SLACK_SIGNING_SECRET=\"YOUR SIGNING SECRET\"\nSLACK_BOT_TOKEN=\"YOUR BOT TOKEN\"<\/code><\/pre>\n<p>Per assicurarci che queste informazioni sensibili non vengano inviate al provider Git, creiamo un <a href=\"https:\/\/kinsta.com\/it\/blog\/gitignore-non-funziona\/\">file .gitignore<\/a> nella directory principale del progetto e aggiungiamo le seguenti righe per ignorare il file <strong>.env<\/strong> e la <strong>cartella node_modules<\/strong>:<\/p>\n<pre><code class=\"language-bash\">\/node_modules\n.env<\/code><\/pre>\n<p>Una volta completata questa impostazione, siamo pronti a procedere con la configurazione del server.<\/p>\n<h3>Configurazione del server Node.js<\/h3>\n<p>La configurazione del server Node.js \u00e8 un passo fondamentale per la creazione del nostro Slackbot. Dobbiamo importare i pacchetti e i moduli necessari, inizializzarli e impostare la porta su cui il progetto sar\u00e0 in ascolto. Apriamo il file <strong>app.js<\/strong> che abbiamo creato in precedenza e aggiungiamo il seguente codice:<\/p>\n<pre><code class=\"language-js\">const { App } = require(\"@slack\/bolt\");\nrequire(\"dotenv\").config();\n\n\/\/ Initializes your app with your bot token and signing secret\nconst app = new App({\n  token: process.env.SLACK_BOT_TOKEN,\n  signingSecret: process.env.SLACK_SIGNING_SECRET,\n});\n\n(async () =&gt; {\n    \/\/ Start your app\n    await app.start(process.env.PORT || 3000);\n    console.log(`\u26a1\ufe0f Kinsta Bot app is running on port ${process.env.PORT || 3000}!`);\n})();<\/code><\/pre>\n<p>Nel codice qui sopra, importiamo la classe <code>App<\/code> dalla libreria <code>@slack\/bolt<\/code>, un componente fondamentale per la creazione di app Slack. Inoltre, utilizziamo il pacchetto <code>dotenv<\/code> per elaborare le variabili d&#8217;ambiente.<\/p>\n<p>Quindi, la costante <code>app<\/code> viene creata utilizzando la classe <code>App<\/code>, che rappresenta l&#8217;applicazione bot Slack. Richiede due parametri importanti: <code>token<\/code> e <code>signingSecret<\/code>. Questi valori vengono recuperati dal file <strong>.env<\/strong>.<\/p>\n<p>Successivamente, all&#8217;interno della funzione <code>async<\/code>, avviene la configurazione del server. L&#8217;applicazione viene avviata chiamando <code>app.start()<\/code>. L&#8217;applicazione ascolta la porta <code>3000<\/code> in locale e registra un messaggio nella console, confermando che l&#8217;applicazione Kinsta Bot \u00e8 in esecuzione.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Quando si distribuisce un&#8217;applicazione node, non \u00e8 necessario definire o codificare la porta nell&#8217;applicazione. Usare <code>process.env.PORT<\/code> nel codice quando ci riferisce alla porta del server e il servizio di distribuzione imposter\u00e0 automaticamente la variabile d&#8217;ambiente `PORT`.<\/p>\n<\/aside>\n\n<p>Ora, quando eseguiamo lo script <code>dev<\/code> che abbiamo configurato (<code>npm run dev<\/code>), nel nostro terminale apparir\u00e0 il messaggio: &#8220;\u26a1\ufe0f Kinsta Bot app is running on port 3000!&#8221;<\/p>\n<h2>La modalit\u00e0 Socket dell&#8217;API di Slack<\/h2>\n<p>Nell&#8217;integrazione dell&#8217;API di Slack con i server Node.js, esistono due metodi principali di connessione: l&#8217;utilizzo dell&#8217;endpoint HTTP pubblico del server o la <a href=\"https:\/\/api.slack.com\/apis\/connections\/socket\" target=\"_blank\" rel=\"noopener noreferrer\">modalit\u00e0 Socket<\/a> per attivare i WebSocket. Questo tutorial si concentra sull&#8217;utilizzo della modalit\u00e0 Socket, in quanto consente di implementare con maggiore facilit\u00e0 funzioni interattive come i comandi Slack slash. Questo approccio permette a Slack di connettersi al server Node.js utilizzando WebSockets invece del tradizionale HTTP.<\/p>\n<p>Tuttavia, se scegliamo di utilizzare l&#8217;endpoint HTTP in locale, possiamo sfruttare <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">ngrok<\/a> per creare un URL pubblico che faccia da proxy al nostro localhost.<\/p>\n<h3>Come iniziare con la modalit\u00e0 Socket<\/h3>\n<p>Per iniziare a utilizzare la modalit\u00e0 Socket, seguiamo questi passaggi:<\/p>\n<ol start=\"1\">\n<li>Andiamo su <strong>Basic Information <\/strong> nella barra laterale sinistra della dashboard Slack. Scorriamo verso il basso fino a <strong>App-Level Tokens<\/strong> e clicchiamo sul pulsante <strong>Generate Token and Scopes<\/strong>.<\/li>\n<li>Diamo un nome al token e aggiungiamo i due ambiti disponibili: <code>connections:write<\/code> e <code>authorizations:read<\/code>. Clicchiamo su <strong>Generate<\/strong> per creare il token.<\/li>\n<li>Copiamo il token generato e incolliamolo nel file <strong>.env<\/strong>, assegnandolo a una variabile chiamata <code>APP_TOKEN<\/code>. Ricordate che le stringhe di token a livello di app iniziano con <code>xapp-<\/code>.<\/li>\n<\/ol>\n<p>Successivamente, clicchiamo su <strong>Socket Mode<\/strong> nella barra laterale e attiviamo l&#8217;opzione <strong>Enable Socket Mode<\/strong>. Infine, nel file <strong>app.js<\/strong>, aggiungiamo <code>socketMode:true<\/code> e <code>appToken<\/code> al codice che inizializza l&#8217;app\/server:<\/p>\n<pre><code class=\"language-js\">const app = new App({\n  token: process.env.SLACK_BOT_TOKEN,\n  signingSecret: process.env.SLACK_SIGNING_SECRET,\n  socketMode: true, \/\/ enable socket mode\n  appToken: process.env.APP_TOKEN,\n});<\/code><\/pre>\n<p>Una volta completati questi passaggi, tutte le richieste al server di sviluppo avverranno tramite WebSockets anzich\u00e9 HTTP. Questa configurazione permette di sfruttare al meglio la modalit\u00e0 Socket e di migliorare le funzionalit\u00e0 dello Slackbot.<\/p>\n<h2>Comandi slash su Slack<\/h2>\n<p>I <a href=\"https:\/\/api.slack.com\/interactivity\/slash-commands\" target=\"_blank\" rel=\"noopener noreferrer\">comandi slash<\/a> sono una funzione di Slack che consente di attivare azioni specifiche. Questi comandi possono essere rilevati nei messaggi di chat dei vari canali di Slack. Inoltre, i comandi slash permettono di passare dati di testo direttamente al server. Ad esempio, se impostiamo un comando come <code>\/operation_status [operation ID]<\/code>, questo passer\u00e0 il testo <code>operation ID<\/code> al server e attiver\u00e0 l&#8217;ascoltatore del comando <code>operation_status<\/code> corrispondente.<\/p>\n<p>Dopo aver configurato correttamente il server per interagire con Slack, il passo successivo consiste nell&#8217;impostare i comandi slash che attiveranno le azioni sul nostro server.<\/p>\n<h3>Creare comandi slash su Slack<\/h3>\n<p>Per creare comandi slash su Slack, clicchiamo sull&#8217;opzione di menu <strong>Slash Commands<\/strong> nella barra laterale sinistra, quindi clicchiamo sul pulsante <strong>Create New Command<\/strong>. Compiliamo il modulo risultante utilizzando l&#8217;immagine qui sotto come guida.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/create-a-new-slack-command.jpg\" alt=\"Creare un nuovo comando Slack\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Creare un nuovo comando Slack.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Se non state utilizzando la modalit\u00e0 Socket, dovrete aggiungere l&#8217;URL di richiesta generato da ngrok. Assicuratevi di aggiungere <strong>\/slack\/events<\/strong> alla fine dell&#8217;URL di ngrok.<\/p>\n<\/aside>\n\n<p>Dopo aver compilato il modulo, clicchiamo sul pulsante <strong>Salva<\/strong>. Slack chieder\u00e0 di reinstallare l&#8217;app nello spazio di lavoro affinch\u00e9 le modifiche abbiano effetto. Seguiamo le istruzioni per creare alcuni comandi slash, come mostrato nell&#8217;immagine qui sotto:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slash-commands-to-interact-with-kinsta-api.jpg\" alt=\"Comandi slash per interagire con l'API di Kinsta\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Comandi slash per interagire con l&#8217;API di Kinsta.<\/figcaption><\/figure>\n<h3>Configurare i comandi slash con Node.js<\/h3>\n<p>Una volta creati i comandi slash necessari, modifichiamo la nostra applicazione Node.js per rispondere a questi ultimi.<\/p>\n<p>Cominciamo a testare il comando <code>\/operation_status<\/code>. Impostiamo un ascoltatore per gli eventi che includono il comando <code>\/operation_status<\/code> aggiungendo il seguente codice al file <strong>app.js<\/strong>:<\/p>\n<pre><code class=\"language-js\">const { App } = require('@slack\/bolt');\nrequire('dotenv').config();\n\nconst app = new App({\n    token: process.env.SLACK_BOT_TOKEN,\n    signingSecret: process.env.SLACK_SIGNING_SECRET,\n    socketMode: true, \/\/ enable the following to use socket mode\n    appToken: process.env.APP_TOKEN,\n});\n\napp.command('\/operation_status', async ({ command, ack, say }) =&gt; {\n    await ack();\n    say('Wooah! It works!');\n});\n\n(async () =&gt; {\n    \/\/ Start your app\n    await app.start(process.env.PORT || 3000);\n    console.log(`\u26a1\ufe0f Kinsta Bot app is running on port ${process.env.PORT || 3000}!`);\n})();<\/code><\/pre>\n<p>Nel codice qui sopra, l&#8217;attenzione \u00e8 rivolta alla funzione <code>app.command()<\/code>, che funziona in modo simile agli ascoltatori di eventi in JavaScript. Specifichiamo il comando che desideriamo ascoltare e poi creiamo una funzione di callback asincrona per definire l&#8217;azione desiderata. Questa funzione accetta tre parametri:<\/p>\n<ul>\n<li><code>command<\/code><strong>:<\/strong> contiene i dettagli del comando slash inviato dall&#8217;utente.<\/li>\n<li><code>ack<\/code><strong>:<\/strong> conferma la ricezione del comando slash.<\/li>\n<li><code>say<\/code><strong>:<\/strong> invia un messaggio al canale Slack.<\/li>\n<\/ul>\n<p>Con il codice di cui sopra, il comando <code>\/operation_status<\/code> in Slack generer\u00e0 il messaggio: &#8220;Wooah! It works!&#8221;<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/testing-kinsta-slash-command.jpg\" alt=\"Test del comando slash di Kinsta\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Test del comando slash di Kinsta.<\/figcaption><\/figure>\n<p>Ora aggiungiamo gli ascoltatori di comandi per tutti i comandi slash che abbiamo creato:<\/p>\n<pre><code class=\"language-js\">app.command('\/environment_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/site_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/operation_status', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/clear_site_cache', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/restart_php_engine', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});<\/code><\/pre>\n<p>L&#8217;applicazione \u00e8 ora pronta ad ascoltare i comandi Slack slash. \u00c8 ora di aggiungere le azioni che ogni comando attiver\u00e0.<\/p>\n<h2>Implementare i comandi slack con l&#8217;API di Kinsta<\/h2>\n<p>L&#8217;applicazione risponder\u00e0 a ogni comando slash con una chiamata all&#8217;API di Kinsta e poi restituir\u00e0 il risultato dell&#8217;azione a Slack. Per utilizzare <a href=\"https:\/\/kinsta.com\/it\/docs\/kinsta-api\/\">l&#8217;API di Kinsta<\/a>, \u00e8 necessario avere un account con almeno un <a href=\"https:\/\/kinsta.com\/it\/hosting-wordpress\/\">sito WordPress<\/a>, un&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">applicazione<\/a> o un <a href=\"https:\/\/sevalla.com\/database-hosting\/\">database<\/a> in <a href=\"https:\/\/my.kinsta.com\/?lang=it\">MyKinsta<\/a>. Sar\u00e0 inoltre necessario generare una chiave API per autenticarsi e accedere al proprio account tramite l&#8217;API.<\/p>\n<h3>Come creare una chiave API di Kinsta<\/h3>\n<p>Per generare una chiave API:<\/p>\n<ol start=\"1\">\n<li>Andare alla dashboard di <a href=\"https:\/\/my.kinsta.com\/?lang=it\">MyKinsta<\/a>.<\/li>\n<li>Andare alla pagina delle <strong>chiavi API<\/strong> (<strong>Nome<\/strong> &gt; <strong>Impostazioni dell&#8217;azienda<\/strong> &gt; <strong>Chiavi API<\/strong>).<\/li>\n<li>Cliccare su <strong>Crea chiave API<\/strong>.<\/li>\n<li>Scegliere una data di scadenza o impostare una data di inizio personalizzata e un numero di ore di scadenza della chiave.<\/li>\n<li>Assegnare alla chiave un nome univoco.<\/li>\n<li>Cliccare su <strong>Genera<\/strong>.<\/li>\n<\/ol>\n<p>Una volta creata la chiave API, copiatela e conservatela in un posto sicuro, perch\u00e9 \u00e8 l&#8217;<strong>unico momento in cui potrete vederla<\/strong>. Per questo progetto, salvatela nel file <strong>.env<\/strong> come <code>KINSTA_API_KEY<\/code>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Considerate la chiave API come un&#8217;informazione sensibile e tenetela al sicuro. Evitate di condividere la chiave con persone non autorizzate. Se state lavorando a un progetto collaborativo, vi consigliamo di utilizzare un <a href=\"https:\/\/kinsta.com\/it\/blog\/password-manager\/\">gestore di password<\/a> per condividerla in modo sicuro.<\/p>\n<\/aside>\n\n<h3>Interagire con l&#8217;API di Kinsta in Node.js<\/h3>\n<p>L&#8217;interazione con l&#8217;API di Kinsta pu\u00f2 essere ottenuta utilizzando diverse librerie Node.js, tra cui <a href=\"https:\/\/kinsta.com\/it\/blog\/librerie-node-js\/#10-axios\">Axios<\/a>. Tuttavia, in questo tutorial opteremo per il metodo JavaScript <code>fetch()<\/code>, che ora \u00e8 supportato e funziona in modo efficiente nelle <a href=\"https:\/\/kinsta.com\/it\/blog\/node-js-20\/#performance\">ultime versioni di Node.js<\/a>.<\/p>\n<p>Per questo Slackbot verranno effettuate molte richieste API, tra cui GET e POST. Per evitare ripetizioni, memorizziamo l&#8217;URL dell&#8217;API e le intestazioni in variabili in modo che il codice sia facile da mantenere e da leggere:<\/p>\n<pre><code class=\"language-js\">\/\/ kinsta API utilities\nconst KinstaAPIUrl = 'https:\/\/api.kinsta.com\/v2';\n\nconst getHeaders = {\n    Authorization: `Bearer ${process.env.KINSTA_API_KEY}`,\n};\n\nconst postHeaders = {\n    'Content-Type': 'application\/json',\n    Authorization: `Bearer ${process.env.KINSTA_API_KEY}`,\n};<\/code><\/pre>\n<p>Prima di iniziare a codificare la risposta dell&#8217;applicazione a ogni comando slash, dobbiamo copiare l&#8217;ID azienda Kinsta e memorizzarlo nel file <strong>.env<\/strong> come <code>KINSTA_COMPANY_ID<\/code>. Sar\u00e0 necessario per recuperare l&#8217;elenco dei siti.<\/p>\n<h3>Implementazione del comando slash ID ambiente<\/h3>\n<p>Quando utilizziamo il comando slash <code>\/environment_id<\/code>, qualsiasi valore fornito dopo il comando verr\u00e0 recuperato e utilizzato nel nostro server Node.js. Per questo comando \u00e8 stato aggiunto un suggerimento per indicare che si aspetta un parametro: <code>[Site name]<\/code>.<\/p>\n<p>Ogni sito su MyKinsta ha un nome univoco, ma non esiste un endpoint diretto per richiedere l&#8217;ID ambiente di un sito utilizzando il suo nome. Di conseguenza, dobbiamo prima fare una richiesta per tutti i siti dell&#8217;account aziendale e poi utilizzare il metodo <code>find()<\/code> per individuare il sito il cui nome corrisponde a quello passato con il comando slash.<\/p>\n<p>A tal fine, vengono effettuate due richieste. Prima si ottiene l&#8217;ID del sito e poi si effettua un&#8217;altra richiesta all&#8217;endpoint <code>\/environments<\/code> per recuperare l&#8217;ID dell&#8217;ambiente associato a quel sito.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Quando si utilizzano i comandi slash, \u00e8 fondamentale fare attenzione al numero di richieste effettuate. L&#8217;API di Kinsta impone dei limiti: si possono effettuare un massimo di 60 richieste al minuto per le operazioni normali, mentre per la creazione di siti il limite \u00e8 di 3 richieste al minuto a causa dell&#8217;uso intensivo di risorse di questa operazione.<\/p>\n<\/aside>\n\n<p>Per mantenere il codice chiaro e la manutenzione semplice, ogni richiesta viene effettuata in modo indipendente. Ci\u00f2 significa avere funzioni individuali per queste richieste e richiamare tali funzioni nel listener di comandi.<\/p>\n<p>Iniziamo recuperando l&#8217;elenco di tutti i siti:<\/p>\n<pre><code class=\"language-js\">async function getAllSites() {\n    const query = new URLSearchParams({\n        company: process.env.KINSTA_COMPANY_ID,\n    }).toString();\n    const resp = await fetch(`${KinstaAPIUrl}\/sites?${query}`, {\n        method: 'GET',\n        headers: getHeaders,\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>Il codice precedente restituir\u00e0 un array contenente tutti i siti. Nell&#8217;ascoltatore del comando <code>\/environment_id<\/code> recupereremo la risposta e la memorizzeremo in una variabile. Quindi, utilizzando il metodo <code>find()<\/code>, cerchiamo un sito il cui nome corrisponda a quello passato da Slack. Le informazioni provenienti da Slack sono memorizzate in <code>command.text<\/code>.<\/p>\n<pre><code class=\"language-js\">app.command('\/environment_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let siteName = command.text;\n    let response = await getAllSites();\n    if (response) {\n        let mySites = response.company.sites;\n        let currentSite = mySites.find((site) =&gt; site.name === siteName);\n        \/\/ get environment ID\n    }\n});<\/code><\/pre>\n<p>Ora che abbiamo il sito, utilizziamo il suo ID per ottenere l&#8217;ID dell&#8217;ambiente. Come per la ricerca di un elenco di siti, creiamo una funzione dedicata per fare una richiesta HTTP all&#8217;endpoint <code>\/environments<\/code>:<\/p>\n<pre><code class=\"language-js\">async function getEnvironmentId(siteId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/${siteId}\/environments`, {\n        method: 'GET',\n        headers: getHeaders,\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>Il codice precedente prevede che l&#8217;ID del sito venga passato come argomento quando si chiama questa funzione nell&#8217;ascoltatore di comandi <code>\/environment_id<\/code>. Una volta ricevuto l&#8217;ID, viene effettuata la richiesta API e la risposta viene memorizzata in una variabile. Quindi, possiamo inviare l&#8217;ID dell&#8217;ambiente su Slack utilizzando il metodo <code>say()<\/code>:<\/p>\n<pre><code class=\"language-js\">app.command('\/environment_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let siteName = command.text;\n    let response = await getAllSites();\n    if (response) {\n        let mySites = response.company.sites;\n        let currentSite = mySites.find((site) =&gt; site.name === siteName);\n        let envIdResponse = await getEnvironmentId(currentSite.id);\n        let envId = envIdResponse.site.environments[0].id;\n        if (envId) {\n            say(`Hey \ud83d\udc4b,\\n\\nThe environment ID for \"${siteName}\" is \ud83d\udc49 ${envId}`);\n        }\n    }\n});<\/code><\/pre>\n<p>A questo punto, quando apriamo Slack e digitiamo <code>\/environment_id<\/code> seguito da un nome di sito valido, ad esempio <code>\/environment_id fashionstored<\/code>, riceveremo una risposta simile a questa:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/environment-id-slash-command.jpg\" alt=\"Comando slash ID ambiente\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Comando slash ID ambiente.<\/figcaption><\/figure>\n<h3>Implementare un comando slash per gli strumenti del sito (svuotare la cache del sito, riavviare il motore PHP)<\/h3>\n<p>Due operazioni che si possono implementare facilmente tramite l&#8217;API senza dover navigare in MyKinsta sono gli <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Site-Tools\/\" target=\"_blank\" rel=\"noopener noreferrer\">strumenti del sito<\/a> Svuota cache del sito e Riavvia motore PHP.<\/p>\n<p>Per eseguire qualsiasi operazione tra quelle degli strumenti del sito, tutto ci\u00f2 di cui abbiamo bisogno \u00e8 l&#8217;ID dell&#8217;ambiente. Questo ID viene utilizzato per effettuare una richiesta POST ai siti <code>\/sites\/tools\/clear-cache<\/code> e <code>\/sites\/tools\/restart-php<\/code>. Come in precedenza, eseguiamo la richiesta API in modo indipendente e poi restituiamo la risposta:<\/p>\n<pre><code class=\"language-js\">async function clearSiteCache(environmentId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/tools\/clear-cache`, {\n        method: 'POST',\n        headers: postHeaders,\n        body: JSON.stringify({\n            environment_id: environmentId,\n        }),\n    });\n    const data = await resp.json();\n    return data;\n}\n\nasync function restartPHPEngine(environmentId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/tools\/restart-php`, {\n        method: 'POST',\n        headers: postHeaders,\n        body: JSON.stringify({\n            environment_id: environmentId,\n        }),\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>Successivamente, creeremo degli ascoltatori di comandi per entrambe le operazioni in Slack. Questi ascoltatori saranno configurati per attivarsi ogni volta che viene utilizzato il rispettivo comando:<\/p>\n<pre><code class=\"language-js\">app.command('\/clear_site_cache', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let environmentId = command.text;\n    let response = await clearSiteCache(environmentId);\n    if (response) {\n        say(\n            `Hey \ud83d\udc4b, \\n\\n${response.message} by using the \/operation_status slack commmand. nnOperation Id is ${response.operation_id}`\n        );\n    }\n});\n\napp.command('\/restart_php_engine', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let environmentId = command.text;\n    let response = await restartPHPEngine(environmentId);\n    if (response) {\n        say(\n            `Hey \ud83d\udc4b, \\n\\n${response.message} by using the \/operation_status slack command. nnOperation Id is ${response.operation_id}`\n        );\n    }\n});<\/code><\/pre>\n<p>Nel codice sopra riportato, i dati recuperati dalle richieste API vengono utilizzati per costruire la risposta inviata a Slack. La risposta include informazioni sull&#8217;operazione, come il messaggio e l&#8217;ID dell&#8217;operazione.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/restart-php-engine-slackbot.jpg\" alt=\"Riavviare il motore PHP con un comando slash\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Riavviare il motore PHP con un comando slash.<\/figcaption><\/figure>\n<p>Implementando questi comandi slash e i relativi ascoltatori, potremo far interagire lo Slackbot con l&#8217;API di Kinsta, rendendo pi\u00f9 facile che mai la gestione della cache e del motore PHP del sito direttamente da Slack.<\/p>\n<h3>Implementare un comando Slash di stato dell&#8217;operazione<\/h3>\n<p>Sarebbe anche opportuno ottenere lo stato delle nostre operazioni da Slack. Per farlo, utilizzeremo l&#8217;endpoint <code>\/operations<\/code> insieme al comando <code>operation_id<\/code>. Come in precedenza, creiamo una funzione per gestire questa richiesta e restituire la risposta:<\/p>\n<pre><code class=\"language-js\">async function CheckOperationStatus(operationId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/operations\/${operationId}`, {\n        method: 'GET',\n        headers: getHeaders,\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>Definiamo l&#8217;ascoltatore di comandi per attivare la richiesta e passare l&#8217;indirizzo <code>operation ID<\/code> inviato via Slack:<\/p>\n<pre><code class=\"language-js\">app.command('\/operation_status', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let operationId = command.text;\n    let response = await CheckOperationStatus(operationId);\n    let operationMessage = response.message;\n    if (operationMessage) {\n        say(`Hey \ud83d\udc4b, \\n\\n${operationMessage}`);\n    }\n});<\/code><\/pre>\n<p>Ora, quando usiamo il comando <code>\/operation_status<\/code> slash con un qualsiasi <code>operation ID<\/code> valido, otterremo lo stato dell&#8217;ID restituito via Slack.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/check-operation-status-slackbot.jpg\" alt=\"Controllare lo stato delle operazioni con slackbot\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Controllare lo stato delle operazioni con slackbot.<\/figcaption><\/figure>\n<p>Oltre ai comandi che abbiamo gi\u00e0 implementato con l&#8217;API Kinsta, ci sono altri comandi che possono essere integrati e altri eventi che possono essere gestiti dallo Slackbot. Ad esempio, lo Slackbot pu\u00f2 rispondere quando viene menzionato o taggato con il simbolo <code>@<\/code>.<\/p>\n<p>Per abilitare questa funzionalit\u00e0, \u00e8 necessario sottoscrivere gli eventi necessari in Slack. Invece di usare il metodo <code>app.command()<\/code>, utilizzeremo il metodo <code>app.message()<\/code>, che accetta i parametri <code>command<\/code> e <code>say<\/code>.<\/p>\n<p>Ecco un esempio di come ottenere questo risultato:<\/p>\n<pre><code class=\"language-js\">app.message(\"hey\", async ({ command, say }) =&gt; {\n  say(\"Woah! It works!\");\n});<\/code><\/pre>\n<p>Dopo aver creato lo Slackbot, potreste notare di non riuscire a inviargli dei messaggi. Navigando verso il bot nella scheda App di Slack, potreste trovare un messaggio che dice: &#8220;L&#8217;invio di messaggi a questa applicazione \u00e8 stato disattivato&#8221;. Non preoccupatevi, possiamo risolvere facilmente il problema!<\/p>\n<p>Per abilitare l&#8217;invio di messaggi, seguite questi passaggi:<\/p>\n<ol start=\"1\">\n<li>Cliccare sull&#8217;opzione del menu <strong>App Home<\/strong> che si trova nella barra laterale sinistra.<\/li>\n<li>Questa pagina permette di gestire tutte le impostazioni del bot. Scorrere verso il basso fino a trovare la casella &#8220;Consenti agli utenti di inviare comandi e messaggi Slash dalla scheda messaggi&#8221;.<\/li>\n<li>Spuntare la casella per abilitare questa funzionalit\u00e0.<\/li>\n<\/ol>\n<p>Una volta apportate queste modifiche, \u00e8 fondamentale ricaricare l&#8217;applicazione Slack per riflettere gli aggiornamenti. Se utilizzate un Mac, potete ricaricare Slack premendo <strong>CMD + R<\/strong>. Per gli altri utenti di PC, potete farlo premendo <strong>CTRL + R<\/strong>.<\/p>\n<p>Ora siete pronti per inviare messaggi al vostro bot! Nell&#8217;app Slack, dovreste vedere l&#8217;app Kinsta Bot elencata sotto la sezione <strong>Your Apps<\/strong>. Cliccateci sopra per iniziare a inviare messaggi. Provate liberamente tutti i comandi slash che abbiamo configurato e dovrebbero funzionare perfettamente. E godetevi un&#8217;interazione perfetta con il vostro Slackbot!<\/p>\n<p>Il codice sorgente completo di questo progetto \u00e8 disponibile su <a href=\"https:\/\/github.com\/kinsta\/SlackBot-Kinsta-API\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>.<\/p>\n<h2>Distribuire l&#8217;applicazione Node.js su Kinsta<\/h2>\n<p>Quando costruiamo il nostro server Node.js, \u00e8 importante <a href=\"https:\/\/sevalla.com\/application-hosting\/\">distribuirlo<\/a> in modo che lo Slackbot sia sempre disponibile, anche se si interrompe lo sviluppo locale. Potete effettuare il deploy sulla piattaforma di <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni<\/a> di Kinsta se il codice \u00e8 ospitato sui provider Git <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">GitHub<\/a> o <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>.<\/p>\n<p>Per distribuire il repository su Kinsta, seguite i passaggi qui sotto:<\/p>\n<ol start=\"1\">\n<li>Accedere all&#8217;account Kinsta nella dashboard MyKinsta.<\/li>\n<li>Cliccare su <strong>Aggiungi servizio<\/strong>.<\/li>\n<li>Selezionare <strong>Applicazione<\/strong> dal menu a tendina.<\/li>\n<li>Nella finestra di dialogo che appare, scegliere il repository che si vuole distribuire. Se si hanno pi\u00f9 branch, \u00e8 possibile selezionare il branch desiderato e dare un nome all&#8217;applicazione.<\/li>\n<li>Selezionare uno dei data center disponibili. Kinsta rilever\u00e0 e installer\u00e0 le dipendenze dell&#8217;applicazione dal file package.json, quindi eseguir\u00e0 la compilazione e la distribuzione.<\/li>\n<\/ol>\n<p>Infine, non \u00e8 sicuro inviare le chiavi API a host pubblici come un provider Git. Quando l&#8217;hosting \u00e8 su Kinsta, \u00e8 possibile aggiungerle come <a href=\"https:\/\/docs.sevalla.com\/applications\/environment-variables\">variabili d&#8217;ambiente<\/a> utilizzando lo stesso nome e valore della variabile specificata nel file <strong>.env<\/strong> di sviluppo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/set-env-variables-myKinsta.jpg\" alt=\"Impostare le variabili d'ambiente su MyKinsta\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Impostare le variabili d&#8217;ambiente su MyKinsta durante la distribuzione.<\/figcaption><\/figure>\n<p>Una volta avviata la distribuzione dell&#8217;applicazione, il processo inizier\u00e0 e si concluder\u00e0 in genere entro pochi minuti. Se qualche problema con le configurazioni di Node.js influisce sulla distribuzione, \u00e8 possibile aggiungere un buildpack Node.js nella scheda delle impostazioni di distribuzione.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>\u00c8 possibile attivare la distribuzione automatica, in modo che Kinsta esegua nuovamente la distribuzione dell&#8217;applicazione ogni volta che la base di codice viene modificata e inviata a GitHub.<\/p>\n<\/aside>\n\n<h2>Riepilogo<\/h2>\n<p>In questo articolo abbiamo imparato a costruire un&#8217;applicazione Node.js che collega Slack con l&#8217;API di Kinsta e a distribuirla su Kinsta.<\/p>\n<p>Slackbot e l&#8217;API di Kinsta facilitano il monitoraggio e la gestione dei servizi ospitati da Kinsta. Partendo dalle basi di questo tutorial, immaginate cosa potreste fare con uno Slackbot e l&#8217;API. Pensate a comandi pi\u00f9 complessi per eseguire operazioni come la <a href=\"https:\/\/kinsta.com\/it\/blog\/clonare-sito-wordpress\/\">clonazione di un sito<\/a> WordPress e la <a href=\"https:\/\/kinsta.com\/it\/blog\/wordpress-api\/\">creazione di un sito<\/a> direttamente da Slack.<\/p>\n<p><em>Come utilizzate l&#8217;API di Kinsta? Quali funzioni vorreste vedere aggiunte\/esposte prossimamente?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Slack \u00e8 un&#8217;ottima piattaforma di messaggistica che permette ai team di collaborare in modo efficiente. E se questa collaborazione implica anche la gestione di pi\u00f9 siti &#8230;<\/p>\n","protected":false},"author":287,"featured_media":72195,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26232,26203],"class_list":["post-72194","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito<\/title>\n<meta name=\"description\" content=\"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito\" \/>\n<meta property=\"og:description\" content=\"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-10T13:49:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-11T06:55:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito\",\"datePublished\":\"2023-08-10T13:49:26+00:00\",\"dateModified\":\"2023-10-11T06:55:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\"},\"wordCount\":3468,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\",\"name\":\"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"datePublished\":\"2023-08-10T13:49:26+00:00\",\"dateModified\":\"2023-10-11T06:55:36+00:00\",\"description\":\"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito","description":"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/","og_locale":"it_IT","og_type":"article","og_title":"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito","og_description":"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.","og_url":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-08-10T13:49:26+00:00","article_modified_time":"2023-10-11T06:55:36+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Joel Olawanle","Tempo di lettura stimato":"20 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito","datePublished":"2023-08-10T13:49:26+00:00","dateModified":"2023-10-11T06:55:36+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/"},"wordCount":3468,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/","url":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/","name":"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","datePublished":"2023-08-10T13:49:26+00:00","dateModified":"2023-10-11T06:55:36+00:00","description":"Scopri come creare uno Slackbot con Node.js e Kinsta API per semplificare la gestione del sito con i comandi Slack slash.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/it\/argomenti\/api\/"},{"@type":"ListItem","position":3,"name":"Come costruire uno Slackbot con Node.js e Kinsta API per gestire un sito"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/it\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=72194"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72194\/revisions"}],"predecessor-version":[{"id":73692,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72194\/revisions\/73692"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72194\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/72195"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=72194"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=72194"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=72194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}