{"id":75414,"date":"2023-12-08T14:57:47","date_gmt":"2023-12-08T13:57:47","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=75414&#038;preview=true&#038;preview_id=75414"},"modified":"2023-12-15T18:40:44","modified_gmt":"2023-12-15T17:40:44","slug":"notifiche-di-slack-all-app","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/","title":{"rendered":"Comunicazione Slack in tempo reale con l&#8217;applicazione Python ospitata da Kinsta"},"content":{"rendered":"<p>Nel regno dell&#8217;hosting ad alte prestazioni e degli strumenti di sviluppo versatili, Kinsta si distingue come piattaforma leader per <a href=\"https:\/\/kinsta.com\/it\/hosting-wordpress\/\">WordPress<\/a>, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">applicazioni<\/a>, <a href=\"https:\/\/sevalla.com\/database-hosting\/\">database<\/a> e persino per l&#8217;<a href=\"https:\/\/sevalla.com\/static-site-hosting\/\">hosting gratuito di siti statici<\/a>.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/it\/blog\/come-utilizzare-slack\/\">Slack<\/a>, famoso per i suoi comandi Slash, si integra perfettamente con le app e i servizi ospitati da Kinsta, consentendo agli utenti di automatizzare le attivit\u00e0 e di migliorare notevolmente l&#8217;efficienza.<\/p>\n<p>Questa guida spiega come impostare la comunicazione in tempo reale tra Slack e un&#8217;applicazione Python ospitata su Kinsta. Sfruttando i comandi Slash, gli utenti dell&#8217;applicazione hanno la possibilit\u00e0 di creare, interrogare ed eliminare rapidamente i prodotti.<\/p>\n<p>Questa integrazione consente di aggiornare dinamicamente l&#8217;inventario dei prodotti, garantendo risposte tempestive alle esigenze dei clienti.<\/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>Come funzionano i comandi slash di Slack<\/h2>\n<p>I comandi Slack Slash sono scorciatoie basate sul testo. Iniziano con una barra in avanti (<code>\/<\/code>) seguita da una parola chiave specifica e da un parametro opzionale.<\/p>\n<p>I comandi Slash attivano azioni o interagiscono direttamente con le integrazioni all&#8217;interno dell&#8217;interfaccia Slack. Ad esempio, <code>\/remind<\/code> permette di impostare i promemoria direttamente attraverso le notifiche di Slack.<\/p>\n<p>Con le <a href=\"https:\/\/kinsta.com\/it\/blog\/integrazioni-slack\/\">integrazioni di Slack<\/a>, si possono configurare comandi su misura per le proprie applicazioni. In questo tutorial, il team potr\u00e0 interrogare senza problemi l&#8217;inventario della nostra applicazione utilizzando il comando Slash <code>\/check_inventory<\/code> e altri comandi.<\/p>\n<p>L&#8217;integrazione di Slack con le applicazioni favorisce un&#8217;interazione perfetta e flussi di lavoro semplificati in un ambiente di lavoro moderno. Migliora la comunicazione e la produttivit\u00e0 attraverso:<\/p>\n<ul>\n<li><strong>Un hub di comunicazione centralizzato<\/strong>: Slack funge da spazio unificato per i team. L&#8217;integrazione delle app in Slack consolida i canali, mantenendo le conversazioni e le informazioni in un unico luogo e aumentando l&#8217;efficienza.<\/li>\n<li><strong>Aggiornamenti in tempo reale<\/strong>: le app integrate forniscono avvisi istantanei sugli eventi chiave, assicurando che tutti siano informati e reagiscano rapidamente ai cambiamenti o agli aggiornamenti.<\/li>\n<li><strong>Flussi di lavoro semplificati<\/strong>: le integrazioni automatizzano attivit\u00e0 come le notifiche dagli strumenti di gestione dei progetti o l&#8217;attivazione di azioni nel software CRM, riducendo il lavoro manuale.<\/li>\n<li><strong>Collaborazione migliorata<\/strong>: i membri del team che accedono alle app direttamente da Slack favoriscono una collaborazione perfetta. Possono facilmente condividere, modificare file e discutere di progetti, promuovendo il lavoro di squadra tra le varie funzioni.<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Potete sfruttare l&#8217;<a href=\"https:\/\/kinsta.com\/it\/docs\/kinsta-api\/\">API di Kinsta<\/a> insieme ai comandi Slash di Slack per <a href=\"https:\/\/kinsta.com\/it\/blog\/creare-slackbot-gestire-sito\/\">gestire le vostre applicazioni, il database e i siti<\/a> ospitati su Kinsta.<\/p>\n<\/aside>\n\n<h2>Come creare un&#8217;applicazione Python su Kinsta<\/h2>\n<p>In questo articolo, costruiremo e distribuiremo un&#8217;applicazione per la gestione dei prodotti su Kinsta. Poi, la integreremo con Slack per esplorare i comandi Slash. Gli utenti potranno aggiungere, eliminare e interrogare i prodotti dell&#8217;inventario tramite i comandi Slash in Slack.<\/p>\n<h3>Prerequisiti<\/h3>\n<p>Per seguire questa guida, partiamo dal presupposto di avere:<\/p>\n<ul>\n<li>Conoscenza di base di <a href=\"https:\/\/kinsta.com\/it\/argomenti\/python\/\">Python<\/a><\/li>\n<li>Un <a href=\"https:\/\/slack.com\/workspace-signin\" target=\"_blank\" rel=\"noopener noreferrer\">account Slack<\/a><\/li>\n<\/ul>\n<p>Per prima cosa, configuriamo un progetto Python su Kinsta. Per farlo, seguiamo questi passi:<\/p>\n<ol start=\"1\">\n<li>Andiamo al <a href=\"https:\/\/github.com\/kinsta\/hello-world-python\" target=\"_blank\" rel=\"noopener noreferrer\">template Python di Kinsta<\/a> su GitHub.<\/li>\n<li>Selezioniamo <strong>Use this template<\/strong> &gt; <strong>Create a new repository<\/strong> per copiare il codice iniziale in un repository del nostro account <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-github\/\">GitHub<\/a>.<\/li>\n<li>Quando il repository sar\u00e0 pronto, accediamo o creiamo un account per visualizzare la dashboard <a href=\"https:\/\/my.kinsta.com\/?lang=it\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta<\/a>.<\/li>\n<li>Autorizziamo Kinsta con il nostro 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>).<\/li>\n<li>Clicchiamo su <strong>Applicazioni<\/strong> nella barra laterale di sinistra e poi su <strong>Aggiungi applicazione<\/strong>.<\/li>\n<li>Selezioniamo il repository e il branch da cui desideriamo effettuare il deploy.<\/li>\n<li>Assegniamo un nome univoco all&#8217;applicazione e scegliamo la posizione del centro dati.<\/li>\n<li>Configuriamo poi l&#8217;ambiente di build. Selezioniamo la configurazione della <strong>build machine standard<\/strong> con l&#8217;opzione <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/nixpacks\">Nixpacks<\/a> consigliata per questa demo.<\/li>\n<li>Usiamo tutte le configurazioni predefinite e poi clicchiamo su <strong>Crea applicazione<\/strong>.<\/li>\n<\/ol>\n<p>La distribuzione richiede in genere pochi minuti e, una volta completata, riceveremo un link all&#8217;applicazione e una dashboard contenente le informazioni sulla distribuzione.<\/p>\n<h2>Come impostare l&#8217;integrazione di Slack in un&#8217;applicazione Python<\/h2>\n<p>Iniziamo creando un&#8217;applicazione Slack e poi configurando i comandi Slash che saranno collegati all&#8217;applicazione Python tramite alcuni token. Configuriamo un&#8217;applicazione Slack:<\/p>\n<ol start=\"1\">\n<li>Accediamo alla dashboard delle <a href=\"https:\/\/api.slack.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">API di Slack<\/a>.<\/li>\n<li>Clicchiamo su <strong>New app<\/strong> e scegliamo <strong>From scratch<\/strong>.<\/li>\n<li>Diamo un nome all&#8217;app Slack (ad esempio, <strong>product-inventory<\/strong>).<\/li>\n<li>Selezioniamo l&#8217;area di lavoro e clicchiamo su <strong>Create app<\/strong>.<\/li>\n<\/ol>\n<p>Ora, per l&#8217;autenticazione:<\/p>\n<ol start=\"1\">\n<li>Abilitiamo <strong>Socket Mode<\/strong> nella barra laterale della dashboard Slack.<\/li>\n<li>Generiamo un token a livello di app digitando il nome del token e Clicchiamondo su <strong>Generate<\/strong>.<\/li>\n<li>Salviamo questo token a livello di app per configurare le variabili ambientali in seguito.<\/li>\n<\/ol>\n<h3>Come configurare i comandi Slash<\/h3>\n<p>Per configurare i comandi Slash dell&#8217;app:<\/p>\n<ol start=\"1\">\n<li>Andiamo alla sezione <strong>Features<\/strong> sotto <strong>Basic information<\/strong> nella dashboard di Slack API. Scegliamo <strong>Slash Commands<\/strong>.\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/slack-api-features.png\" alt=\"Dashboard dell'API di Slack con opzioni per l'aggiunta di caratteristiche e funzioni\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">La dashboard di Slack API con le opzioni per aggiungere caratteristiche e funzioni.<\/figcaption><\/figure><\/li>\n<li>Clicchiamo su <strong>Create New Command<\/strong> per configurare un nuovo comando.\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/create-slash-command.jpg\" alt=\"Pagina di creazione di un nuovo comando Slack con opzioni per il comando, una breve descrizione e un suggerimento d'uso. Presenta anche dettagli per i canali di fuga, gli utenti e i link inviati alla vostra app e un'anteprima di una voce di completamento automatico.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Pagina Crea nuovo comando su Slack.<\/figcaption><\/figure><\/li>\n<li>Nella pagina <strong>Create New Command<\/strong>, inseriamo i dettagli del nostro nuovo comando Slash. Ad esempio, digitiamo <code>\/hi<\/code> nel campo Command. Aggiungiamo facoltativamente una breve descrizione come &#8220;Dice ciao!&#8221; e forniamo un suggerimento d&#8217;uso. Clicchiamo su <strong>Save<\/strong>.<\/li>\n<li>Nella sezione Install App della barra laterale, clicchiamo su <strong>Install to Workspace<\/strong>.<\/li>\n<li>Accediamo al token OAuth dell&#8217;utente del bot andando su <strong>OAuth &#038; Permissions<\/strong> nella barra laterale. Salviamo questo token per riferimenti futuri.<\/li>\n<\/ol>\n<h3>Come aggiungere i token al deployment delle applicazioni di Kinsta<\/h3>\n<ol start=\"1\">\n<li>Andiamo alla sezione <strong>Variabili d&#8217;ambiente<\/strong> sotto <strong>Impostazioni<\/strong> dell&#8217;applicazione in MyKinsta.<\/li>\n<li>Clicchiamo su <strong>Aggiungi variabile d&#8217;ambiente<\/strong>.\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/environment-variables-kinsta.png\" alt=\"Slack Aggiunta di una variabile d'ambiente con chiavi, valori e la possibilit\u00e0 di rimuoverli o aggiungerne altri\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Il popup di Slack Add environment variable.<\/figcaption><\/figure><\/li>\n<li>Per la <strong>chiave 1<\/strong>, SLACK_BOT_TOKEN, incolliamo il token OAuth dell&#8217;utente del bot nel <strong>valore 1<\/strong>. Per la <strong>Chiave 2<\/strong>, SLACK_APP_TOKEN, incolliamo il token a livello di app nel <strong>Valore 2<\/strong>.<\/li>\n<li>Assicuriamoci che entrambe le opzioni siano selezionate e clicchiamo su <strong>Deploy now<\/strong> in modo che Kinsta possa distribuire nuovamente l&#8217;applicazione con le variabili d&#8217;ambiente.<\/li>\n<\/ol>\n<h2>Come implementare la comunicazione in tempo reale<\/h2>\n<p>Per questa demo si utilizza il <a href=\"https:\/\/github.com\/kinsta\/hello-world-python\" target=\"_blank\" rel=\"noopener noreferrer\">modello Python di Kinsta<\/a>, che contiene i seguenti file:<\/p>\n<ul>\n<li><strong>Procfile<\/strong>: specifichiamo i comandi per eseguire l&#8217;applicazione.<\/li>\n<li><strong>requirements.txt<\/strong>: elenca le dipendenze necessarie per l&#8217;applicazione Python.<\/li>\n<li><strong>server.py<\/strong>: il file principale dell&#8217;applicazione Python, che gestisce le funzionalit\u00e0 o le operazioni lato server.<\/li>\n<\/ul>\n<p>Kinsta crea automaticamente un <a href=\"https:\/\/docs.sevalla.com\/applications\/processes\">processo<\/a> basato sul <strong>Procfile<\/strong> nella root del repository quando distribuisce un&#8217;applicazione. Il <strong>Procfile<\/strong> contiene il seguente codice.<\/p>\n<pre><code class=\"language-python\">web: python server.py<\/code><\/pre>\n<p>Questo comando esegue il codice contenuto in <strong>server.py<\/strong>. Kinsta installa anche le dipendenze Python contenute nel file <strong>requirements.txt<\/strong> durante la distribuzione e la ridistribuzione.<\/p>\n<p>Ora utilizziamo il <a href=\"https:\/\/slack.dev\/bolt-python\/concepts\" target=\"_blank\" rel=\"noopener noreferrer\">framework Bolt<\/a> per impostare la comunicazione in tempo reale con l&#8217;applicazione. Aggiungiamo le seguenti righe al file <strong>requirements.txt<\/strong> per installare automaticamente Bolt sull&#8217;applicazione Python quando aggiorniamo il repository.<\/p>\n<pre><code class=\"language-markdown\">slack-bolt==1.18.0\nslack-sdk==3.23.0<\/code><\/pre>\n<p>Inoltre, aggiungiamo la libreria <code>psycopg2<\/code> al file <strong>requirements.txt<\/strong>. Questa verr\u00e0 utilizzata per connettersi a un database Postgres.<\/p>\n<pre><code class=\"language-markdown\">psycopg2-binary==2.9.9<\/code><\/pre>\n<h3>Come implementare un database Postgres con Kinsta<\/h3>\n<p>L&#8217;applicazione per l&#8217;inventario dei prodotti ha bisogno di un modo per conservare i dati dei prodotti che Slash Commands aggiunge al <a href=\"https:\/\/kinsta.com\/database\/\">database<\/a>. Per creare un&#8217;archiviazione persistente dei dati, possiamo utilizzare il database ospitato da Kinsta.<\/p>\n<ol start=\"1\">\n<li>Per prima cosa, distribuiamo un <a href=\"https:\/\/sevalla.com\/database-hosting\/\">database Postgres<\/a> sulla dashboard di Kinsta navigando nella sezione <strong>Database<\/strong> nella barra laterale della dashboard di MyKinsta.<\/li>\n<li>Clicchiamo su <strong>Crea un database<\/strong>. Configuriamo i dettagli del database inserendo un nome e selezionando il tipo di database. Selezioniamo l&#8217;opzione <strong>PostgreSQL<\/strong> e configuriamo la dimensione desiderata. Il <strong>nome utente<\/strong> e la <strong>password<\/strong> del <strong>database<\/strong> vengono generati automaticamente:\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/create-database-app.png\" alt=\"Modulo per la creazione di un database. I campi includono il nome del database, il nome visualizzato, il tipo e la versione del database, il nome utente e la password del database, la posizione del centro dati e la dimensione. Nella parte inferiore del modulo sono presenti due pulsanti: Annulla e Continua\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Modulo per la creazione di un database.<\/figcaption><\/figure><\/li>\n<li>Clicchiamo su <strong>Continua<\/strong> per terminare la configurazione del database. Attendiamo che il database PostgreSQL venga creato.<br \/>\nUna volta completata la creazione, per ottenere la stringa di connessione per l&#8217;accesso esterno al database, andiamo alla sezione <strong>Connessioni esterne<\/strong> della dashboard del database distribuito e copiamo la stringa di connessione esterna.<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/basic-info-database.png\" alt=\"La pagina informativa per il cruscotto del database distribuito. I dettagli includono le risorse, la posizione, la versione, la data di creazione, un elenco di connessioni interne e le informazioni sulle connessioni interne, compresa la stringa di connessione.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Informazioni sulla connessione esterna del database.<\/figcaption><\/figure>\n<p>Ora possiamo utilizzare questa stringa di connessione per collegarci al database dall&#8217;applicazione Python.<\/p>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Dalla dashboard dell&#8217;applicazione Python, salviamo la stringa di connessione come variabile d&#8217;ambiente sotto <code>DATABASE_CONNECTION_STRING<\/code>, come abbiamo fatto in precedenza con i token di Slack.<\/p>\n<\/aside>\n<\/li>\n<li>Nel progetto Python, creiamo un file <strong>db.py<\/strong> all&#8217;interno della cartella del progetto per le funzioni di inizializzazione del database. Aggiungiamo il seguente codice:\n<pre><code class=\"language-python\">import psycopg2\nimport os\n\n# get connection string from environment variable\nconnection_string = os.environ.get(\"DATABASE_CONNECTION_STRING\")\n \ndef get_conn():\n   # create connection\n   conn = psycopg2.connect(connection_string)\n\n   # Return connection to the database\n   return conn\n     \ndef init_db():\n   # get connection\n   conn = get_conn()\n\n   # get cursor\n   cur = conn.cursor()\n\n   cur.execute(\"\"\"\n       DROP TABLE IF EXISTS products;\n                   \n       CREATE TABLE products (\n           id INTEGER PRIMARY KEY,\n           name TEXT UNIQUE NOT NULL,\n           quantity INTEGER NOT NULL\n       );\n   \"\"\")\n\n   cur.close()\n   conn.commit()\n   conn.close()<\/code><\/pre>\n<p>Quando la funzione <code>get_conn()<\/code> viene chiamata, crea e restituisce una connessione al database Kinsta distribuito utilizzando la stringa di connessione esterna.<\/p>\n<p>La funzione <code>init_db()<\/code> ottiene una connessione al database, definisce lo schema del database e crea la tabella, effettuando anche il commit delle modifiche. Dovremmo chiamare la funzione <code>init_db()<\/code> una sola volta durante la configurazione iniziale dell&#8217;application server, e utilizzare la funzione <code>get_conn()<\/code> nelle chiamate successive per ottenere una connessione al database.<\/li>\n<\/ol>\n<h3>Come implementare i gestori dei comandi Slash<\/h3>\n<p>Ora costruiamo il codice del server dell&#8217;applicazione.<\/p>\n<ol start=\"1\">\n<li>Cancelliamo il contenuto del file <strong>server.py<\/strong> e importiamo le seguenti librerie:\n<pre><code class=\"language-python\">import os\nfrom slack_bolt import App\nfrom slack_bolt.adapter.socket_mode import SocketModeHandler\nfrom db import get_conn, init_db\nfrom psycopg2 import DatabaseError<\/code><\/pre>\n<p>Queste sono necessarie per le funzionalit\u00e0 dell&#8217;app Slack, le connessioni al database e la gestione degli errori.<\/li>\n<li>Aggiungiamo il seguente codice al file <strong>server.py<\/strong> dopo le dichiarazioni di importazione:\n<pre><code class=\"language-python\"># Initialize your app with your bot token\napp = App(\n  token=os.environ.get(\"SLACK_BOT_TOKEN\"),\n)<\/code><\/pre>\n<p>La classe <code>App<\/code> di <code>slack_bolt<\/code> viene utilizzata per creare un&#8217;istanza dell&#8217;app Slack. Inizializza l&#8217;app con il token OAuth dell&#8217;utente bot recuperato dalla variabile d&#8217;ambiente <code>SLACK_BOT_TOKEN<\/code>.<\/li>\n<li>Quindi, distribuiamo un gestore per il comando <code>\/hi<\/code> Slash che abbiamo aggiunto all&#8217;applicazione Slack in precedenza. Aggiungiamo le seguenti righe al file <strong>server.py<\/strong>.\n<pre><code class=\"language-python\"># The hi command simply sends back a greeting\n@app.command(\"\/hi\")\ndef send_hello(ack, respond, command):\n  # Acknowledge command request\n  ack()\n  respond(f\"Hello!\")<\/code><\/pre>\n<p><code>@app.command()<\/code> crea un ascoltatore per la stringa di comando passata come argomento e mappa la seguente funzione per le richieste del comando Slash. La funzione <code>send_hello()<\/code> gestisce la logica delle richieste.<\/p>\n<p>Il codice passa anche le variabili di richiesta <code>ack<\/code>, <code>respond<\/code> e <code>command<\/code> affinch\u00e9 la funzione le utilizzi. Chiamiamo <code>ack<\/code> per confermare la richiesta del comando Slash, in quanto questo \u00e8 il primo passo prima di continuare l&#8217;elaborazione, e chiamiamo <code>respond<\/code> per inviare una risposta testuale.<\/p>\n<p>Quando l&#8217;utente digita il comando Slash <code>\/hi<\/code> nel vostro spazio di lavoro Slack, riceve la risposta &#8220;Ciao!&#8221;<\/li>\n<li>Torniamo alla dashboard dell&#8217;applicazione Slack e aggiungiamo i seguenti comandi.<br \/>\n<table>\n<tbody>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><strong>Comando<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Descrizione breve<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Suggerimento d&#8217;uso<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><code>\/add_product<\/code><\/td>\n<td colspan=\"1\" rowspan=\"1\">Aggiunge un prodotto all&#8217;inventario.<\/td>\n<td colspan=\"1\" rowspan=\"1\">iD_prodotto, nome_prodotto, quantit\u00e0_prodotto<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><code>\/check_inventory<\/code><\/td>\n<td colspan=\"1\" rowspan=\"1\">Controlla se nell&#8217;inventario c&#8217;\u00e8 un prodotto con un ID corrispondente.<\/td>\n<td colspan=\"1\" rowspan=\"1\">prodotto_id<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><code>\/delete_product<\/code><\/td>\n<td colspan=\"1\" rowspan=\"1\">Elimina dall&#8217;inventario il prodotto con l&#8217;ID corrispondente.<\/td>\n<td colspan=\"1\" rowspan=\"1\">prodotto_id<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ora la pagina dei <strong>comandi di Slash<\/strong> dovrebbe assomigliare alla seguente schermata contenente un elenco di comandi e i relativi dettagli.<\/p>\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/all-slash-commands.png\" alt=\"La pagina dei comandi Slash elenca il nome e la descrizione di ciascuno di essi, con le opzioni per modificarli o eliminarli e il pulsante Crea nuovo comando.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Pagina dei comandi Slash dell&#8217;API di Slack.<\/figcaption><\/figure><\/li>\n<li>Aggiungiamo il gestore <code>\/add_product<\/code> al file <strong>server.py<\/strong>.\n<pre><code class=\"language-python\"># command to add products\n@app.command(\"\/add_product\")\ndef add_product(ack, respond, command, request):\n #Acknowledge command request\n ack()\n\n # Extract payload from request\n payload = request.body['text']\n id, name, quantity = [i.strip() for i in payload.split(\",\")]\n  \n # conn object\n conn = None\n\n try:\n   # get conn\n   conn = get_conn()\n\n   # get cursor\n   cur = conn.cursor()\n\n   # Insert product into the database\n   cur.execute(\n     \"INSERT INTO products (id, name, quantity) VALUES (%s, %s, %s)\",\n       (int(id), name, int(quantity))\n   )\n   \n   # close communication with postgresql\n   cur.close()\n   \n   # commit changes\n   conn.commit()\n   \n   # Response\n   respond(f\"\"\"Added product to inventory:\n     id - {id},\n     name - {name},\n     quantity - {quantity}\n   \"\"\")\n\n except DatabaseError:\n   # Send a response\n   respond(f\"Product with ID {id} exists in inventory!\")\n  \n finally:\n   # close connection\n   if conn is not None:\n     conn.close()<\/code><\/pre>\n<p><code>request.body<\/code> accede al payload completo della richiesta che Slack invia durante il processo di gestione.<\/p>\n<p>Quando un utente digita il comando <code>\/add_product<\/code> Slash, l&#8217;applicazione invia il seguente esempio di payload JSON come richiesta POST.<\/p>\n<pre><code class=\"language-python\">{\n    'token': , \n    'team_id': , \n    'team_domain': , \n    'channel_id': , \n    'channel_name': , \n    'user_id': , \n    'user_name': , \n    'command': '\/add_product', \n    'text': '1, notebook, 5', \n    'api_app_id': , \n    'is_enterprise_install': , \n    'response_url': , \n    'trigger_id': \n}<\/code><\/pre>\n<p>I campi <code>command<\/code> e <code>text<\/code> sono inclusi. <code>command<\/code> contiene il comando Slash attivato mentre <code>text<\/code> contiene il testo aggiuntivo. Ad esempio, se l&#8217;utente digita il comando <code>\/add_product 1, notebook, 5<\/code>, <code>text<\/code> contiene &#8220;1, notebook, 5&#8221;.<\/p>\n<p>Il gestore <code>add_product<\/code> estrae l&#8217;ID, il nome e la quantit\u00e0 del prodotto dalla richiesta dell&#8217;utente e si connette al database utilizzando la funzione helper <code>get_conn()<\/code>. Esegue inoltre un&#8217;operazione SQL di inserimento per aggiungere il prodotto al database. Se l&#8217;ID del prodotto esiste gi\u00e0 nel database, il codice gestisce l&#8217;errore e risponde che l&#8217;ID esiste gi\u00e0.<\/li>\n<li>Ora aggiungiamo il resto dei gestori di comandi al file <strong>server.py<\/strong>.\n<pre><code class=\"language-python\"># command to check inventory for a product_id\n@app.command(\"\/check_inventory\")\ndef check_inventory(ack, respond, command, request):\n   # Acknowledge command request\n   ack()\n\n   # Extract payload from request\n   id = request.body['text'].strip()\n\n   # Get a database connection\n   conn = None\n   try:\n       # get conn\n       conn = get_conn()\n\n       # get cursor\n       cur = conn.cursor()\n \n       # Fetch matching product with ID from database\n       cur.execute(\n           \"SELECT * FROM products WHERE id=%s\",\n           (int(id),)\n       )\n\n       product = cur.fetchone()\n\n       # close comms\n       cur.close()\n\n       if product is None:\n           respond(f\"No product with matching ID {id} found.\")\n       else:\n           # Deconstruct tuple if the product exists\n           _, name, quantity = product\n          \n           respond(f\"\"\"Product with ID {id} found:\n                      name - {name},\n                      quantity - {quantity}\n                  \"\"\")\n         \n   except Exception as e:\n       print(\"Connection error: %s\", e)\n         \n   finally:\n       # close connection\n       if conn is not None:\n           conn.close()\n\n# command to delete the matching product_id from inventory\n@app.command(\"\/delete_product\")\ndef delete_product(ack, respond, command, request):\n    #Acknowledge command request\n    ack()\n\n    # Extract payload from request\n    id = request.body['text'].strip()\n    \n    # Get connection\n    conn = None\n    try:\n        # Get connection\n        conn = get_conn()\n     \n        # get cursor\n        cur = conn.cursor()\n     \n        # Insert the product into the database\n        cur.execute(\n            \"DELETE FROM products WHERE id = %s\",\n            (int(id),)\n        )\n        cur.close()\n        conn.commit()\n     \n        # Response\n        respond(f\"Product with ID {id} deleted from inventory!\")\n    except Exception as e:\n        print(\"Connection error: %s\", e)\n    finally:\n        # close connection\n        if conn is not None:\n            conn.close()\n<\/code><\/pre>\n<p>Questi due gestori di comandi interrogano ed eliminano rispettivamente l&#8217;ID del prodotto corrispondente nell&#8217;inventario.<\/li>\n<\/ol>\n<h3>Come eseguire il server<\/h3>\n<ol start=\"1\">\n<li>Per unire l&#8217;inizializzazione del database e la connessione al socket, aggiungiamo le seguenti righe al file <strong>server.py<\/strong>.\n<pre><code class=\"language-python\"># Start your app\nif __name__ == \"__main__\":\n    # Initialize database on start\n    init_db()\n\n    # Connect socket\n    handler = SocketModeHandler(app, os.environ[\"SLACK_APP_TOKEN\"])\n    handler.start()<\/code><\/pre>\n<p>Dobbiamo inizializzare <code>SocketModeHandler<\/code> con il token a livello di applicazione. Usiamo <code>SLACK_APP_TOKEN<\/code> per accedere alla variabile d&#8217;ambiente distribuita nell&#8217;applicazione Kinsta.<\/li>\n<li>Facciamo il commit delle modifiche al repository remoto per distribuirle automaticamente su Kinsta. Ora, <strong>server.py<\/strong> inizializza il database e stabilisce la connessione socket. Kinsta attiver\u00e0 una nuova distribuzione automatica dell&#8217;applicazione Python.<\/li>\n<\/ol>\n<h2>Testare e risolvere i problemi dell&#8217;applicazione<\/h2>\n<p>Possiamo testare l&#8217;applicazione su Slack utilizzando i comandi Slash configurati.<\/p>\n<ol start=\"1\">\n<li style=\"list-style-type: none\">\n<ol start=\"1\">\n<li>Andiamo all&#8217;area di lavoro associata all&#8217;applicazione. Digitiamo il carattere slash (&#8216;\/&#8217;) per visualizzare i comandi dell&#8217;applicazione:\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/testing-slack-slash-commands.png\" alt=\"Il canale Kinsta-demo con un elenco di comandi, tra cui controllare l'ID del prodotto in inventario, aggiungere l'ID del prodotto, il nome o la quantit\u00e0, eliminare l'ID del prodotto e Hi.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Il canale kinsta-demo.<\/figcaption><\/figure><\/li>\n<li>Proviamo ogni comando Slash. Ad esempio, digitiamo <code>\/hi<\/code>. Otterremo la risposta &#8220;Hi!&#8221;\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/returns-hello.png\" alt=\"Risposta al comando Hi con il messaggio Hi!'\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Risposta al comando Hi.<\/figcaption><\/figure><\/li>\n<li>Verifichiamo cosa succede quando aggiungiamo lo stesso prodotto due volte. Eseguiamo il comando slash <code>\/add_product 1, notepad, 2<\/code> due volte.\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/adding-product.png\" alt=\"Risultato dell'esecuzione del comando add product due volte. Mostra una quantit\u00e0 di 2\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Aggiungere un prodotto due volte.<\/figcaption><\/figure>\n<p>Come mostra la schermata qui sopra, il primo comando ha funzionato. Ha aggiunto un nuovo prodotto. Il secondo comando ha dato come risposta che l&#8217;ID esiste gi\u00e0.<\/li>\n<li>Proviamo a cercare l&#8217;ID del prodotto appena aggiunto. Digitiamo <code>\/check_inventory 1<\/code>.\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/getting-a-product.png\" alt=\"Interrogazione dell'ID di un prodotto con il comando check inventory. Vengono elencati l'ID, il nome e la quantit\u00e0\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Controlla l&#8217;inventario.<\/figcaption><\/figure>\n<p>La query ha restituito il prodotto con l&#8217;ID corrispondente.<\/li>\n<li>Infine, proviamo a cancellare il prodotto che abbiamo aggiunto. Digitiamo <code>\/delete_product 1<\/code>.\n<p><figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/11\/deleting-inventory.png\" alt=\"Dopo aver eliminato il prodotto, il messaggio dice: Prodotto con ID 1 eliminato dall'inventario!\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Eliminare un prodotto.<\/figcaption><\/figure><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3>Come risolvere i problemi<\/h3>\n<p>Durante la configurazione e la distribuzione dell&#8217;applicazione, potremmo incontrare degli errori da risolvere per far funzionare correttamente l&#8217;applicazione. Proviamo i seguenti metodi per individuare e risolvere gli errori tipici.<\/p>\n<ol start=\"1\">\n<li style=\"list-style-type: none\">\n<ol start=\"1\">\n<li style=\"list-style-type: none\">\n<ul>\n<li><strong>Verificare i token<\/strong>: assicuriamoci di configurare correttamente il token a livello di applicazione con l&#8217;ambito <code>connections:write<\/code> per abilitare l&#8217;accesso in modalit\u00e0 Socket. Inoltre, utilizziamo i token corretti per la classe dell&#8217;applicazione. Il token dell&#8217;utente bot inizia con <code>xoxb-&lt;...&gt;<\/code>. Usiamo il token di livello app (<code>xapp-&lt;...&gt;<\/code>) per la classe <code>SocketModeHandler<\/code>.<\/li>\n<li><strong>Verificare i comandi slash<\/strong>: assicuriamoci di aver configurato i comandi Slash nella dashboard dell&#8217;app Slack e di aver configurato i gestori corretti nel codice del server dell&#8217;applicazione.<\/li>\n<li><strong>Impiegare una migliore gestione degli errori<\/strong>: assicuriamoci che la logica dell&#8217;applicazione gestisca correttamente gli errori, ad esempio durante l&#8217;esecuzione di operazioni sul database.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2>Riepilogo<\/h2>\n<p>Con questa guida abbiamo imparato a costruire un&#8217;applicazione Python con comunicazione in tempo reale tramite i comandi Slash di Slack. Abbiamo anche imparato a distribuire l&#8217;applicazione su Kinsta.<\/p>\n<p>L&#8217;integrazione di un&#8217;applicazione ospitata da Kinsta con Slack consente agli utenti di apportare rapidamente modifiche utilizzando i comandi Slash, migliorando l&#8217;interattivit\u00e0 e l&#8217;efficienza del flusso di lavoro e offrendo un accesso immediato ai dati in tempo reale. Il personale pu\u00f2 ora aggiungere, eliminare o controllare l&#8217;inventario dei prodotti senza lasciare la piattaforma di comunicazione, aumentando la produttivit\u00e0 durante una giornata lavorativa intensa.<\/p>\n<p>Il <a href=\"https:\/\/kinsta.com\/it\/blog\/servizi-paas\/\">PaaS<\/a> di Kinsta offre ancora pi\u00f9 possibilit\u00e0: potete collegare applicazioni e database, implementando soluzioni full-stack per aziende e imprese. E la parte migliore? I <a href=\"https:\/\/kinsta.com\/it\/registrazione\/\">primi 20\u20ac ve li regaliamo noi<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel regno dell&#8217;hosting ad alte prestazioni e degli strumenti di sviluppo versatili, Kinsta si distingue come piattaforma leader per WordPress, applicazioni, database e persino per l&#8217;hosting &#8230;<\/p>\n","protected":false},"author":199,"featured_media":75415,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26215],"class_list":["post-75414","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-python"],"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>Comunicazione Slack in tempo reale (con l&#039;applicazione Python)<\/title>\n<meta name=\"description\" content=\"Usa questa guida per creare un&#039;integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!\" \/>\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\/notifiche-di-slack-all-app\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comunicazione Slack in tempo reale con l&#039;applicazione Python ospitata da Kinsta\" \/>\n<meta property=\"og:description\" content=\"Usa questa guida per creare un&#039;integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/\" \/>\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-12-08T13:57:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-15T17:40:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.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=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Usa questa guida per creare un&#039;integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Comunicazione Slack in tempo reale con l&#8217;applicazione Python ospitata da Kinsta\",\"datePublished\":\"2023-12-08T13:57:47+00:00\",\"dateModified\":\"2023-12-15T17:40:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/\"},\"wordCount\":2423,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/\",\"name\":\"Comunicazione Slack in tempo reale (con l'applicazione Python)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg\",\"datePublished\":\"2023-12-08T13:57:47+00:00\",\"dateModified\":\"2023-12-15T17:40:44+00:00\",\"description\":\"Usa questa guida per creare un'integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Comunicazione Slack in tempo reale con l&#8217;applicazione Python ospitata da Kinsta\"}]},{\"@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\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Comunicazione Slack in tempo reale (con l'applicazione Python)","description":"Usa questa guida per creare un'integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!","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\/notifiche-di-slack-all-app\/","og_locale":"it_IT","og_type":"article","og_title":"Comunicazione Slack in tempo reale con l'applicazione Python ospitata da Kinsta","og_description":"Usa questa guida per creare un'integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!","og_url":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-12-08T13:57:47+00:00","article_modified_time":"2023-12-15T17:40:44+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Usa questa guida per creare un'integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Jeremy Holcombe","Tempo di lettura stimato":"15 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Comunicazione Slack in tempo reale con l&#8217;applicazione Python ospitata da Kinsta","datePublished":"2023-12-08T13:57:47+00:00","dateModified":"2023-12-15T17:40:44+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/"},"wordCount":2423,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/","url":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/","name":"Comunicazione Slack in tempo reale (con l'applicazione Python)","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg","datePublished":"2023-12-08T13:57:47+00:00","dateModified":"2023-12-15T17:40:44+00:00","description":"Usa questa guida per creare un'integrazione perfetta della comunicazione Slack in tempo reale per la tua applicazione Python ospitata su Kinsta!","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/slack-notifications-to-app.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/notifiche-di-slack-all-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/it\/argomenti\/python\/"},{"@type":"ListItem","position":3,"name":"Comunicazione Slack in tempo reale con l&#8217;applicazione Python ospitata da Kinsta"}]},{"@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\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/75414","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\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=75414"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/75414\/revisions"}],"predecessor-version":[{"id":75585,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/75414\/revisions\/75585"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/75414\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/75415"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=75414"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=75414"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=75414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}