{"id":69047,"date":"2023-08-10T15:48:29","date_gmt":"2023-08-10T13:48:29","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=69047&#038;preview=true&#038;preview_id=69047"},"modified":"2023-09-05T16:02:59","modified_gmt":"2023-09-05T14:02:59","slug":"construir-slackbot-para-gestion-de-sitios","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/","title":{"rendered":"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/es\/blog\/como-usar-slack\/\">Slack<\/a> es una potente plataforma de mensajer\u00eda que permite a los equipos colaborar de forma eficiente. Y si esa colaboraci\u00f3n tambi\u00e9n implica ocuparse de varios sitios de <a href=\"https:\/\/kinsta.com\/wordpress\/\">WordPress<\/a> aqu\u00ed en Kinsta, puedes trasladar algunas tareas comunes de gesti\u00f3n de sitios a Slack con la ayuda de la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API de Kinsta<\/a>.<\/p>\n<p>Integrar un Slackbot en tu flujo de trabajo puede ahorrar tiempo y mejorar la productividad. Este tutorial combina el poder de Slack y la API de Kinsta para construir un Slackbot capaz de gestionar tareas como comprobar el estado del sitio, limpiar la cach\u00e9 de un sitio y reiniciar el motor PHP de un sitio.<\/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>Qu\u00e9 Vas a Construir<\/h2>\n<p>Aqu\u00ed vas a construir un Slackbot en <a href=\"https:\/\/kinsta.com\/es\/blog\/como-instalar-node-js\/\">Node.js<\/a> utilizando la <a href=\"https:\/\/api.slack.com\/tools\/bolt\" target=\"_blank\" rel=\"noopener noreferrer\">API Bolt<\/a> (la forma m\u00e1s r\u00e1pida de empezar a programar con la Plataforma Slack). Tu aplicaci\u00f3n convierte los comandos de barra de Slack en llamadas a la API Kinsta y retransmite las respuestas para que toda la interacci\u00f3n con el usuario se produzca en Slack.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slackbot-demo-with-kinsta-api.gif\" alt=\"Demostraci\u00f3n del Slackbot de la API Kinsta.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Demostraci\u00f3n del Slackbot de la API Kinsta.<\/figcaption><\/figure>\n<h3>Requisitos previos<\/h3>\n<p>Para seguir este proyecto, debes tener lo siguiente:<\/p>\n<ul>\n<li>Conocimientos b\u00e1sicos de <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a> y Node.js<\/li>\n<li>Node.js versi\u00f3n 12 o superior<\/li>\n<li>npm (<a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-npm\/\">Gestor de Paquetes de Node<\/a>) instalado en tu ordenador<\/li>\n<li>Espacio de trabajo Slack<\/li>\n<\/ul>\n<h2>Crear una Aplicaci\u00f3n Slack<\/h2>\n<p>Un Slackbot es esencialmente una aplicaci\u00f3n Slack. Para crear una nueva aplicaci\u00f3n Slack, sigue estos pasos:<\/p>\n<ol start=\"1\">\n<li>Navega hasta el panel de control de <a href=\"https:\/\/api.slack.com\/apps\/\" target=\"_blank\" rel=\"noopener noreferrer\">la API de Slack<\/a>.<\/li>\n<li>Haz clic en el bot\u00f3n <strong>Crear<\/strong> <strong>una<\/strong><strong>\u00a0Aplicaci\u00f3n<\/strong>, que abrir\u00e1 un modal.<\/li>\n<li>Selecciona la opci\u00f3n <strong>Desde cero<\/strong> para empezar a crear tu aplicaci\u00f3n desde cero.<\/li>\n<li>Dale un nombre a tu aplicaci\u00f3n Slack. Por ejemplo, <strong>Kinsta Bot<\/strong>.<\/li>\n<li>A continuaci\u00f3n, elige el espacio de trabajo donde quieres instalar la app y haz clic en el bot\u00f3n <strong>Crear<\/strong> <strong>Aplicaci\u00f3n<\/strong>.<\/li>\n<\/ol>\n<p>No dudes en editar la informaci\u00f3n b\u00e1sica de tu app navegando hasta la opci\u00f3n <strong>Informaci\u00f3n<\/strong> <strong>b\u00e1sica<\/strong> de la barra lateral. Despl\u00e1zate hasta <strong>Informaci\u00f3n de la pantalla<\/strong> para a\u00f1adir detalles como una imagen, un nombre, una descripci\u00f3n, un color y mucho m\u00e1s.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slackbot-display-information.jpg\" alt=\"Informaci\u00f3n de pantalla de Slackbot.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Informaci\u00f3n de pantalla de Slackbot.<\/figcaption><\/figure>\n<h3>Configurar <strong>O<\/strong>Auth y los permisos<\/h3>\n<p>Has creado con \u00e9xito un Slackbot. Sin embargo, hay que concederle ciertos permisos para que pueda acceder a los datos y realizar acciones dentro de tu espacio de trabajo de Slack. Para acceder a la configuraci\u00f3n necesaria<\/p>\n<ol start=\"1\">\n<li>Ve al panel de control de tu aplicaci\u00f3n Slack y busca la opci\u00f3n <strong>OAuth y Per<\/strong><strong>misos<\/strong> en la barra lateral izquierda.<\/li>\n<li>Una vez all\u00ed, despl\u00e1zate hasta la secci\u00f3n <strong>Scopes<\/strong>.<\/li>\n<li>Concede a tu bot la capacidad de leer mensajes instant\u00e1neos de los usuarios y responder a esos mensajes.<\/li>\n<\/ol>\n<p>A continuaci\u00f3n se muestra una captura de pantalla con los \u00e1mbitos que debes proporcionar a tu bot:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slack-app-scopes.jpg\" alt=\"&lt;strong&gt;Scopes&lt;\/strong&gt; de la aplicaci\u00f3n Slack.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Scopes de la aplicaci\u00f3n Slack.<\/figcaption><\/figure>\n<p>Configurando estos \u00e1mbitos, tu bot estar\u00e1 equipado para interactuar sin problemas con los usuarios de Slack y llevar a cabo sus funciones previstas con eficacia.<\/p>\n<h3>Instalar Slack Bot en tu espacio de trabajo<\/h3>\n<p>Para completar el proceso, debes instalar tu nuevo Slackbot en tu espacio de trabajo de Slack. Navega hasta la barra lateral izquierda y selecciona <strong>Instalar<\/strong> <strong>aplicaciones<\/strong>. Desde all\u00ed, haz clic en <strong>Instalar en el<\/strong> <strong>espacio de trabajo<\/strong> y especifica el canal en el que deseas a\u00f1adir el bot.<\/p>\n<p>Tu Slackbot ya est\u00e1 listo. Vamos a configurar un servidor Node.js que se utilizar\u00e1 para recibir y procesar tus solicitudes.<\/p>\n<h2>Configurar el Entorno de Desarrollo<\/h2>\n<p>Para empezar con tu nuevo proyecto Node.js, crea un nuevo directorio para tu aplicaci\u00f3n e in\u00edcialo con npm:<\/p>\n<pre><code class=\"language-bash\">mkdir my-express-app \ncd my-express-app \nnpm init -y<\/code><\/pre>\n<p>Tras ejecutar el comando anterior, se crear\u00e1 un nuevo archivo <strong>package.json<\/strong> en el directorio que hayas elegido con los valores predeterminados. El archivo <strong>package.json<\/strong>\u00a0es esencial, ya que contiene informaci\u00f3n sobre tu proyecto y sus dependencias. Estas dependencias permitir\u00e1n un desarrollo fluido y mejorar\u00e1n la funcionalidad de tu proyecto:<\/p>\n<ol start=\"1\">\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/@slack\/bolt\" target=\"_blank\" rel=\"noopener noreferrer\">@slack\/bolt<\/a><\/code>: Este framework JavaScript te permite crear r\u00e1pidamente aplicaciones Slack ricas en funciones, aprovechando las \u00faltimas capacidades de la plataforma.<\/li>\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a><\/code>: Una valiosa herramienta que reinicia autom\u00e1ticamente tu aplicaci\u00f3n Node.js cada vez que se detectan cambios de archivo en el directorio, garantizando un flujo de trabajo de desarrollo optimizado.<\/li>\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a><\/code>: Este m\u00f3dulo de dependencia cero desempe\u00f1a un papel crucial en la carga de variables de entorno desde el archivo <strong>.env<\/strong> a <code>process.env<\/code>, haciendo que la gesti\u00f3n de la configuraci\u00f3n sea pan comido.<\/li>\n<\/ol>\n<p>Para instalar los paquetes necesarios, ejecuta los siguientes comandos:<\/p>\n<pre><code class=\"language-bash\">npm i @slack\/bolt\nnpm i --save-dev nodemon dotenv<\/code><\/pre>\n<p>Tras instalar correctamente estas dependencias y las dependencias dev, es hora de a\u00f1adir un script dev a tu archivo <strong>package.json<\/strong>, utilizando <code>nodemon<\/code> para ejecutar tu archivo JavaScript. Aseg\u00farate de que tu objeto script <strong>package.json<\/strong>\u00a0incluye lo siguiente:<\/p>\n<pre><code class=\"language-json\">\"scripts\": {\n  \"dev\": \"nodemon app.js\"\n}<\/code><\/pre>\n<p>Por \u00faltimo, es importante mencionar que el script <code>dev<\/code> apunta a un archivo <strong>app.js<\/strong> inexistente. Crea este archivo en el directorio de tu proyecto, ya que es aqu\u00ed donde se manejar\u00e1 la l\u00f3gica de tu proyecto.<\/p>\n<pre><code class=\"language-bash\">touch app.js<\/code><\/pre>\n<h3>Configurar tus variables de entorno (tokens y secretos)<\/h3>\n<p>Necesitar\u00e1s tokens y secretos espec\u00edficos para interactuar con tu aplicaci\u00f3n Slack desde tu proyecto Node.js. Estas credenciales son sensibles, y para garantizar su protecci\u00f3n al utilizar el control de versiones, las almacenaremos en el archivo <strong>.env<\/strong>.<\/p>\n<p>Para obtener el Secreto de firma, ve a tu panel de control de Slack, haz clic en <strong>Informaci\u00f3n b\u00e1sica<\/strong> y despl\u00e1zate hasta <strong>Credenciales de la aplicaci\u00f3n<\/strong>, donde encontrar\u00e1s el Secreto de firma. Para el token, haz clic en <strong>Instalar App<\/strong> u <strong>OAuth &#038; Permisos<\/strong>, y all\u00ed encontrar\u00e1s el Token OAuth. Normalmente, el token empieza por \u00abxoxb\u00bb.<\/p>\n<p>Crea un archivo llamado <strong>.env<\/strong> en el directorio ra\u00edz de tu proyecto, y a\u00f1ade el Signing Secret y el Bot Token con el siguiente formato:<\/p>\n<pre><code class=\"language-bash\">SLACK_SIGNING_SECRET=\"YOUR SIGNING SECRET\"\nSLACK_BOT_TOKEN=\"YOUR BOT TOKEN\"<\/code><\/pre>\n<p>Para asegurarte de que esta informaci\u00f3n sensible no se env\u00eda a tu proveedor de Git, crea un <a href=\"https:\/\/kinsta.com\/es\/blog\/gitignore-no-funciona\/\">archivo .gitignore<\/a> en el directorio ra\u00edz de tu proyecto y a\u00f1ade las siguientes l\u00edneas para ignorar el archivo <strong>.env<\/strong> y la <strong>carpeta node_modules<\/strong>:<\/p>\n<pre><code class=\"language-bash\">\/node_modules\n.env<\/code><\/pre>\n<p>Una vez completada esta configuraci\u00f3n, ya est\u00e1s listo para proceder a la configuraci\u00f3n del servidor.<\/p>\n<h3>Configurar el servidor Node.js<\/h3>\n<p>Configurar el servidor Node.js es un paso clave para construir tu Slackbot. Necesitas importar los paquetes y m\u00f3dulos necesarios, inicializarlos y establecer el puerto en el que escuchar\u00e1 tu proyecto. Abre el archivo <strong>app.js<\/strong> que has creado antes y a\u00f1ade el siguiente c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">const { App } = require(\"@slack\/bolt\");\nrequire(\"dotenv\").config();\n\n\/\/ Initializes your app with your bot token and signing secret\nconst app = new App({\n  token: process.env.SLACK_BOT_TOKEN,\n  signingSecret: process.env.SLACK_SIGNING_SECRET,\n});\n\n(async () =&gt; {\n    \/\/ Start your app\n    await app.start(process.env.PORT || 3000);\n    console.log(`\u26a1\ufe0f Kinsta Bot app is running on port ${process.env.PORT || 3000}!`);\n})();<\/code><\/pre>\n<p>En el c\u00f3digo anterior, importas la clase <code>App<\/code> de la biblioteca <code>@slack\/bolt<\/code>, un componente crucial para construir aplicaciones Slack. Adem\u00e1s, utilizas el paquete <code>dotenv<\/code> para procesar variables de entorno.<\/p>\n<p>A continuaci\u00f3n, se crea la constante <code>app<\/code> utilizando la clase <code>App<\/code>, que representa tu aplicaci\u00f3n Slack bot. Requiere dos par\u00e1metros importantes: <code>token<\/code> y <code>signingSecret<\/code>. Estos valores se obtienen del archivo <strong>.env<\/strong>.<\/p>\n<p>A continuaci\u00f3n, dentro de la funci\u00f3n <code>async<\/code>, se produce la configuraci\u00f3n del servidor. La aplicaci\u00f3n se inicia llamando a <code>app.start()<\/code>. Escucha el puerto <code>3000<\/code> localmente y registra un mensaje en la consola, confirmando que la aplicaci\u00f3n Kinsta Bot se est\u00e1 ejecutando.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Cuando despliegues una aplicaci\u00f3n node, no debes definir o codificar el puerto en tu aplicaci\u00f3n. Utiliza <code>process.env.PORT<\/code> en tu c\u00f3digo cuando te refieras al puerto del servidor y el servicio de despliegue establecer\u00e1 autom\u00e1ticamente la variable de entorno `PORT`.<\/p>\n<\/aside>\n\n<p>Ahora, cuando ejecutes el script <code>dev<\/code> que configuraste (<code>npm run dev<\/code>), obtendr\u00e1s el mensaje en tu terminal \u00ab\u26a1\ufe0f \u00a1La aplicaci\u00f3n Kinsta Bot se est\u00e1 ejecutando en el puerto 3000!\u00bb<\/p>\n<h2>Comprender el Modo Socket de la API de Slack<\/h2>\n<p>En la integraci\u00f3n de la API de Slack con servidores Node.js, hay dos m\u00e9todos principales de conexi\u00f3n: utilizar el punto final HTTP p\u00fablico de tu servidor o emplear <a href=\"https:\/\/api.slack.com\/apis\/connections\/socket\" target=\"_blank\" rel=\"noopener noreferrer\">el Modo Socket<\/a> para habilitar WebSockets. Este tutorial se centra en la utilizaci\u00f3n del Modo Socket, ya que permite la implementaci\u00f3n de funciones interactivas como los comandos de barra de Slack con mayor facilidad. Este enfoque permite a Slack conectarse a tu servidor Node.js utilizando WebSockets en lugar del HTTP tradicional.<\/p>\n<p>Sin embargo, si decides utilizar el punto final HTTP localmente, puedes aprovechar <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">ngrok<\/a> para crear una URL p\u00fablica que haga proxy a tu host local.<\/p>\n<h3>C\u00f3mo empezar con el modo socket<\/h3>\n<p>Para empezar con el Modo Socket, sigue estos pasos:<\/p>\n<ol start=\"1\">\n<li>Ve a <strong>Informaci\u00f3n B\u00e1sica<\/strong> en la barra lateral izquierda de tu panel de control de Slack. Despl\u00e1zate hasta <strong>App-Level Tokens<\/strong>\u00a0y haz clic en el bot\u00f3n <strong>Generar Token y \u00c1mbitos<\/strong>.<\/li>\n<li>Dale un nombre a tu token y a\u00f1ade los dos \u00e1mbitos disponibles: <code>connections:write<\/code> y <code>authorizations:read<\/code>. Haz clic en <strong>Generar<\/strong> para crear el token.<\/li>\n<li>Copia el token generado y p\u00e9galo en tu archivo <strong>.env<\/strong>, asign\u00e1ndolo a una variable llamada <code>APP_TOKEN<\/code>. Recuerda que las cadenas de tokens a nivel de aplicaci\u00f3n empiezan por <code>xapp-<\/code>.<\/li>\n<\/ol>\n<p>A continuaci\u00f3n, haz clic en <strong>Modo<\/strong> <strong>Socket<\/strong> en la barra lateral, y activa la opci\u00f3n <strong>Activar Modo Socket<\/strong>. Por \u00faltimo, en tu archivo <strong>app.js<\/strong>, a\u00f1ade <code>socketMode:true<\/code> y tu <code>appToken<\/code> al c\u00f3digo que inicializa tu app\/servidor:<\/p>\n<pre><code class=\"language-js\">const app = new App({\n  token: process.env.SLACK_BOT_TOKEN,\n  signingSecret: process.env.SLACK_SIGNING_SECRET,\n  socketMode: true, \/\/ enable socket mode\n  appToken: process.env.APP_TOKEN,\n});<\/code><\/pre>\n<p>Una vez que hayas completado estos pasos, todas las peticiones a tu servidor de desarrollo se producir\u00e1n a trav\u00e9s de WebSockets en lugar de HTTP. Esta configuraci\u00f3n te permite aprovechar al m\u00e1ximo el Modo Socket y mejorar la funcionalidad de tu Slackbot.<\/p>\n<h2>Comandos Slash Slack<\/h2>\n<p><a href=\"https:\/\/api.slack.com\/interactivity\/slash-commands\" target=\"_blank\" rel=\"noopener noreferrer\">Los comandos slash<\/a> son una potente funci\u00f3n de Slack que permite activar acciones espec\u00edficas. Estos activadores pueden detectarse en mensajes de chat a trav\u00e9s de canales dentro de Slack. Adem\u00e1s, los comandos slash te permiten pasar datos de texto directamente a tu servidor. Por ejemplo, si configuras un comando como <code>\/operation_status [operation ID]<\/code>, pasar\u00e1 el <code>operation ID<\/code> proporcionado a tu servidor y activar\u00e1 el correspondiente oyente del comando <code>operation_status<\/code>.<\/p>\n<p>Con tu servidor correctamente configurado para interactuar con Slack, el siguiente paso es configurar comandos slash que desencadenen acciones en tu servidor.<\/p>\n<h3>Crear Comandos Slash en Slack<\/h3>\n<p>Para crear Comandos Slash en Slack, haz clic en la opci\u00f3n de men\u00fa <strong>Comandos Slash<\/strong> de la barra lateral izquierda y, a continuaci\u00f3n, en el bot\u00f3n <strong>Crear<\/strong> <strong>nuevo comando<\/strong>. Rellena el formulario resultante utilizando la imagen de abajo como gu\u00eda.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/create-a-new-slack-command.jpg\" alt=\"Crear un nuevo comando Slack.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Crear un nuevo comando Slack.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Si no est\u00e1s utilizando el Modo Socket, tendr\u00e1s que a\u00f1adir la URL de solicitud generada por ngrok. Aseg\u00farate de a\u00f1adir <strong>\/slack\/events<\/strong> al final de la URL de ngrok.<\/p>\n<\/aside>\n\n<p>Tras rellenar el formulario, haz clic en el bot\u00f3n <strong>Guardar<\/strong>. Slack te pedir\u00e1 que reinstales la aplicaci\u00f3n en tu espacio de trabajo para que los cambios surtan efecto. Sigue las instrucciones para crear algunos comandos de barra, como se muestra en la imagen siguiente:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/slash-commands-to-interact-with-kinsta-api.jpg\" alt=\"Comandos slash para interactuar con la API de Kinsta.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Comandos slash para interactuar con la API de Kinsta.<\/figcaption><\/figure>\n<h3>Configurar comandos slash con Node.js<\/h3>\n<p>Una vez que hayas creado los comandos slash necesarios, modifica tu aplicaci\u00f3n Node.js para que responda a ellos.<\/p>\n<p>Empecemos probando el comando <code>\/operation_status<\/code>. Configura una escucha para los eventos que incluyan el comando <code>\/operation_status<\/code> a\u00f1adiendo el siguiente c\u00f3digo a tu archivo <strong>app.js<\/strong>:<\/p>\n<pre><code class=\"language-js\">const { App } = require('@slack\/bolt');\nrequire('dotenv').config();\n\nconst app = new App({\n    token: process.env.SLACK_BOT_TOKEN,\n    signingSecret: process.env.SLACK_SIGNING_SECRET,\n    socketMode: true, \/\/ enable the following to use socket mode\n    appToken: process.env.APP_TOKEN,\n});\n\napp.command('\/operation_status', async ({ command, ack, say }) =&gt; {\n    await ack();\n    say('Wooah! Iit works!');\n});\n\n(async () =&gt; {\n    \/\/ Start your app\n    await app.start(process.env.PORT || 3000);\n    console.log(`\u26a1\ufe0f Kinsta Bot app is running on port ${process.env.PORT || 3000}!`);\n})();<\/code><\/pre>\n<p>En el c\u00f3digo anterior, la atenci\u00f3n se centra en la funci\u00f3n <code>app.command()<\/code>, que funciona de forma similar a los escuchadores de eventos en JavaScript. Especifica el comando que deseas escuchar y, a continuaci\u00f3n, crea una funci\u00f3n de devoluci\u00f3n de llamada as\u00edncrona para definir la acci\u00f3n deseada. Esta funci\u00f3n recibe tres par\u00e1metros:<\/p>\n<ul>\n<li><code>command<\/code><strong>:<\/strong> Contiene los detalles del comando de barra enviado por el usuario.<\/li>\n<li><code>ack<\/code><strong>:<\/strong> Acusa recibo de la orden de barra.<\/li>\n<li><code>say<\/code><strong>:<\/strong> Env\u00eda un mensaje de vuelta al canal Slack.<\/li>\n<\/ul>\n<p>Con el c\u00f3digo anterior, el comando <code>\/operation_status<\/code> en Slack generar\u00e1 el mensaje \u00ab\u00a1Wooah! \u00a1funciona!\u00bb<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/testing-kinsta-slash-command.jpg\" alt=\"Probando el comando slash Kinsta.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Probando el comando slash Kinsta.<\/figcaption><\/figure>\n<p>Ahora, vamos a a\u00f1adir los escuchadores de comandos para todos los comandos slash que has creado:<\/p>\n<pre><code class=\"language-js\">app.command('\/environment_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/site_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/operation_status', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/clear_site_cache', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});\n\napp.command('\/restart_php_engine', async ({ command, ack, say }) =&gt; {\n    await ack();\n    \/\/ Perform the desired action using the command and then send a response.\n});<\/code><\/pre>\n<p>Tu aplicaci\u00f3n ya est\u00e1 lista para escuchar los comandos slash de Slack. Es hora de a\u00f1adir las acciones que desencadenar\u00e1 cada comando.<\/p>\n<h2>Implementar Comandos Slash con la API de Kinsta<\/h2>\n<p>Tu aplicaci\u00f3n responder\u00e1 a cada comando slash con una llamada a la API de Kinsta y luego devolver\u00e1 el resultado de esa acci\u00f3n a Slack. Para utilizar <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">la API de Kinsta<\/a>, debes tener una cuenta con al menos un <a href=\"https:\/\/kinsta.com\/es\/wordpress-hosting\/\">sitio<\/a>, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicaci\u00f3n<\/a> o <a href=\"https:\/\/sevalla.com\/database-hosting\/\">base de datos<\/a> de WordPress en <a href=\"https:\/\/my.kinsta.com\/?lang=es\">MyKinsta<\/a>. Tambi\u00e9n necesitar\u00e1s generar una clave API para autenticarte y acceder a tu cuenta a trav\u00e9s de la API.<\/p>\n<h3>C\u00f3mo crear una clave API de Kinsta<\/h3>\n<p>Para generar una clave API:<\/p>\n<ol start=\"1\">\n<li>Ve a tu panel de <a href=\"https:\/\/my.kinsta.com\/?lang=es\">MyKinsta<\/a>.<\/li>\n<li>Ve a la p\u00e1gina <strong>Claves<\/strong> <strong>API (Tu nombre<\/strong> &gt; <strong>Configuraci\u00f3n de la empresa<\/strong> &gt; <strong>Claves API<\/strong>).<\/li>\n<li>Haz clic en <strong>Crear<\/strong> <strong>Clave API<\/strong>.<\/li>\n<li>Elige una fecha de caducidad o establece una fecha de inicio personalizada y un n\u00famero de horas para que caduque la clave.<\/li>\n<li>Dale a la clave un nombre \u00fanico.<\/li>\n<li>Haz clic en <strong>Generar<\/strong>.<\/li>\n<\/ol>\n<p>Cuando crees una clave API, c\u00f3piala y gu\u00e1rdala en alg\u00fan lugar seguro, ya que es la <strong>\u00fanica vez que podr\u00e1s verla<\/strong>. Para este proyecto, gu\u00e1rdala en tu archivo <strong>.env<\/strong> como <code>KINSTA_API_KEY<\/code>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Trata tu clave API como informaci\u00f3n sensible y mantenla segura. Evita compartir la clave con personas no autorizadas. Si est\u00e1s trabajando en un proyecto colaborativo, te recomendamos que utilices un <a href=\"https:\/\/kinsta.com\/es\/blog\/administradores-contrasenas\/\">gestor de contrase\u00f1as<\/a> para compartirla de forma segura.<\/p>\n<\/aside>\n\n<h3>Interactuar con la API de Kinsta en Node.js<\/h3>\n<p>Se puede interactuar con la API de Kinsta utilizando varias bibliotecas Node.js, incluida <a href=\"https:\/\/kinsta.com\/es\/blog\/bibliotecas-node-js\/#10-axios\">Axios<\/a>. Sin embargo, en este tutorial, optaremos por el m\u00e9todo JavaScript <code>fetch()<\/code>, que ahora es compatible y funciona eficazmente en las <a href=\"https:\/\/kinsta.com\/es\/blog\/node-js-20\/#performance\">\u00faltimas versiones de Node.js<\/a>.<\/p>\n<p>Para este Slackbot, se har\u00e1n muchas peticiones a la API, incluyendo peticiones GET y POST. Para evitar repeticiones, almacena la URL de la API y las cabeceras en variables para que tu c\u00f3digo sea f\u00e1cil de mantener y leer:<\/p>\n<pre><code class=\"language-js\">\/\/ kinsta API utilities\nconst KinstaAPIUrl = 'https:\/\/api.kinsta.com\/v2';\n\nconst getHeaders = {\n    Authorization: `Bearer ${process.env.KINSTA_API_KEY}`,\n};\n\nconst postHeaders = {\n    'Content-Type': 'application\/json',\n    Authorization: `Bearer ${process.env.KINSTA_API_KEY}`,\n};<\/code><\/pre>\n<p>Antes de empezar a codificar la respuesta de tu aplicaci\u00f3n a cada comando slash, deber\u00edas copiar el ID de tu empresa Kinsta y almacenarlo en el archivo <strong>.env<\/strong> como <code>KINSTA_COMPANY_ID<\/code>. Ser\u00e1 necesario para recuperar tu lista de sitios.<\/p>\n<h3>Implementaci\u00f3n del comando slash ID de entorno<\/h3>\n<p>Cuando utilices el comando slash <code>\/environment_id<\/code>, cualquier valor proporcionado despu\u00e9s del comando ser\u00e1 recuperado y utilizado en tu servidor Node.js. Para este comando, se ha a\u00f1adido una pista para indicar que espera un par\u00e1metro: el <code>[Site name]<\/code>.<\/p>\n<p>Cada sitio en MyKinsta tiene un nombre de sitio \u00fanico, pero no existe un punto final directo para solicitar el ID de entorno de un sitio utilizando su nombre. En consecuencia, primero tienes que hacer una solicitud para todos los sitios de tu cuenta de empresa, y luego utilizar el m\u00e9todo <code>find()<\/code> para localizar el sitio cuyo nombre coincida con el pasado con el comando slash.<\/p>\n<p>Para ello, se realizan dos peticiones. En primer lugar, obtienes el ID del sitio y, a continuaci\u00f3n, realizas otra solicitud al punto final <code>\/environments<\/code> para recuperar el ID del entorno asociado a ese sitio.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Cuando utilices comandos slash oblicua, es esencial que tengas en cuenta el n\u00famero de solicitudes realizadas. La API de Kinsta impone algunos l\u00edmites: puedes hacer un m\u00e1ximo de 60 peticiones por minuto para las operaciones normales, mientras que para la creaci\u00f3n de sitios, est\u00e1 restringido a 3 peticiones por minuto debido a la naturaleza intensiva en recursos de la operaci\u00f3n.<\/p>\n<\/aside>\n\n<p>Para mantener la claridad del c\u00f3digo y facilitar el mantenimiento, cada solicitud se realiza de forma independiente. Esto significa tener funciones individuales para estas solicitudes y luego llamar a esas funciones en el receptor de comandos.<\/p>\n<p>Empecemos por obtener la lista de todos tus sitios:<\/p>\n<pre><code class=\"language-js\">async function getAllSites() {\n    const query = new URLSearchParams({\n        company: process.env.KINSTA_COMPANY_ID,\n    }).toString();\n    const resp = await fetch(`${KinstaAPIUrl}\/sites?${query}`, {\n        method: 'GET',\n        headers: getHeaders,\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>El c\u00f3digo anterior devolver\u00e1 una matriz con todos los sitios. En el escuchador de comandos <code>\/environment_id<\/code>, recuperar\u00e1s la respuesta y la almacenar\u00e1s en una variable. A continuaci\u00f3n, utilizando el m\u00e9todo <code>find()<\/code>, busca un sitio cuyo nombre coincida con el pasado desde Slack. La informaci\u00f3n de Slack se almacena en <code>command.text<\/code>.<\/p>\n<pre><code class=\"language-js\">app.command('\/environment_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let siteName = command.text;\n    let response = await getAllSites();\n    if (response) {\n        let mySites = response.company.sites;\n        let currentSite = mySites.find((site) =&gt; site.name === siteName);\n        \/\/ get environment ID\n    }\n});<\/code><\/pre>\n<p>Ahora que tienes el sitio, utiliza su ID para obtener el ID del entorno. De forma similar a cuando consultamos una lista de sitios, crea una funci\u00f3n dedicada para hacer una petici\u00f3n HTTP al punto final <code>\/environments<\/code>:<\/p>\n<pre><code class=\"language-js\">async function getEnvironmentId(siteId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/${siteId}\/environments`, {\n        method: 'GET',\n        headers: getHeaders,\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>El c\u00f3digo anterior espera que el ID del sitio se pase como argumento al llamar a esta funci\u00f3n en el escuchador de comandos <code>\/environment_id<\/code>. Al recibir el ID, se realiza la solicitud a la API, y la respuesta se almacena en una variable. A continuaci\u00f3n, puedes emitir el ID del entorno en Slack utilizando el m\u00e9todo <code>say()<\/code>:<\/p>\n<pre><code class=\"language-js\">app.command('\/environment_id', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let siteName = command.text;\n    let response = await getAllSites();\n    if (response) {\n        let mySites = response.company.sites;\n        let currentSite = mySites.find((site) =&gt; site.name === siteName);\n        let envIdResponse = await getEnvironmentId(currentSite.id);\n        let envId = envIdResponse.site.environments[0].id;\n        if (envId) {\n            say(`Hey \ud83d\udc4b,nnThe environment ID for \"${siteName}\" is \ud83d\udc49 ${envId}`);\n        }\n    }\n});<\/code><\/pre>\n<p>En este punto, cuando abras Slack y escribas <code>\/environment_id<\/code> seguido de un nombre de sitio v\u00e1lido, como <code>\/environment_id fashionstored<\/code>, recibir\u00e1s una respuesta parecida a \u00e9sta:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/environment-id-slash-command.jpg\" alt=\"ID de entorno Comando Slash.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">ID de entorno Comando Slash.<\/figcaption><\/figure>\n<h3>Implementaci\u00f3n de Herramientas del Sitio (Borrar Cach\u00e9 del Sitio, Reiniciar Motor PHP) Comando Slash<\/h3>\n<p>Dos tareas que puedes implementar f\u00e1cilmente a trav\u00e9s de la API sin tener que navegar a MyKinsta son las operaciones de <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Site-Tools\/\" target=\"_blank\" rel=\"noopener noreferrer\">herramientas del sitio<\/a> Borrar cach\u00e9 del sitio y Reiniciar motor PHP.<\/p>\n<p>Para realizar cualquier operaci\u00f3n de las herramientas del sitio, todo lo que necesitas es el ID del entorno. Este ID se utiliza para hacer una petici\u00f3n POST a <code>\/sites\/tools\/clear-cache<\/code> y <code>\/sites\/tools\/restart-php<\/code> respectivamente. Como hiciste anteriormente, realiza la solicitud API de forma independiente y devuelve la respuesta:<\/p>\n<pre><code class=\"language-js\">async function clearSiteCache(environmentId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/tools\/clear-cache`, {\n        method: 'POST',\n        headers: postHeaders,\n        body: JSON.stringify({\n            environment_id: environmentId,\n        }),\n    });\n    const data = await resp.json();\n    return data;\n}\n\nasync function restartPHPEngine(environmentId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/tools\/restart-php`, {\n        method: 'POST',\n        headers: postHeaders,\n        body: JSON.stringify({\n            environment_id: environmentId,\n        }),\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>A continuaci\u00f3n, crear\u00e1s escuchadores de comandos para ambas operaciones en Slack. Estos escuchadores se configurar\u00e1n para que se activen cada vez que se utilice el comando respectivo:<\/p>\n<pre><code class=\"language-js\">app.command('\/clear_site_cache', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let environmentId = command.text;\n    let response = await clearSiteCache(environmentId);\n    if (response) {\n        say(\n            `Hey \ud83d\udc4b, nn${response.message} by using the \/operation_status slack commmand. nnOperation Id is ${response.operation_id}`\n        );\n    }\n});\n\napp.command('\/restart_php_engine', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let environmentId = command.text;\n    let response = await restartPHPEngine(environmentId);\n    if (response) {\n        say(\n            `Hey \ud83d\udc4b, nn${response.message} by using the \/operation_status slack command. nnOperation Id is ${response.operation_id}`\n        );\n    }\n});<\/code><\/pre>\n<p>En el c\u00f3digo anterior, los datos recuperados de las solicitudes de la API se utilizan para construir la respuesta enviada a Slack. La respuesta incluye informaci\u00f3n sobre la operaci\u00f3n, como el mensaje y el ID de la operaci\u00f3n.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/restart-php-engine-slackbot.jpg\" alt=\"Reinicia el motor PHP con el comando slash.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Reinicia el motor PHP con el comando slash.<\/figcaption><\/figure>\n<p>Implementando estos comandos slash y sus correspondientes listeners, har\u00e1s que tu Slackbot interact\u00fae sin problemas con la API de Kinsta, facilitando m\u00e1s que nunca la gesti\u00f3n de la cach\u00e9 de tu sitio y del motor PHP directamente desde Slack.<\/p>\n<h3>Implementar un comandos slash de estado de operaci\u00f3n<\/h3>\n<p>Tambi\u00e9n ser\u00eda bueno obtener el estado de tus operaciones desde Slack. Para ello, utilizar\u00e1s el endpoint <code>\/operations<\/code> junto con el <code>operation_id<\/code>. Como antes, crea una funci\u00f3n para gestionar esta petici\u00f3n y devolver la respuesta a la petici\u00f3n:<\/p>\n<pre><code class=\"language-js\">async function CheckOperationStatus(operationId) {\n    const resp = await fetch(`${KinstaAPIUrl}\/operations\/${operationId}`, {\n        method: 'GET',\n        headers: getHeaders,\n    });\n    const data = await resp.json();\n    return data;\n}<\/code><\/pre>\n<p>Definamos el escuchador de comandos para lanzar la solicitud y pasemos el <code>operation ID<\/code> enviado a trav\u00e9s de Slack:<\/p>\n<pre><code class=\"language-js\">app.command('\/operation_status', async ({ command, ack, say }) =&gt; {\n    await ack();\n    let operationId = command.text;\n    let response = await CheckOperationStatus(operationId);\n    let operationMessage = response.message;\n    if (operationMessage) {\n        say(`Hey \ud83d\udc4b, nn${operationMessage}`);\n    }\n});<\/code><\/pre>\n<p>Ahora, cuando utilices el comando <code>\/operation_status<\/code> barra con cualquier <code>operation ID<\/code> v\u00e1lido, obtendr\u00e1s el estado del ID devuelto a trav\u00e9s de Slack.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/check-operation-status-slackbot.jpg\" alt=\"Comprueba el estado de la operaci\u00f3n con slackbot.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Comprueba el estado de la operaci\u00f3n con slackbot.<\/figcaption><\/figure>\n<p>Adem\u00e1s de los comandos que ya has implementado con la API de Kinsta, hay m\u00e1s comandos que pueden integrarse, as\u00ed como eventos adicionales que pueden ser gestionados por el Slackbot. Por ejemplo, el Slackbot puede responder cuando se le menciona o etiqueta utilizando el s\u00edmbolo <code>@<\/code>.<\/p>\n<p>Para activar esta funcionalidad, tienes que suscribirte a los eventos necesarios en Slack. En lugar de utilizar el m\u00e9todo <code>app.command()<\/code>, utilizar\u00e1s el m\u00e9todo <code>app.message()<\/code>, que toma los par\u00e1metros <code>command<\/code> y <code>say<\/code>.<\/p>\n<p>Aqu\u00ed tienes un ejemplo de c\u00f3mo puedes conseguirlo:<\/p>\n<pre><code class=\"language-js\">app.message(\"hey\", async ({ command, say }) =&gt; {\n  say(\"Woah! It works!\");\n});<\/code><\/pre>\n<p>Despu\u00e9s de crear tu Slackbot, puede que notes que no puedes enviarle mensajes. Cuando navegas hasta el bot en la pesta\u00f1a Apps de Slack, podr\u00edas encontrarte con un mensaje que dice \u00abSe ha desactivado el env\u00edo de mensajes a esta aplicaci\u00f3n\u00bb Pero no te preocupes, \u00a1podemos solucionarlo f\u00e1cilmente!<\/p>\n<p>Para activar el env\u00edo de mensajes, sigue estos pasos:<\/p>\n<ol start=\"1\">\n<li>Haz clic en la opci\u00f3n de men\u00fa <strong>App Home<\/strong> situada en la barra lateral izquierda.<\/li>\n<li>Esta p\u00e1gina te permite gestionar todos los ajustes de tu bot. Despl\u00e1zate hacia abajo hasta que encuentres la casilla \u00abPermitir a los usuarios enviar comandos Slash y mensajes desde la pesta\u00f1a de mensajes\u00bb.<\/li>\n<li>Marca la casilla para activar esta funcionalidad.<\/li>\n<\/ol>\n<p>Una vez que hayas hecho estos cambios, es esencial que recargues tu aplicaci\u00f3n Slack para reflejar las actualizaciones. Si utilizas un Mac, puedes recargar Slack pulsando <strong>CMD +<\/strong> <strong>R<\/strong>. Para otros usuarios de PC, puedes hacerlo pulsando <strong>CTRL + R<\/strong>.<\/p>\n<p>Ahora, \u00a1ya est\u00e1s listo para enviar mensajes a tu bot! En la aplicaci\u00f3n Slack, deber\u00edas ver la aplicaci\u00f3n Kinsta Bot justo debajo de la secci\u00f3n <strong>Tus aplicaciones<\/strong>. Haz clic en ella para empezar a enviar mensajes. No dudes en probar cualquiera de los comandos de barra que hayas configurado, y deber\u00edan funcionar a la perfecci\u00f3n. \u00a1Disfruta de la interacci\u00f3n fluida con tu Slackbot!<\/p>\n<p>El c\u00f3digo fuente completo de este proyecto est\u00e1 disponible en <a href=\"https:\/\/github.com\/kinsta\/SlackBot-Kinsta-API\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>.<br \/>\n<\/p>\n<h2>Desplegar Tu Aplicaci\u00f3n Node.js en Kinsta<\/h2>\n<p>Cuando construyas tu servidor Node.js, es importante <a href=\"https:\/\/sevalla.com\/application-hosting\/\">desplegarlo<\/a> para que tu Slackbot est\u00e9 siempre disponible, incluso si detienes tu desarrollo local. Puedes desplegarlo en la plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones<\/a> de Kinsta si tu c\u00f3digo est\u00e1 alojado en los proveedores 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>.<\/p>\n<p>Para desplegar tu repositorio en Kinsta, sigue estos pasos:<\/p>\n<ol start=\"1\">\n<li>Accede a tu cuenta Kinsta en el panel de control MyKinsta.<\/li>\n<li>Haz clic en <strong>A\u00f1adir servicio<\/strong>.<\/li>\n<li>Selecciona <strong>Aplicaci\u00f3n<\/strong> en el men\u00fa desplegable.<\/li>\n<li>En el modal que aparece, elige el repositorio que quieres desplegar. Si tienes varias ramas, puedes seleccionar la rama deseada y dar un nombre a tu aplicaci\u00f3n.<\/li>\n<li>Selecciona una de las ubicaciones de centros de datos disponibles. Kinsta detectar\u00e1 e instalar\u00e1 las dependencias de tu aplicaci\u00f3n a partir de package.json, luego construir\u00e1 y desplegar\u00e1.<\/li>\n<\/ol>\n<p>Por \u00faltimo, no es seguro enviar claves API a hosts p\u00fablicos como tu proveedor de Git. Cuando alojes en Kinsta, puedes a\u00f1adirlas como <a href=\"https:\/\/docs.sevalla.com\/applications\/environment-variables\">variables de entorno<\/a> utilizando el mismo nombre de variable y valor especificados en tu archivo <strong>.env<\/strong> de desarrollo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/set-env-variables-myKinsta.jpg\" alt=\"Establece variables de entorno en DevKinsta al desplegar.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Establece variables de entorno en DevKinsta al desplegar.<\/figcaption><\/figure>\n<p>Una vez que inicies el despliegue de tu aplicaci\u00f3n, comenzar\u00e1 el proceso y normalmente se completar\u00e1 en unos minutos. Si alg\u00fan problema con tus configuraciones de Node.js afecta al despliegue, puedes a\u00f1adir un buildpack de Node.js en la pesta\u00f1a de configuraci\u00f3n del despliegue.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Puedes activar el despliegue autom\u00e1tico, para que Kinsta vuelva a desplegar tu aplicaci\u00f3n cada vez que cambies tu c\u00f3digo base y lo env\u00edes a GitHub.<\/p>\n<\/aside>\n\n<h2>Resumen<\/h2>\n<p>En este art\u00edculo, has aprendido c\u00f3mo construir una aplicaci\u00f3n Node.js que conecta Slack con la API de Kinsta y c\u00f3mo desplegar esa aplicaci\u00f3n en Kinsta.<\/p>\n<p>Slackbots y la API de Kinsta te facilitan la monitorizaci\u00f3n y gesti\u00f3n de tus servicios alojados en Kinsta. Partiendo de lo b\u00e1sico de este tutorial, imagina lo que puedes hacer con un Slackbot y la API. Piensa en comandos m\u00e1s complejos que realicen operaciones como la <a href=\"https:\/\/kinsta.com\/es\/blog\/clonar-sitio-wordpress\/\">clonaci\u00f3n de sitios<\/a> WordPress y la <a href=\"https:\/\/kinsta.com\/es\/blog\/api-wordpress\/\">creaci\u00f3n de sitios<\/a> directamente desde Slack.<\/p>\n<p><em>\u00bfC\u00f3mo utilizas la API Kinsta? \u00bfQu\u00e9 funciones te gustar\u00eda que se a\u00f1adieran\/expusieran pr\u00f3ximamente?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Slack es una potente plataforma de mensajer\u00eda que permite a los equipos colaborar de forma eficiente. Y si esa colaboraci\u00f3n tambi\u00e9n implica ocuparse de varios sitios &#8230;<\/p>\n","protected":false},"author":287,"featured_media":69048,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1270,1311],"class_list":["post-69047","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Construye un Slackbot de Gesti\u00f3n de Sitios con Node.js y la API de Kinsta<\/title>\n<meta name=\"description\" content=\"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web\" \/>\n<meta property=\"og:description\" content=\"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\" \/>\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-08-10T13:48:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-05T14:02:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web\",\"datePublished\":\"2023-08-10T13:48:29+00:00\",\"dateModified\":\"2023-09-05T14:02:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\"},\"wordCount\":3956,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\",\"name\":\"Construye un Slackbot de Gesti\u00f3n de Sitios con Node.js y la API de Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"datePublished\":\"2023-08-10T13:48:29+00:00\",\"dateModified\":\"2023-09-05T14:02:59+00:00\",\"description\":\"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web\"}]},{\"@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\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construye un Slackbot de Gesti\u00f3n de Sitios con Node.js y la API de Kinsta","description":"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web","og_description":"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.","og_url":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-08-10T13:48:29+00:00","article_modified_time":"2023-09-05T14:02:59+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"21 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web","datePublished":"2023-08-10T13:48:29+00:00","dateModified":"2023-09-05T14:02:59+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/"},"wordCount":3956,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/","url":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/","name":"Construye un Slackbot de Gesti\u00f3n de Sitios con Node.js y la API de Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","datePublished":"2023-08-10T13:48:29+00:00","dateModified":"2023-09-05T14:02:59+00:00","description":"Aprende a construir un potente Slackbot con Node.js y la API de Kinsta para agilizar la administraci\u00f3n del sitio con comandos de Slack slash.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/construir-slackbot-para-gestion-de-sitios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/es\/secciones\/api\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo Construir un Slackbot con Node.js y la API de Kinsta para la Gesti\u00f3n de Sitios Web"}]},{"@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\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/es\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69047","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\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=69047"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69047\/revisions"}],"predecessor-version":[{"id":69847,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69047\/revisions\/69847"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69047\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/69048"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=69047"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=69047"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=69047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}