{"id":72403,"date":"2023-12-08T14:53:43","date_gmt":"2023-12-08T13:53:43","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=72403&#038;preview=true&#038;preview_id=72403"},"modified":"2023-12-15T18:38:05","modified_gmt":"2023-12-15T17:38:05","slug":"notificaciones-de-slack-a-la-app","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/","title":{"rendered":"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta"},"content":{"rendered":"<p>En el \u00e1mbito del alojamiento de alto rendimiento y las herramientas de desarrollo vers\u00e1tiles, Kinsta destaca como plataforma l\u00edder que ofrece <a href=\"https:\/\/kinsta.com\/es\/wordpress-hosting\/\">WordPress<\/a>, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicaciones<\/a>, <a href=\"https:\/\/sevalla.com\/database-hosting\/\">bases de datos<\/a> e incluso <a href=\"https:\/\/sevalla.com\/static-site-hosting\/\">Alojamiento gratuito de Sitios Est\u00e1ticos<\/a>.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/es\/blog\/como-usar-slack\/\">Slack<\/a>, conocido por sus Comandos Slash, se integra perfectamente con las aplicaciones y servicios alojados en Kinsta, permitiendo a los usuarios automatizar tareas y mejorar significativamente la eficiencia.<\/p>\n<p>Esta gu\u00eda explica c\u00f3mo configurar la comunicaci\u00f3n en tiempo real entre Slack y una aplicaci\u00f3n Python alojada en Kinsta. Al aprovechar los Comandos Slash (Slash Commands) , los usuarios de la aplicaci\u00f3n adquieren la capacidad de crear, consultar y eliminar productos r\u00e1pidamente.<\/p>\n<p>Esta integraci\u00f3n les permite actualizar din\u00e1micamente su inventario de productos, garantizando respuestas r\u00e1pidas a las necesidades de los clientes.<\/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>Entender los Comandos Slash de Slack<\/h2>\n<p>Los Comandos Slash de Slack son atajos basados en texto. Comienzan con una barra inclinada (<code>\/<\/code>) seguida de una palabra clave espec\u00edfica y un par\u00e1metro opcional.<\/p>\n<p>Los Comandos Slash desencadenan acciones o interact\u00faan directamente con integraciones dentro de la interfaz de Slack. Por ejemplo, <code>\/remind<\/code> permite establecer recordatorios directamente a trav\u00e9s de las notificaciones de Slack.<\/p>\n<p>Con las <a href=\"https:\/\/kinsta.com\/es\/blog\/25-integraciones-slack\/\">integraciones de Slack<\/a>, puedes configurar comandos a medida para tus aplicaciones. En este tutorial, tu equipo puede consultar sin esfuerzo el inventario de nuestra aplicaci\u00f3n de productos utilizando el comando Slash <code>\/check_inventory<\/code>\u00a0y otros comandos.<\/p>\n<p>Integrar Slack con tus aplicaciones fomenta una interacci\u00f3n fluida y flujos de trabajo optimizados en un lugar de trabajo moderno. Mejora la comunicaci\u00f3n y la productividad mediante:<\/p>\n<ul>\n<li><strong>Un centro de comunicaci\u00f3n centralizado \u2014<\/strong>\u00a0Slack act\u00faa como un espacio unificado para los equipos. La integraci\u00f3n de aplicaciones en Slack consolida los canales, manteniendo las conversaciones y la informaci\u00f3n en un solo lugar, e impulsando la eficiencia.<\/li>\n<li><strong>Actualizaciones en tiempo real<\/strong> \u2014 Las aplicaciones integradas proporcionan alertas instant\u00e1neas sobre eventos clave, garantizando que todos est\u00e9n informados y reaccionen r\u00e1pidamente a los cambios o actualizaciones.<\/li>\n<li><strong>Flujos de trabajo racionalizados<\/strong> \u2014 Las integraciones automatizan tareas como las notificaciones de las herramientas de gesti\u00f3n de proyectos o la activaci\u00f3n de acciones en el software CRM, reduciendo el trabajo manual.<\/li>\n<li><strong>Colaboraci\u00f3n mejorada<\/strong> \u2014 Los miembros del equipo que acceden a las aplicaciones directamente desde Slack fomentan una colaboraci\u00f3n sin fisuras. Pueden compartir, editar archivos y discutir proyectos f\u00e1cilmente, fomentando el trabajo en equipo en todas las funciones.<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Puedes aprovechar la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API de Kinsta<\/a> junto con los comandos Slash de Slack para <a href=\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\">gestionar tus aplicaciones, bases de datos y sitios<\/a> alojados en Kinsta.<\/p>\n<\/aside>\n\n<h2>C\u00f3mo Construir una Aplicaci\u00f3n Python en Kinsta<\/h2>\n<p>Vamos a construir y desplegar una aplicaci\u00f3n de gesti\u00f3n de productos en Kinsta. Despu\u00e9s, int\u00e9grala con Slack para explorar los Comandos Slash. Los usuarios pueden a\u00f1adir, eliminar y consultar los productos del inventario mediante Comandos Slash en Slack.<\/p>\n<h3>Requisitos Previos<\/h3>\n<p>Para seguir esta gu\u00eda, asumimos que tienes:<\/p>\n<ul>\n<li>Conocimientos b\u00e1sicos de <a href=\"https:\/\/kinsta.com\/es\/secciones\/python\/\">Python<\/a><\/li>\n<li>Una <a href=\"https:\/\/slack.com\/workspace-signin\">cuenta de Slack<\/a><\/li>\n<\/ul>\n<p>En primer lugar, vamos a configurar un proyecto Python en Kinsta. Para ello, sigue los pasos que se indican a continuaci\u00f3n:<\/p>\n<ol start=\"1\">\n<li>Visita la <a href=\"https:\/\/github.com\/kinsta\/hello-world-python\">plantilla Python de Kinsta<\/a> en GitHub.<\/li>\n<li>Selecciona <strong>Usar esta plantilla<\/strong> &gt; <strong>Crear un nuevo repositorio<\/strong> para copiar el c\u00f3digo de inicio en un repositorio dentro de tu cuenta de <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-github\/\">GitHub<\/a>.<\/li>\n<li>Una vez que tu repositorio est\u00e9 listo, inicia sesi\u00f3n o crea una cuenta para ver tu panel <a href=\"https:\/\/my.kinsta.com\/?lang=es\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta<\/a>.<\/li>\n<li>Autoriza a Kinsta con tu proveedor de 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>Haz clic en <strong>Aplicaciones<\/strong> en la barra lateral izquierda, y luego en <strong>A\u00f1adir aplicaci\u00f3n<\/strong>.<\/li>\n<li>Selecciona el repositorio y la rama desde la que deseas desplegar.<\/li>\n<li>Asigna un nombre \u00fanico a tu aplicaci\u00f3n y elige una ubicaci\u00f3n para el centro de datos.<\/li>\n<li>A continuaci\u00f3n, configura tu entorno de construcci\u00f3n. Selecciona la configuraci\u00f3n <strong>Est\u00e1ndar de la m\u00e1quina de construcci\u00f3n<\/strong> con la opci\u00f3n <a href=\"https:\/\/docs.sevalla.com\/applications\/build-options\/nixpacks\">Nixpacks<\/a> recomendada para esta demo.<\/li>\n<li>Utiliza todas las configuraciones por defecto y luego haz clic en <strong>Crear aplicaci\u00f3n<\/strong>.<\/li>\n<\/ol>\n<p>El despliegue suele tardar unos minutos y, si se realiza correctamente, recibir\u00e1s un enlace a tu aplicaci\u00f3n junto con un panel de control que contiene informaci\u00f3n sobre el despliegue.<\/p>\n<h2>C\u00f3mo Configurar la Integraci\u00f3n de Slack en una Aplicaci\u00f3n Python<\/h2>\n<p>Empecemos creando una aplicaci\u00f3n Slack y luego configuremos los comandos Slash que se conectar\u00edan a tu aplicaci\u00f3n Python a trav\u00e9s de algunos tokens. Vamos a configurar una aplicaci\u00f3n Slack:<\/p>\n<ol start=\"1\">\n<li>Accede al panel de la <a href=\"https:\/\/api.slack.com\/\">API de Slack<\/a>.<\/li>\n<li>Haz clic en <strong>Crear Nueva App<\/strong> y elige <strong>Desde Cero<\/strong>.<\/li>\n<li>Ponle un nombre a tu app Slack (por ejemplo, <strong>producto-inventario<\/strong>).<\/li>\n<li>Selecciona el espacio de trabajo y haz clic en <strong>Crear Aplicaci\u00f3n<\/strong>.<\/li>\n<\/ol>\n<p>Ahora, para la autenticaci\u00f3n:<\/p>\n<ol start=\"1\">\n<li>Activa el <strong>Modo Socket<\/strong> en la barra lateral de tu panel de control de Slack.<\/li>\n<li>Genera un token a nivel de aplicaci\u00f3n escribiendo un nombre de token y haciendo clic en <strong>Generar<\/strong>.<\/li>\n<li>Guarda este c\u00f3digo de nivel de aplicaci\u00f3n para configurar las variables de entorno m\u00e1s adelante.<\/li>\n<\/ol>\n<h3>C\u00f3mo Configurar los Comandos Slash<\/h3>\n<p>Para configurar los Comandos Slash de tu app:<\/p>\n<ol start=\"1\">\n<li>Ve a la secci\u00f3n <strong>Caracter\u00edsticas<\/strong> en <strong>Informaci\u00f3n B\u00e1sica<\/strong> en el panel de control de la API de Slack. Selecciona <strong>Comandos Slash<\/strong>.\n<p><figure 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=\"Panel de la API Slack con opciones para a\u00f1adir caracter\u00edsticas y funciones.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Panel de la API Slack con opciones para a\u00f1adir caracter\u00edsticas y funciones.<\/figcaption><\/figure><\/li>\n<li>Haz clic en <strong>Crear Nuevo Comando<\/strong> para configurar un nuevo comando.\n<p><figure 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=\"P\u00e1gina de Slack Crear Nuevo Comando con opciones para el comando, breve descripci\u00f3n y pista de uso. Tambi\u00e9n tiene detalles para los canales de escape, usuarios y enlaces enviados a tu aplicaci\u00f3n y una vista previa de una entrada de autocompletar\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">P\u00e1gina Crear Nuevo Comando en Slack.<\/figcaption><\/figure><\/li>\n<li>En la p\u00e1gina <strong>Crear Nuevo Comando<\/strong>, rellena los detalles de tu nuevo Comando Slash. Por ejemplo, escribe <code>\/hi<\/code> en el campo Comando. Opcionalmente, a\u00f1ade una breve descripci\u00f3n como \u00ab\u00a1Saluda!\u00bb y proporciona una sugerencia de uso. Haz clic en <strong>Guardar<\/strong>.<\/li>\n<li>En la secci\u00f3n Instalar Aplicaci\u00f3n de la barra lateral, haz clic en <strong>Instalar en el Espacio de Trabajo<\/strong>.<\/li>\n<li>Accede al token OAuth del usuario bot dirigi\u00e9ndote a <strong>OAuth y Permisos<\/strong> en la barra lateral. Guarda este token para futuras consultas.<\/li>\n<\/ol>\n<h3>C\u00f3mo A\u00f1adir Tokens al Despliegue de Aplicaciones de Kinsta<\/h3>\n<ol start=\"1\">\n<li>Ve a la secci\u00f3n <strong>Variables de Entorno<\/strong> en <strong>Configuraci\u00f3n<\/strong> del despliegue de tu aplicaci\u00f3n en MyKinsta.<\/li>\n<li>Haz clic en <strong>A\u00f1adir variable de entorno<\/strong>.\n<p><figure 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=\"Aviso emergente de Slack A\u00f1adir variable de entorno con claves, valores y la opci\u00f3n de eliminarlas o a\u00f1adir otra\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Aparecer\u00e1 la ventana emergente A\u00f1adir variable de entorno.<\/figcaption><\/figure><\/li>\n<li>Para la <strong>Clave 1<\/strong>, SLACK_BOT_TOKEN, pega el token OAuth del usuario bot en el <strong>Valor 1<\/strong>. Para la <strong>Clave 2<\/strong>, SLACK_APP_TOKEN, pega el token a nivel de aplicaci\u00f3n en el <strong>Valor 2<\/strong>.<\/li>\n<li>Aseg\u00farate de que ambas opciones est\u00e1n marcadas y haz clic en <strong>Desplegar ahora<\/strong> para que Kinsta pueda volver a desplegar tu aplicaci\u00f3n con las variables de entorno.<\/li>\n<\/ol>\n<h2>C\u00f3mo Implementar la Comunicaci\u00f3n en Tiempo Real<\/h2>\n<p>Para esta demo, utilizas la <a href=\"https:\/\/github.com\/kinsta\/hello-world-python\">plantilla Python de Kinsta<\/a>, que contiene los siguientes archivos:<\/p>\n<ul>\n<li><strong>Procfile<\/strong> \u2014 Especifica los comandos para ejecutar tu aplicaci\u00f3n.<\/li>\n<li><strong>requirements.txt<\/strong> \u2014 Enumera las dependencias necesarias para la aplicaci\u00f3n Python.<\/li>\n<li><strong>server.py<\/strong> \u2014 El archivo principal de la aplicaci\u00f3n Python, que maneja las funcionalidades u operaciones del lado del servidor.<\/li>\n<\/ul>\n<p>Kinsta crea autom\u00e1ticamente un <a href=\"https:\/\/docs.sevalla.com\/applications\/processes\">proceso<\/a> basado en el <strong>Procfile <\/strong>en la ra\u00edz del repositorio al desplegar una aplicaci\u00f3n. El <strong>Procfile<\/strong> contiene el siguiente c\u00f3digo.<\/p>\n<pre><code class=\"language-python\">web: python server.py<\/code><\/pre>\n<p>Este comando ejecuta el c\u00f3digo que contiene <strong>server.py<\/strong>. Kinsta tambi\u00e9n instala las dependencias de Python en <strong>requirements.txt<\/strong> durante el despliegue y el redespliegue.<\/p>\n<p>Ahora, vamos a utilizar el <a href=\"https:\/\/slack.dev\/bolt-python\/concepts\" target=\"_blank\" rel=\"noopener noreferrer\">framework Bolt<\/a> para establecer una comunicaci\u00f3n en tiempo real con tu aplicaci\u00f3n. A\u00f1ade las siguientes l\u00edneas a tu archivo <strong>requirements.txt<\/strong> para instalar autom\u00e1ticamente Bolt en tu aplicaci\u00f3n Python cuando actualices el repositorio.<\/p>\n<pre><code class=\"language-markdown\">slack-bolt==1.18.0\nslack-sdk==3.23.0<\/code><\/pre>\n<p>A\u00f1ade tambi\u00e9n la biblioteca <code>psycopg2<\/code> al archivo <strong>requirements.txt<\/strong>. Se utilizar\u00e1 para conectar con una base de datos Postgres.<\/p>\n<pre><code class=\"language-markdown\">psycopg2-binary==2.9.9<\/code><\/pre>\n<h3>C\u00f3mo Implementar una Base de Datos Postgres con Kinsta<\/h3>\n<p>La aplicaci\u00f3n de inventario de productos necesita una forma de persistir los datos de los productos que Slash Commands a\u00f1ade a la <a href=\"https:\/\/kinsta.com\/database\/\">base de datos<\/a>. Para crear un almacenamiento de datos persistente, puedes utilizar la base de datos alojada de Kinsta.<\/p>\n<ol start=\"1\">\n<li>En primer lugar, despliega una <a href=\"https:\/\/sevalla.com\/database-hosting\/\">base de datos Postgres<\/a> en tu panel de control de Kinsta accediendo a la secci\u00f3n <strong>Bases de datos<\/strong> en la barra lateral del panel de control de MyKinsta.<\/li>\n<li>Haz clic en <strong>Crear una base de datos<\/strong>. Configura los detalles de tu base de datos introduciendo un nombre y seleccionando el tipo de base de datos. Selecciona la opci\u00f3n <strong>PostgreSQL<\/strong> y configura el tama\u00f1o deseado. Se generar\u00e1 autom\u00e1ticamente un <strong>nombre de usuario<\/strong> y una <strong>contrase\u00f1a para la base de datos<\/strong>:\n<p><figure 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=\"Formulario para crear una base de datos. Los campos incluyen el nombre de la base de datos, el nombre para mostrar, el tipo y la versi\u00f3n de la base de datos, el nombre de usuario y la contrase\u00f1a de la base de datos, la ubicaci\u00f3n del centro de datos y el tama\u00f1o. Hay dos botones en la parte inferior del formulario: Cancelar y Continuar\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Formulario para crear una base de datos.<\/figcaption><\/figure><\/li>\n<li>Haz clic en <strong>Continuar<\/strong> para terminar de configurar la base de datos. Espera a que se cree la base de datos PostgreSQL.<br \/>\nUna vez creada, para obtener la cadena de conexi\u00f3n para el acceso externo a tu base de datos, ve a la secci\u00f3n <strong>Conexiones externas<\/strong> del panel de control de tu base de datos desplegada y copia la Cadena de conexi\u00f3n externa.<\/p>\n<figure 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 p\u00e1gina de informaci\u00f3n del panel de la base de datos desplegada. Los detalles incluyen recursos, ubicaci\u00f3n, versi\u00f3n, fecha de creaci\u00f3n, una lista de conexiones internas e informaci\u00f3n sobre las conexiones internas, incluida la cadena de conexi\u00f3n.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Informaci\u00f3n de conexi\u00f3n externa a la base de datos.<\/figcaption><\/figure>\n<p>Ahora, puedes utilizar esta cadena de conexi\u00f3n para conectarte a la base de datos desde tu aplicaci\u00f3n Python.<\/p>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Desde el panel de control de tu aplicaci\u00f3n Python, guarda la cadena de conexi\u00f3n como una variable de entorno en <code>DATABASE_CONNECTION_STRING<\/code>, como hiciste antes con tus tokens de Slack.<\/p>\n<\/aside>\n<\/li>\n<li>En tu proyecto Python, crea un archivo <strong>db.py<\/strong> dentro del directorio de tu proyecto para las funciones de inicializaci\u00f3n de la base de datos. A\u00f1ade el siguiente c\u00f3digo:\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>Cuando se llama a la funci\u00f3n <code>get_conn()<\/code>, crea y devuelve una conexi\u00f3n a la base de datos Kinsta desplegada utilizando tu cadena de conexi\u00f3n externa.<\/p>\n<p>La funci\u00f3n <code>init_db()<\/code> obtiene una conexi\u00f3n a la base de datos, define el esquema de la base de datos y crea la tabla, a la vez que consigna los cambios. S\u00f3lo debes llamar a la funci\u00f3n <code>init_db()<\/code> una vez al configurar inicialmente el servidor de aplicaciones. Utiliza la funci\u00f3n <code>get_conn()<\/code> en llamadas posteriores para obtener una conexi\u00f3n a la base de datos.<\/li>\n<\/ol>\n<h3>C\u00f3mo Implementar los Manejadores de Comandos Slash<\/h3>\n<p>Ahora, crea el c\u00f3digo del servidor de aplicaciones.<\/p>\n<ol start=\"1\">\n<li>Elimina el contenido del archivo <strong>server.py<\/strong> e importa las siguientes bibliotecas:\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>\u00c9stas son necesarias para la funcionalidad de la aplicaci\u00f3n Slack, las conexiones a la base de datos y la gesti\u00f3n de errores.<\/li>\n<li>A\u00f1ade el siguiente c\u00f3digo al archivo <strong>server.py<\/strong> despu\u00e9s de las sentencias import:\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 clase <code>App<\/code> de <code>slack_bolt<\/code> se utiliza para crear una instancia de la aplicaci\u00f3n Slack. Inicializa la aplicaci\u00f3n con el token OAuth del usuario bot recuperado de la variable de entorno <code>SLACK_BOT_TOKEN<\/code>.<\/li>\n<li>A continuaci\u00f3n, despliega un manejador para el comando <code>\/hi<\/code> Slash que a\u00f1adiste antes a tu aplicaci\u00f3n Slack. A\u00f1ade las siguientes l\u00edneas al archivo <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 una escucha para la cadena de comandos pasada como argumento y asigna la siguiente funci\u00f3n para las peticiones de ese Comando Slash. La funci\u00f3n <code>send_hello()<\/code> se encarga de la l\u00f3gica de las solicitudes.<\/p>\n<p>El c\u00f3digo tambi\u00e9n pasa las variables de solicitud <code>ack<\/code>, <code>respond<\/code> y <code>command<\/code> para que las utilice la funci\u00f3n. Llama a <code>ack<\/code> para reconocer la solicitud del Comando Slash, ya que es el primer paso antes de continuar el procesamiento, y llama a <code>respond<\/code> para devolver una respuesta de texto.<\/p>\n<p>Cuando el usuario escriba el comando Slash <code>\/hi<\/code> en tu espacio de trabajo Slack, obtendr\u00e1 la respuesta \u00ab\u00a1Hola!\u00bb<\/li>\n<li>Vuelve al panel de control de tu aplicaci\u00f3n Slack y a\u00f1ade los siguientes comandos.<br \/>\n<table>\n<tbody>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><strong>Comando<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Descripci\u00f3n breve<\/strong><\/td>\n<td colspan=\"1\" rowspan=\"1\"><strong>Uso Sugerencia<\/strong><\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><code>\/add_product<\/code><\/td>\n<td colspan=\"1\" rowspan=\"1\">A\u00f1ade un producto al inventario.<\/td>\n<td colspan=\"1\" rowspan=\"1\">id_producto, nombre_producto, cantidad_producto<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><code>\/check_inventory<\/code><\/td>\n<td colspan=\"1\" rowspan=\"1\">Buscar un producto con un ID coincidente en el inventario.<\/td>\n<td colspan=\"1\" rowspan=\"1\">producto_id<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"1\"><code>\/delete_product<\/code><\/td>\n<td colspan=\"1\" rowspan=\"1\">Eliminar del inventario un producto con un ID coincidente.<\/td>\n<td colspan=\"1\" rowspan=\"1\">producto_id<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ahora, tu p\u00e1gina de <strong>Comandos de Slash<\/strong> deber\u00eda parecerse a la siguiente captura de pantalla, que contiene una lista de comandos y sus detalles.<\/p>\n<p><figure 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=\"P\u00e1gina de Comandos de la barra que enumera el nombre y la descripci\u00f3n de cada uno con opciones para editarlos o eliminarlos, y un bot\u00f3n Crear nuevo comando\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">P\u00e1gina de comandos Slash de la API de Slack.<\/figcaption><\/figure><\/li>\n<li>A\u00f1ade el manejador <code>\/add_product<\/code> al archivo <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 que Slack env\u00eda durante el proceso de manejo.<\/p>\n<p>Cuando un usuario escribe el comando <code>\/add_product<\/code> Slash, la aplicaci\u00f3n env\u00eda el siguiente payload JSON de muestra como una solicitud 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>Se incluyen los campos <code>command<\/code> y <code>text<\/code>. <code>command<\/code> contiene el Comando Slash activado, mientras que <code>text<\/code> contiene su texto adicional. Por ejemplo, si el usuario escribe el comando <code>\/add_product 1, notebook, 5<\/code>, <code>text<\/code> contiene \u00ab1, cuaderno, 5\u00bb.<\/p>\n<p>El manejador <code>add_product<\/code> extrae el ID, el nombre y la cantidad del producto de la solicitud del usuario y se conecta a la base de datos utilizando la funci\u00f3n de ayuda <code>get_conn()<\/code>. Tambi\u00e9n ejecuta una operaci\u00f3n SQL de inserci\u00f3n para a\u00f1adir el producto a la base de datos. Si el ID del producto ya existe en la base de datos, el c\u00f3digo gestiona el error y responde que el ID ya existe.<\/li>\n<li>Ahora, a\u00f1ade el resto de los manejadores de comandos al archivo <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   \t \n        # get cursor\n        cur = conn.cursor()\n   \t \n        # Insert the product into the database\n        cur.execute(\n        \t\"DELETE FROM products WHERE id = %s\",\n        \t(int(id),)\n        )\n        cur.close()\n        conn.commit()\n   \t \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>Estos dos manejadores de comandos consultan y eliminan el ID de producto coincidente en el inventario, respectivamente.<\/li>\n<\/ol>\n<h3>C\u00f3mo Ejecutar el Servidor<\/h3>\n<ol start=\"1\">\n<li>Para unir la inicializaci\u00f3n de la base de datos y la conexi\u00f3n al socket, a\u00f1ade las siguientes l\u00edneas a tu archivo <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>Debes inicializar <code>SocketModeHandler<\/code> con tu token a nivel de aplicaci\u00f3n. Utiliza <code>SLACK_APP_TOKEN<\/code> para acceder a la variable de entorno desplegada en la aplicaci\u00f3n Kinsta.<\/li>\n<li>Confirma los cambios en tu repositorio remoto para desplegarlos en Kinsta autom\u00e1ticamente. Ahora, <strong>server.py<\/strong> inicializa la base de datos y establece la conexi\u00f3n socket. Kinsta activar\u00e1 un redespliegue autom\u00e1tico de tu aplicaci\u00f3n Python.<\/li>\n<\/ol>\n<h2>Probar y Solucionar Problemas de tu Aplicaci\u00f3n<\/h2>\n<p>Puedes probar tu aplicaci\u00f3n en Slack utilizando los Comandos Slash configurados.<\/p>\n<ol start=\"1\">\n<li style=\"list-style-type: none\">\n<ol start=\"1\">\n<li>Ve al espacio de trabajo asociado a tu aplicaci\u00f3n. Escribe el car\u00e1cter barra (&#8216;\/&#8217;) para ver los comandos de la aplicaci\u00f3n:\n<p><figure 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=\"Canal Kinsta-demo con una lista de comandos, incluyendo comprobar ID de producto del inventario, a\u00f1adir ID de producto, nombre o cantidad, eliminar ID de producto y Hola\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">El canal kinsta-demo.<\/figcaption><\/figure><\/li>\n<li>Prueba cada uno de los comandos de la barra. Por ejemplo, escribe <code>\/hi<\/code>. Obtendr\u00e1s la respuesta \u00ab\u00a1Hola!\u00bb\n<p><figure 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=\"Respuesta al comando Hi con el mensaje '\u00a1Hola!\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Respuesta al comando Hola.<\/figcaption><\/figure><\/li>\n<li>Prueba qu\u00e9 ocurre cuando a\u00f1ades el mismo producto dos veces. Ejecuta el comando de barra <code>\/add_product 1, notepad, 2<\/code> dos veces.\n<figure 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=\"Resultado de ejecutar dos veces el comando a\u00f1adir producto. Muestra una cantidad de 2\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">A\u00f1adir un producto dos veces.<\/figcaption><\/figure>\n<p>Como muestra la captura de pantalla anterior, el primer comando funcion\u00f3. A\u00f1adi\u00f3 un nuevo producto. El segundo comando dio como respuesta que el ID ya existe.<\/li>\n<li>Prueba a buscar el ID del producto que acabamos de a\u00f1adir. Escribe <code>\/check_inventory 1<\/code>.\n<figure 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=\"Consulta el ID de un producto con el comando Comprobar inventario.Enumera el ID, el nombre y la cantidad\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Comprueba el inventario.<\/figcaption><\/figure>\n<p>La consulta devuelve el producto con el ID coincidente.<\/li>\n<li>Por \u00faltimo, prueba a eliminar el producto que has a\u00f1adido. Escribe <code>\/delete_product 1<\/code>.\n<p><figure 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=\"Tras eliminar el producto, el mensaje dice: \u00a1Producto con ID 1 eliminado del inventario!\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Borrar un producto.<\/figcaption><\/figure><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3>C\u00f3mo Solucionar Problemas<\/h3>\n<p>Al configurar y desplegar tu aplicaci\u00f3n, es posible que encuentres errores que debes resolver para que tu aplicaci\u00f3n funcione correctamente. Prueba los siguientes m\u00e9todos para detectar y solucionar los errores t\u00edpicos.<\/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>Verifica tus tokens<\/strong>: Aseg\u00farate de que configuras correctamente tu token a nivel de aplicaci\u00f3n con el alcance <code>connections:write<\/code> para permitir el acceso utilizando el Modo Socket. Adem\u00e1s, utiliza los tokens correctos para la clase de app. El token de usuario del bot empieza por <code>xoxb-&lt;...&gt;<\/code>. Utiliza el token de nivel de aplicaci\u00f3n (<code>xapp-&lt;...&gt;<\/code>) para la clase <code>SocketModeHandler<\/code>.<\/li>\n<li><strong>Verifica tus comandos slash<\/strong>: Aseg\u00farate de haber configurado los Comandos Slash en el panel de control de tu app Slack y de haber configurado los manejadores correctos en el c\u00f3digo de tu servidor de aplicaciones.<\/li>\n<li><strong>Emplea una mejor gesti\u00f3n de errores<\/strong>: Aseg\u00farate de que la l\u00f3gica de tu aplicaci\u00f3n gestiona correctamente los errores, por ejemplo, al ejecutar operaciones de base de datos.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2>Resumen<\/h2>\n<p>En esta gu\u00eda, has aprendido a crear una aplicaci\u00f3n Python con comunicaci\u00f3n en tiempo real a trav\u00e9s de los comandos Slash de Slack. Tambi\u00e9n has aprendido a desplegar la aplicaci\u00f3n en Kinsta.<\/p>\n<p>La integraci\u00f3n de una aplicaci\u00f3n alojada en Kinsta con Slack permite a los usuarios realizar cambios r\u00e1pidamente mediante los comandos Slash, mejorando la interactividad y la eficiencia del flujo de trabajo al tiempo que ofrece acceso inmediato a datos en tiempo real. Ahora el personal puede a\u00f1adir, eliminar o comprobar el inventario de productos sin salir de su plataforma de comunicaciones, lo que aumenta la productividad durante una ajetreada jornada laboral.<\/p>\n<p>El <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-paas\/\">PaaS<\/a> de Kinsta ofrece a\u00fan m\u00e1s posibilidades \u2014 puedes conectar aplicaciones y bases de datos, desplegando soluciones full-stack para empresas y negocios. \u00bfY lo mejor? \u00a1Nosotros <a href=\"https:\/\/kinsta.com\/es\/suscripcion\/\">nos hacemos cargo de tus primeros 20$<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el \u00e1mbito del alojamiento de alto rendimiento y las herramientas de desarrollo vers\u00e1tiles, Kinsta destaca como plataforma l\u00edder que ofrece WordPress, aplicaciones, bases de datos &#8230;<\/p>\n","protected":false},"author":199,"featured_media":72404,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1320],"class_list":["post-72403","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>Comunicaci\u00f3n Slack en Tiempo Real (con Aplicaci\u00f3n Python)<\/title>\n<meta name=\"description\" content=\"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.\" \/>\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\/es\/blog\/notificaciones-de-slack-a-la-app\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta\" \/>\n<meta property=\"og:description\" content=\"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-08T13:53:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-15T17:38:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta\",\"datePublished\":\"2023-12-08T13:53:43+00:00\",\"dateModified\":\"2023-12-15T17:38:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/\"},\"wordCount\":2853,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/\",\"name\":\"Comunicaci\u00f3n Slack en Tiempo Real (con Aplicaci\u00f3n Python)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg\",\"datePublished\":\"2023-12-08T13:53:43+00:00\",\"dateModified\":\"2023-12-15T17:38:05+00:00\",\"description\":\"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Comunicaci\u00f3n Slack en Tiempo Real (con Aplicaci\u00f3n Python)","description":"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.","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\/es\/blog\/notificaciones-de-slack-a-la-app\/","og_locale":"es_ES","og_type":"article","og_title":"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta","og_description":"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.","og_url":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-12-08T13:53:43+00:00","article_modified_time":"2023-12-15T17:38:05+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta","datePublished":"2023-12-08T13:53:43+00:00","dateModified":"2023-12-15T17:38:05+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/"},"wordCount":2853,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/","url":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/","name":"Comunicaci\u00f3n Slack en Tiempo Real (con Aplicaci\u00f3n Python)","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg","datePublished":"2023-12-08T13:53:43+00:00","dateModified":"2023-12-15T17:38:05+00:00","description":"Aprenda a crear una integraci\u00f3n perfecta de comunicaci\u00f3n Slack en tiempo real para su aplicaci\u00f3n Python alojada en Kinsta en esta gu\u00eda.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/slack-notifications-to-app.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/notificaciones-de-slack-a-la-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/es\/secciones\/python\/"},{"@type":"ListItem","position":3,"name":"Comunicaci\u00f3n en Tiempo Real de Slack con tu Aplicaci\u00f3n Python Alojada en Kinsta"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=72403"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72403\/revisions"}],"predecessor-version":[{"id":72545,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72403\/revisions\/72545"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72403\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/72404"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=72403"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=72403"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=72403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}