{"id":62027,"date":"2023-12-05T10:50:23","date_gmt":"2023-12-05T13:50:23","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=62027&#038;preview=true&#038;preview_id=62027"},"modified":"2023-12-06T08:23:36","modified_gmt":"2023-12-06T11:23:36","slug":"criar-slackbot-gerenciamento-sites","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/","title":{"rendered":"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites"},"content":{"rendered":"<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-usar-slack\/\">Slack<\/a> \u00e9 uma poderosa plataforma de mensagens que permite que as equipes colaborem de forma eficiente. E se essa colabora\u00e7\u00e3o tamb\u00e9m envolve cuidar de v\u00e1rios sites <a href=\"https:\/\/kinsta.com\/pt\/wordpress\/\">WordPress<\/a> aqui na Kinsta, voc\u00ea pode mover algumas tarefas comuns de gerenciamento de sites para o Slack com a ajuda da <a href=\"https:\/\/kinsta.com\/pt\/docs\/api-da-kinsta\/\">API da Kinsta<\/a>.<\/p>\n<p>Ao integrar um Slackbot ao seu fluxo de trabalho, voc\u00ea pode economizar tempo e aumentar a produtividade. Este tutorial combina o poder do Slack e da API da Kinsta para criar um Slackbot capaz de gerenciar tarefas como verificar o status, limpar o cache e reiniciar o mecanismo PHP de um site.<\/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>O que voc\u00ea est\u00e1 criando<\/h2>\n<p>Aqui voc\u00ea est\u00e1 criando um Slackbot no <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-instalar-o-node-js\/\">Node.js<\/a> usando a <a href=\"https:\/\/api.slack.com\/tools\/bolt\" target=\"_blank\" rel=\"noopener noreferrer\">API Bolt<\/a> (a maneira mais r\u00e1pida de come\u00e7ar a programar com a plataforma Slack). Seu aplicativo transforma os comandos slash do Slack em chamadas para a API da Kinsta e retransmite as respostas para que toda a intera\u00e7\u00e3o do usu\u00e1rio ocorra no 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=\"Demonstra\u00e7\u00e3o do Slackbot da API da Kinsta.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Demonstra\u00e7\u00e3o do Slackbot da API da Kinsta.<\/figcaption><\/figure>\n<h3>Pr\u00e9-requisitos<\/h3>\n<p>Para acompanhar este projeto, voc\u00ea deve ter o seguinte:<\/p>\n<ul>\n<li>Conhecimento b\u00e1sico de <a href=\"https:\/\/kinsta.com\/pt\/javascript\/\">JavaScript<\/a> e Node.js<\/li>\n<li>Node.js vers\u00e3o 12 ou superior<\/li>\n<li>npm (<a href=\"https:\/\/kinsta.com\/pt\/blog\/npm-gerenciador-pacotes-node\/\">gerenciador de pacotes do Node<\/a>) instalado em seu computador<\/li>\n<li>Espa\u00e7o de trabalho do Slack<\/li>\n<\/ul>\n<h2>Como criar um aplicativo do Slack<\/h2>\n<p>Um Slackbot \u00e9 essencialmente um aplicativo do Slack. Para criar um novo aplicativo do Slack, siga estas etapas:<\/p>\n<ol start=\"1\">\n<li>Navegue at\u00e9 o painel de controle da <a href=\"https:\/\/api.slack.com\/apps\/\" target=\"_blank\" rel=\"noopener noreferrer\">API do Slack<\/a>.<\/li>\n<li>Clique no bot\u00e3o <strong>Create New App<\/strong>, que abrir\u00e1 um modal.<\/li>\n<li>Selecione a op\u00e7\u00e3o <strong>From Scratch<\/strong> para come\u00e7ar a criar seu aplicativo do zero.<\/li>\n<li>Forne\u00e7a um nome para seu aplicativo Slack. Por exemplo, <strong>Kinsta Bot<\/strong>.<\/li>\n<li>Em seguida, escolha o espa\u00e7o de trabalho onde voc\u00ea deseja instalar o aplicativo e clique no bot\u00e3o <strong>Create App<\/strong>.<\/li>\n<\/ol>\n<p>N\u00e3o hesite em editar as informa\u00e7\u00f5es b\u00e1sicas do seu aplicativo navegando at\u00e9 a op\u00e7\u00e3o <strong>Basic Information <\/strong>na barra lateral. Role para baixo at\u00e9 <strong>Display Information <\/strong>para adicionar detalhes como uma imagem, nome, descri\u00e7\u00e3o, cor e muito mais.<\/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=\"Informa\u00e7\u00f5es de exibi\u00e7\u00e3o do Slackbot.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Informa\u00e7\u00f5es de exibi\u00e7\u00e3o do Slackbot.<\/figcaption><\/figure>\n<h3>Configura\u00e7\u00e3o do OAuth e das permiss\u00f5es<\/h3>\n<p>Voc\u00ea criou um Slackbot com sucesso. No entanto, algumas permiss\u00f5es devem ser concedidas para que voc\u00ea possa acessar dados e executar a\u00e7\u00f5es no seu espa\u00e7o de trabalho do Slack. Para acessar as configura\u00e7\u00f5es necess\u00e1rias:<\/p>\n<ol start=\"1\">\n<li>V\u00e1 ao painel do aplicativo Slack e localize a op\u00e7\u00e3o <strong>OAuth and Permissions <\/strong>na barra lateral esquerda.<\/li>\n<li>Quando voc\u00ea estiver l\u00e1, role para baixo at\u00e9 a se\u00e7\u00e3o <strong>Scopes<\/strong>.<\/li>\n<li>Conceda ao seu bot a capacidade de ler mensagens instant\u00e2neas dos usu\u00e1rios e responder a essas mensagens.<\/li>\n<\/ol>\n<p>Abaixo est\u00e1 uma captura de tela mostrando os escopos que voc\u00ea deve fornecer ao seu 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=\"Escopos do aplicativo Slack.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Escopos do aplicativo Slack.<\/figcaption><\/figure>\n<p>Ao configurar esses escopos, seu bot estar\u00e1 equipado para interagir perfeitamente com os usu\u00e1rios do Slack e realizar suas fun\u00e7\u00f5es pretendidas de forma eficaz.<\/p>\n<h3>Instalando o Slackbot em seu espa\u00e7o de trabalho<\/h3>\n<p>Para concluir o processo, voc\u00ea deve instalar o novo Slackbot no seu espa\u00e7o de trabalho do Slack. Navegue at\u00e9 a barra lateral esquerda e selecione <strong>Install Apps<\/strong>. A partir da\u00ed, clique em <strong>Install to Workspace<\/strong> e especifique o canal em que voc\u00ea deseja adicionar o bot.<\/p>\n<p>Agora seu Slackbot est\u00e1 pronto. Vamos configurar um servidor Node.js, que ser\u00e1 usado para receber e processar suas solicita\u00e7\u00f5es.<\/p>\n<h2>Configurando o ambiente de desenvolvimento<\/h2>\n<p>Para come\u00e7ar com seu novo projeto Node.js, crie um novo diret\u00f3rio para o seu aplicativo e o inicialize com o npm:<\/p>\n<pre><code class=\"language-bash\">mkdir my-express-app \ncd my-express-app \nnpm init -y<\/code><\/pre>\n<p>Ap\u00f3s executar o comando acima, um novo arquivo <strong>package.json<\/strong> \u00e9 criado no diret\u00f3rio que voc\u00ea escolheu com valores padr\u00e3o. O arquivo <strong>package.json<\/strong> \u00e9 essencial, pois cont\u00e9m informa\u00e7\u00f5es sobre seu projeto e suas depend\u00eancias. Essas depend\u00eancias permitir\u00e3o que voc\u00ea desenvolva sem problemas e aprimore a funcionalidade do seu projeto:<\/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 permite que voc\u00ea crie rapidamente aplicativos Slack ricos em recursos, aproveitando os recursos mais recentes da plataforma.<\/li>\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/nodemon\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a><\/code>: Uma ferramenta valiosa que reinicia automaticamente o aplicativo Node.js sempre que s\u00e3o detectadas altera\u00e7\u00f5es de arquivos no diret\u00f3rio, garantindo um fluxo de trabalho de desenvolvimento simplificado.<\/li>\n<li><code><a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a><\/code>: Este m\u00f3dulo de depend\u00eancia zero desempenha um papel crucial no carregamento de vari\u00e1veis de ambiente do arquivo <strong>.env<\/strong> para o <code>process.env<\/code>, facilitando o gerenciamento da configura\u00e7\u00e3o.<\/li>\n<\/ol>\n<p>Para instalar os pacotes necess\u00e1rios, execute os seguintes comandos:<\/p>\n<pre><code class=\"language-bash\">npm i @slack\/bolt\nnpm i --save-dev nodemon dotenv<\/code><\/pre>\n<p>Ap\u00f3s instalar com \u00eaxito essas depend\u00eancias e as depend\u00eancias de desenvolvimento, \u00e9 hora de adicionar um script de desenvolvimento ao arquivo <strong>package.json<\/strong>, utilizando <code>nodemon<\/code> para executar o arquivo JavaScript. Certifique-se de que seu objeto de script <strong>package.json<\/strong> inclua o seguinte:<\/p>\n<pre><code class=\"language-json\">\"scripts\": {\n  \"dev\": \"nodemon app.js\"\n}<\/code><\/pre>\n<p>Por fim, \u00e9 importante mencionar que o script <code>dev<\/code> est\u00e1 apontando para um arquivo <strong>app.js<\/strong> inexistente. Crie esse arquivo no diret\u00f3rio do seu projeto, pois \u00e9 nele que a l\u00f3gica do seu projeto ser\u00e1 tratada.<\/p>\n<pre><code class=\"language-bash\">touch app.js<\/code><\/pre>\n<h3>Configura\u00e7\u00e3o das vari\u00e1veis de ambiente (tokens e segredos)<\/h3>\n<p>Voc\u00ea precisar\u00e1 de tokens e segredos espec\u00edficos para interagir com o aplicativo Slack a partir do seu projeto Node.js. Essas credenciais s\u00e3o confidenciais e, para garantir sua prote\u00e7\u00e3o ao usar o controle de vers\u00e3o, n\u00f3s as armazenaremos no arquivo <strong>.env<\/strong>.<\/p>\n<p>Para obter o segredo de assinatura, acesse o painel do Slack, clique em <strong>Basic Information<\/strong>\u00a0e role para baixo at\u00e9 <strong>App Credentials<\/strong>,\u00a0onde voc\u00ea encontrar\u00e1 o segredo de assinatura. Para obter o token, clique em <strong>Install App<\/strong> ou <strong>OAuth &#038; Permissions<\/strong>, e l\u00e1 voc\u00ea encontrar\u00e1 o token OAuth. Normalmente o token come\u00e7a com &#8220;xoxb&#8221;.<\/p>\n<p>Crie um arquivo chamado <strong>.env<\/strong> no diret\u00f3rio raiz do seu projeto e adicione o Signing Secret e o Bot Token no seguinte 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 garantir que essas informa\u00e7\u00f5es confidenciais n\u00e3o sejam enviadas ao seu provedor Git, crie um <a href=\"https:\/\/kinsta.com\/pt\/blog\/nao-funcionamento-do-gitignore\/\">arquivo .gitignore<\/a> no diret\u00f3rio raiz do seu projeto e adicione as seguintes linhas para ignorar o arquivo <strong>.env<\/strong> e a <strong>pasta node_modules<\/strong>:<\/p>\n<pre><code class=\"language-bash\">\/node_modules\n.env<\/code><\/pre>\n<p>Com essa configura\u00e7\u00e3o conclu\u00edda, agora voc\u00ea est\u00e1 pronto para prosseguir com a configura\u00e7\u00e3o do servidor.<\/p>\n<h3>Configura\u00e7\u00e3o do servidor Node.js<\/h3>\n<p>A configura\u00e7\u00e3o do servidor Node.js \u00e9 uma etapa fundamental na cria\u00e7\u00e3o do Slackbot. Voc\u00ea precisa importar os pacotes e m\u00f3dulos necess\u00e1rios, inicializ\u00e1-los e definir a porta na qual o projeto escutar\u00e1. Abra o arquivo <strong>app.js<\/strong> que voc\u00ea criou anteriormente e adicione o seguinte 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>No c\u00f3digo acima, voc\u00ea importa a classe <code>App<\/code> da biblioteca <code>@slack\/bolt<\/code>, um componente crucial para a cria\u00e7\u00e3o de aplicativos do Slack. Al\u00e9m disso, voc\u00ea usa o pacote <code>dotenv<\/code> para processar vari\u00e1veis de ambiente.<\/p>\n<p>Em seguida, a constante <code>app<\/code> \u00e9 criada usando a classe <code>App<\/code>, que representa seu aplicativo de bot do Slack. Ela requer dois par\u00e2metros importantes: <code>token<\/code> e <code>signingSecret<\/code>. Esses valores s\u00e3o obtidos do arquivo <strong>.env<\/strong>.<\/p>\n<p>Em seguida, dentro da fun\u00e7\u00e3o <code>async<\/code>, ocorre a configura\u00e7\u00e3o do servidor. O aplicativo \u00e9 iniciado chamando <code>app.start()<\/code>. Ele escuta a porta <code>3000<\/code> localmente e registra uma mensagem no console, confirmando que o aplicativo Kinsta Bot est\u00e1 em execu\u00e7\u00e3o.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Ao implantar um aplicativo node, voc\u00ea n\u00e3o deve definir ou codificar a porta em seu aplicativo. Use <code>process.env.PORT<\/code> em seu c\u00f3digo ao se referir \u00e0 porta do servidor e o servi\u00e7o de implanta\u00e7\u00e3o definir\u00e1 automaticamente a vari\u00e1vel de ambiente &#8216;PORT&#8217;.<\/p>\n<\/aside>\n\n<p>Agora, quando voc\u00ea executar o script <code>dev<\/code> que configurou (<code>npm run dev<\/code>), receber\u00e1 a mensagem no terminal: &#8220;\u26a1\ufe0f O aplicativo Kinsta Bot est\u00e1 sendo executado na porta 3000!&#8221;<\/p>\n<h2>Entendendo o Modo Socket da API do Slack<\/h2>\n<p>Na integra\u00e7\u00e3o da API do Slack com os servidores Node.js, h\u00e1 dois m\u00e9todos principais de conex\u00e3o: utilizar o ponto de extremidade HTTP p\u00fablico do seu servidor ou empregar o Modo Socket para ativar os WebSockets. Este tutorial se concentra na utiliza\u00e7\u00e3o do Modo Socket, pois ele permite a implanta\u00e7\u00e3o de recursos interativos, como os comandos slash do Slack, com maior facilidade. Essa abordagem permite que o Slack se conecte ao seu servidor Node.js usando WebSockets em vez do HTTP tradicional.<\/p>\n<p>No entanto, se voc\u00ea optar por usar o ponto de extremidade HTTP localmente, poder\u00e1 aproveitar o <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">ngrok<\/a> para criar uma URL p\u00fablica que fa\u00e7a proxy para o seu host local.<\/p>\n<h3>Primeiros passos com o Modo Socket<\/h3>\n<p>Para come\u00e7ar a usar o Modo Socket, siga estas etapas:<\/p>\n<ol start=\"1\">\n<li>Navegue at\u00e9 <strong>Basic Information<\/strong>\u00a0na barra lateral esquerda do seu painel do Slack. Role para baixo at\u00e9 <strong>App-Level Tokens<\/strong>\u00a0e clique no bot\u00e3o <strong>Generate Token and Scopes<\/strong>.<\/li>\n<li>D\u00ea um nome ao seu token e adicione os dois escopos dispon\u00edveis: <code>connections:write<\/code> e <code>authorizations:read<\/code>. Clique em <strong>Generate <\/strong>para criar o token.<\/li>\n<li>Copie o token gerado e cole-o em seu arquivo <strong>.env<\/strong>, atribuindo-o a uma vari\u00e1vel chamada <code>APP_TOKEN<\/code>. Lembre-se de que as cadeias de tokens em n\u00edvel de aplicativo come\u00e7am com <code>xapp-<\/code>.<\/li>\n<\/ol>\n<p>Em seguida, clique em <strong>Socket Mode <\/strong>na barra lateral e mude a op\u00e7\u00e3o <strong>Enable Socket Mode<\/strong>. Por fim, no arquivo <strong>app.js<\/strong>, adicione <code>socketMode:true<\/code> e <code>appToken<\/code> ao c\u00f3digo que inicializa o aplicativo\/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>Depois que voc\u00ea tiver conclu\u00eddo essas etapas, todas as solicita\u00e7\u00f5es ao seu servidor de desenvolvimento ocorrer\u00e3o via WebSockets em vez de HTTP. Essa configura\u00e7\u00e3o permite que voc\u00ea aproveite ao m\u00e1ximo o Modo Socket e aprimore a funcionalidade do Slackbot.<\/p>\n<h2>Comandos slash do Slack<\/h2>\n<p>Os <a href=\"https:\/\/api.slack.com\/interactivity\/slash-commands\" target=\"_blank\" rel=\"noopener noreferrer\">comandos slash<\/a> (Slash Commands) s\u00e3o um recurso avan\u00e7ado do Slack que permite que voc\u00ea acione gatilhos personalizados para a\u00e7\u00f5es espec\u00edficas. Esses acionadores podem ser detectados em mensagens de chat nos canais do Slack. Al\u00e9m disso, os comandos slash permitem que voc\u00ea passe dados de texto diretamente ao seu servidor. Por exemplo, se voc\u00ea configurar um comando como <code>\/operation_status [operation ID]<\/code>, ele passar\u00e1 o <code>operation ID<\/code> fornecido ao seu servidor e acionar\u00e1 o ouvinte do comando <code>operation_status<\/code> correspondente.<\/p>\n<p>Com o servidor devidamente configurado para interagir com o Slack, a pr\u00f3xima etapa \u00e9 configurar comandos slash que acionar\u00e3o a\u00e7\u00f5es no seu servidor.<\/p>\n<h3>Como criar comandos slash no Slack<\/h3>\n<p>Para criar comandos slash no Slack, clique na op\u00e7\u00e3o <strong>Slash Commands<\/strong> na barra lateral esquerda e, em seguida, clique no bot\u00e3o <strong>Create<\/strong> <strong>New Command<\/strong>. Preencha o formul\u00e1rio resultante usando a imagem abaixo como guia.<\/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=\"Crie um novo comando do Slack.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Crie um novo comando do Slack.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Se n\u00e3o estiver usando o Modo Socket, voc\u00ea precisar\u00e1 adicionar a URL de solicita\u00e7\u00e3o gerada pelo ngrok. Certifique-se de acrescentar <strong>\/slack\/events<\/strong> no final da URL do ngrok.<\/p>\n<\/aside>\n\n<p>Ap\u00f3s preencher o formul\u00e1rio, clique no bot\u00e3o <strong>Save<\/strong>. O Slack solicitar\u00e1 que voc\u00ea reinstale o aplicativo no seu espa\u00e7o de trabalho para que as altera\u00e7\u00f5es tenham efeito. Siga as instru\u00e7\u00f5es para criar alguns comandos slash, conforme mostrado na imagem abaixo:<\/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 interagir com a API da Kinsta.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Comandos slash para interagir com a API da Kinsta.<\/figcaption><\/figure>\n<h3>Configurando comandos slash com o Node.js<\/h3>\n<p>Depois que voc\u00ea tiver criado os comandos slash necess\u00e1rios, modifique seu aplicativo Node.js para responder a eles.<\/p>\n<p>Vamos come\u00e7ar testando o comando <code>\/operation_status<\/code>. Configure um ouvinte para eventos que incluam o comando <code>\/operation_status<\/code> adicionando o seguinte c\u00f3digo ao seu arquivo <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>No c\u00f3digo acima, o foco est\u00e1 na fun\u00e7\u00e3o <code>app.command()<\/code>, que funciona de forma semelhante aos ouvintes de eventos em JavaScript. Voc\u00ea especifica o comando que deseja ouvir e, em seguida, cria uma fun\u00e7\u00e3o callback ass\u00edncrona para definir a a\u00e7\u00e3o desejada. Essa fun\u00e7\u00e3o recebe tr\u00eas par\u00e2metros:<\/p>\n<ul>\n<li><code>command<\/code>: Cont\u00e9m os detalhes do comando slash enviado pelo usu\u00e1rio.<\/li>\n<li><code>ack<\/code>: Confirma o recebimento do comando slash.<\/li>\n<li><code>say<\/code>: Envia uma mensagem de volta ao canal do Slack.<\/li>\n<\/ul>\n<p>Com o c\u00f3digo acima, o comando <code>\/operation_status<\/code> no Slack gerar\u00e1 a mensagem: \u201cWooah! it works!\u201d (&#8220;Uhuu! funciona!&#8221;).<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/testing-kinsta-slash-command.jpg\" alt=\"Testando o comando slash da Kinsta.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Testando o comando slash da Kinsta.<\/figcaption><\/figure>\n<p>Agora vamos adicionar os ouvintes de comando para todos os comandos slash que voc\u00ea criou:<\/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>Seu aplicativo agora est\u00e1 pronto para ouvir os comandos slash do Slack. \u00c9 hora de adicionar as a\u00e7\u00f5es que cada comando acionar\u00e1.<\/p>\n<h2>Implanta\u00e7\u00e3o de comandos slash com a API da Kinsta<\/h2>\n<p>Seu aplicativo responder\u00e1 a cada comando slash com uma chamada para a API da Kinsta, e em seguida retornar\u00e1 o resultado dessa a\u00e7\u00e3o para o Slack. Para usar a <a href=\"https:\/\/kinsta.com\/pt\/docs\/api-da-kinsta\/\">API da Kinsta<\/a>, voc\u00ea deve ter uma conta com pelo menos um <a href=\"https:\/\/kinsta.com\/pt\/hospedagem-wordpress\/\">site<\/a>, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">aplicativo<\/a> ou <a href=\"https:\/\/sevalla.com\/database-hosting\/\">banco de dados<\/a> do WordPress no <a href=\"https:\/\/my.kinsta.com\/?lang=pt\">MyKinsta<\/a>. Voc\u00ea tamb\u00e9m precisar\u00e1 gerar uma chave API para autenticar e acessar sua conta atrav\u00e9s da API.<\/p>\n<h3>Como criar uma chave API da Kinsta<\/h3>\n<p>Para gerar uma chave API:<\/p>\n<ol start=\"1\">\n<li>V\u00e1 ao seu painel <a href=\"https:\/\/my.kinsta.com\/?lang=pt\">MyKinsta<\/a>.<\/li>\n<li>Navegue at\u00e9 a p\u00e1gina <strong>Chaves API (Seu nome<\/strong> &gt; <strong>Configura\u00e7\u00f5es da empresa<\/strong> &gt; <strong>Chaves API)<\/strong>.<\/li>\n<li>Clique em <strong>Criar chave<\/strong> <strong>API<\/strong>.<\/li>\n<li>Escolha uma data de expira\u00e7\u00e3o ou defina uma data de in\u00edcio personalizada e o n\u00famero de horas para a chave expirar.<\/li>\n<li>D\u00ea \u00e0 chave um nome exclusivo.<\/li>\n<li>Clique em <strong>Gerar<\/strong>.<\/li>\n<\/ol>\n<p>Quando voc\u00ea criar uma chave API, copie-a e armazene-a em algum lugar seguro, pois <strong>essa \u00e9 a \u00fanica vez que voc\u00ea poder\u00e1 v\u00ea-la<\/strong>. Para este projeto, salve-a em seu arquivo <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>Trate sua chave API como informa\u00e7\u00e3o confidencial e a mantenha segura. Evite compartilh\u00e1-la com pessoas n\u00e3o autorizadas. Se voc\u00ea estiver trabalhando em um projeto colaborativo, recomendamos o uso de um <a href=\"https:\/\/kinsta.com\/pt\/blog\/gerenciadores-de-senhas\/\">gerenciador de senhas<\/a> para compartilh\u00e1-la com seguran\u00e7a.<\/p>\n<\/aside>\n\n<h3>Interagindo com a API da Kinsta no Node.js<\/h3>\n<p>Para interagir com a API da Kinsta, voc\u00ea pode usar v\u00e1rias bibliotecas Node.js, incluindo a <a href=\"https:\/\/kinsta.com\/pt\/blog\/bibliotecas-node-js\/#10-axios\">Axios<\/a>. No entanto, neste tutorial, optaremos pelo m\u00e9todo JavaScript <code>fetch()<\/code>, que agora \u00e9 suportado e funciona de forma eficiente nas <a href=\"https:\/\/kinsta.com\/pt\/blog\/node-js-20\/\">vers\u00f5es mais recentes do Node.js<\/a>.<\/p>\n<p>Para esse Slackbot ser\u00e3o feitas muitas solicita\u00e7\u00f5es de API, incluindo solicita\u00e7\u00f5es GET e POST. Para evitar repeti\u00e7\u00f5es, armazene a URL da API e os cabe\u00e7alhos em vari\u00e1veis para que seu c\u00f3digo seja f\u00e1cil de manter e ler:<\/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 come\u00e7ar a codificar a resposta do seu aplicativo a cada comando slash, voc\u00ea deve copiar o ID da sua empresa na Kinsta e armazen\u00e1-lo no arquivo <strong>.env<\/strong> como <code>KINSTA_COMPANY_ID<\/code>. Voc\u00ea precisar\u00e1 dele para recuperar sua lista de sites.<\/p>\n<h3>Implanta\u00e7\u00e3o do comando slash Environment ID<\/h3>\n<p>Quando voc\u00ea usa o comando slash <code>\/environment_id<\/code>, qualquer valor fornecido ap\u00f3s o comando ser\u00e1 recuperado e usado no seu servidor Node.js. Para esse comando, foi adicionada uma dica para indicar que voc\u00ea espera um par\u00e2metro: o <code>[Site name]<\/code>.<\/p>\n<p>Cada site no MyKinsta tem um nome de site exclusivo, mas n\u00e3o h\u00e1 um ponto de extremidade direto para solicitar o ID de ambiente (environment ID) de um site usando seu nome. Consequentemente, primeiro voc\u00ea precisa fazer uma solicita\u00e7\u00e3o para todos os sites na conta da sua empresa e, em seguida, usar o m\u00e9todo <code>find()<\/code> para localizar o site cujo nome corresponda ao que foi passado com o comando slash.<\/p>\n<p>Para isso s\u00e3o feitas duas solicita\u00e7\u00f5es. Primeiro voc\u00ea obt\u00e9m o ID do site e, em seguida, faz outra solicita\u00e7\u00e3o ao ponto de extremidade <code>\/environments<\/code> para recuperar o ID de ambiente associado a esse site.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Ao usar comandos slash, \u00e9 preciso ficar atento ao n\u00famero de solicita\u00e7\u00f5es feitas. A API da Kinsta imp\u00f5e alguns limites: voc\u00ea pode fazer um m\u00e1ximo de 60 solicita\u00e7\u00f5es por minuto para opera\u00e7\u00f5es regulares, e para cria\u00e7\u00e3o de sites at\u00e9 tr\u00eas solicita\u00e7\u00f5es por minuto, devido \u00e0 natureza intensiva de uso de recursos da opera\u00e7\u00e3o.<\/p>\n<\/aside>\n\n<p>Para manter a clareza do c\u00f3digo e a facilidade de manuten\u00e7\u00e3o, cada solicita\u00e7\u00e3o \u00e9 feita de forma independente. Isso significa ter fun\u00e7\u00f5es individuais para essas solicita\u00e7\u00f5es, e, em seguida, chamar essas fun\u00e7\u00f5es no ouvinte de comando.<\/p>\n<p>Vamos come\u00e7ar buscando a lista de todos os seus sites:<\/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>O c\u00f3digo acima retornar\u00e1 um array contendo todos os sites. No ouvinte de comando <code>\/environment_id<\/code>, voc\u00ea recuperar\u00e1 a resposta e a armazenar\u00e1 em uma vari\u00e1vel. Em seguida, usando o m\u00e9todo <code>find()<\/code>, voc\u00ea procurar\u00e1 um site cujo nome corresponda ao que foi passado pelo Slack. As informa\u00e7\u00f5es do Slack s\u00e3o armazenadas em <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>Agora que voc\u00ea tem o site, use seu ID para buscar o ID de ambiente. Da mesma forma que quando consultamos uma lista de sites, crie uma fun\u00e7\u00e3o dedicada para fazer uma solicita\u00e7\u00e3o HTTP para o ponto de extremidade <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>O c\u00f3digo acima espera que o ID do site seja passado como um argumento quando voc\u00ea chamar essa fun\u00e7\u00e3o no ouvinte de comando <code>\/environment_id<\/code>. Ao receber o ID, a solicita\u00e7\u00e3o de API \u00e9 feita e a resposta \u00e9 armazenada em uma vari\u00e1vel. Em seguida, voc\u00ea pode emitir o ID de ambiente no Slack usando o 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>Neste ponto, quando voc\u00ea abrir o Slack e digitar <code>\/environment_id<\/code> seguido de um nome de site v\u00e1lido, como <code>\/environment_id fashionstored<\/code>, receber\u00e1 uma resposta semelhante a esta:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/environment-id-slash-command.jpg\" alt=\"Comando slash Environment ID.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Comando slash Environment ID.<\/figcaption><\/figure>\n<h3>Implanta\u00e7\u00e3o do comando slash das ferramentas de site (limpar cache do site, reiniciar mecanismo PHP)<\/h3>\n<p>Duas tarefas que voc\u00ea pode implantar facilmente por meio da API sem precisar navegar at\u00e9 o MyKinsta s\u00e3o as opera\u00e7\u00f5es de <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Site-Tools\/\" target=\"_blank\" rel=\"noopener noreferrer\">ferramentas de site<\/a> Clear Site Cache (limpar cache do site) e Restart PHP Engine (reiniciar mecanismo PHP).<\/p>\n<p>Para executar qualquer opera\u00e7\u00e3o de ferramentas de site, tudo o que voc\u00ea precisa \u00e9 do ID do ambiente. Esse ID \u00e9 usado para fazer uma solicita\u00e7\u00e3o POST para <code>\/sites\/tools\/clear-cache<\/code> e <code>\/sites\/tools\/restart-php<\/code>, respectivamente. Como voc\u00ea fez anteriormente, execute a solicita\u00e7\u00e3o de API de forma independente e retorne a resposta:<\/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>Em seguida, voc\u00ea criar\u00e1 ouvintes de comando para ambas as opera\u00e7\u00f5es no Slack. Esses ouvintes ser\u00e3o configurados para serem acionados sempre que o respectivo comando for usado:<\/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>No c\u00f3digo acima, os dados recuperados das solicita\u00e7\u00f5es de API s\u00e3o usados para construir a resposta enviada de volta ao Slack. A resposta inclui informa\u00e7\u00f5es sobre a opera\u00e7\u00e3o, como a mensagem e o ID da opera\u00e7\u00e3o.<\/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=\"Reinicie o mecanismo PHP com o comando slash.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Reinicie o mecanismo PHP com o comando slash.<\/figcaption><\/figure>\n<p>Ao implantar esses comandos slash e seus ouvintes correspondentes, voc\u00ea capacitar\u00e1 seu Slackbot a interagir perfeitamente com a API da Kinsta, tornando mais f\u00e1cil do que nunca gerenciar o cache do seu site e o mecanismo PHP diretamente do Slack.<\/p>\n<h3>Implanta\u00e7\u00e3o de um comando slash de status de opera\u00e7\u00e3o<\/h3>\n<p>Tamb\u00e9m seria \u00fatil se voc\u00ea pudesse obter o status das suas opera\u00e7\u00f5es no Slack. Voc\u00ea usar\u00e1 o ponto de extremidade <code>\/operations<\/code> com o <code>operation_id<\/code> para fazer isso. Como antes, crie uma fun\u00e7\u00e3o para lidar com essa solicita\u00e7\u00e3o e retornar a resposta da solicita\u00e7\u00e3o:<\/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>Vamos definir o ouvinte de comando para acionar a solicita\u00e7\u00e3o e passar o <code>operation ID<\/code> enviado pelo 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>Agora, quando voc\u00ea usar o comando slash <code>\/operation_status<\/code> com qualquer <code>operation ID<\/code> v\u00e1lido, obter\u00e1 o status do ID retornado pelo 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=\"Verifique o status da opera\u00e7\u00e3o com o Slackbot.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Verifique o status da opera\u00e7\u00e3o com o Slackbot.<\/figcaption><\/figure>\n<p>Al\u00e9m dos comandos que voc\u00ea j\u00e1 implantar com a API da Kinsta, h\u00e1 outros comandos que podem ser integrados, bem como eventos adicionais que podem ser tratados pelo Slackbot. Por exemplo, o Slackbot pode responder quando ele \u00e9 mencionado ou marcado usando-se o s\u00edmbolo <code>@<\/code>.<\/p>\n<p>Para ativar essa funcionalidade, voc\u00ea precisa se inscrever nos eventos necess\u00e1rios no Slack. Em vez de usar o m\u00e9todo <code>app.command()<\/code>, voc\u00ea utilizar\u00e1 o m\u00e9todo <code>app.message()<\/code>, que recebe os par\u00e2metros <code>command<\/code> e <code>say<\/code>.<\/p>\n<p>Aqui est\u00e1 um exemplo de como voc\u00ea pode fazer isso:<\/p>\n<pre><code class=\"language-js\">app.message(\"hey\", async ({ command, say }) =&gt; {\n  say(\"Woah! It works!\");\n});<\/code><\/pre>\n<p>Depois de criar o Slackbot, talvez voc\u00ea perceba que n\u00e3o consegue enviar mensagens para ele. Ao navegar at\u00e9 o bot na aba Slack Apps, pode encontrar uma mensagem informando: \u201cSending messages to this app has been turned off.\u201d (&#8216;O envio de mensagens para este aplicativo foi desativado.&#8217;). Mas n\u00e3o se preocupe, pois podemos corrigir isso facilmente!<\/p>\n<p>Para ativar o envio de mensagens, siga estas etapas:<\/p>\n<ol start=\"1\">\n<li>Clique na op\u00e7\u00e3o de menu <strong>App Home<\/strong> localizada na barra lateral esquerda.<\/li>\n<li>Essa p\u00e1gina permite que voc\u00ea gerencie todas as configura\u00e7\u00f5es do seu bot. Role para baixo at\u00e9 encontrar a caixa de sele\u00e7\u00e3o &#8220;Allow users to send Slash Commands and messages from the messages tab&#8221; (&#8216;Permitir que os usu\u00e1rios enviem comandos slash e mensagens da guia de mensagens&#8217;).<\/li>\n<li>Marque a caixa para ativar essa funcionalidade.<\/li>\n<\/ol>\n<p>Depois que voc\u00ea tiver feito essas altera\u00e7\u00f5es, \u00e9 essencial recarregar o aplicativo Slack para refletir as atualiza\u00e7\u00f5es. Se estiver usando um Mac, voc\u00ea pode recarregar o Slack pressionando <strong>CMD + R<\/strong>. Outros usu\u00e1rios de PCs fazem isso pressionando <strong>CTRL + R<\/strong>.<\/p>\n<p>Agora voc\u00ea est\u00e1 pronto para enviar mensagens ao seu bot! No aplicativo Slack, voc\u00ea deve ver o aplicativo Kinsta Bot listado logo abaixo da se\u00e7\u00e3o <strong>Your Apps <\/strong>(Seus Aplicativos). Clique nele para come\u00e7ar a enviar mensagens. Sinta-se \u00e0 vontade para testar qualquer um dos comandos slash que voc\u00ea configurou, e eles devem funcionar perfeitamente. Aproveite a intera\u00e7\u00e3o perfeita com seu Slackbot!<\/p>\n<p>O c\u00f3digo-fonte completo deste projeto est\u00e1 dispon\u00edvel no <a href=\"https:\/\/github.com\/kinsta\/SlackBot-Kinsta-API\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>.<\/p>\n<h2>Implantando seu aplicativo Node.js na Kinsta<\/h2>\n<p>Quando voc\u00ea constr\u00f3i seu servidor Node.js, \u00e9 importante <a href=\"https:\/\/sevalla.com\/application-hosting\/\">implant\u00e1-lo<\/a> para que seu Slackbot esteja sempre dispon\u00edvel, mesmo que voc\u00ea interrompa seu desenvolvimento local. Voc\u00ea pode implantar na plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos<\/a> da Kinsta se seu c\u00f3digo estiver hospedado nos provedores Git <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/kinsta.com\/pt\/docs\/autorizando-kinsta-no-github\/\">GitHub<\/a> ou <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>.<\/p>\n<p>Para implantar seu reposit\u00f3rio na Kinsta, siga estas etapas:<\/p>\n<ol start=\"1\">\n<li>Fa\u00e7a login em sua conta Kinsta no painel MyKinsta.<\/li>\n<li>Clique em <strong>Adicionar servi\u00e7o<\/strong>.<\/li>\n<li>Selecione <strong>Aplicativo<\/strong> no menu suspenso.<\/li>\n<li>No modal que aparece, escolha o reposit\u00f3rio que voc\u00ea deseja implantar. Se voc\u00ea tiver v\u00e1rias branches, poder\u00e1 selecionar a branch desejada e dar um nome ao seu aplicativo.<\/li>\n<li>Selecione um dos locais de centros de dados dispon\u00edveis. A Kinsta detectar\u00e1 e instalar\u00e1 as depend\u00eancias do seu aplicativo a partir do arquivo package.json. Em seguida, proceder\u00e1 com a cria\u00e7\u00e3o e implanta\u00e7\u00e3o do aplicativo.<\/li>\n<\/ol>\n<p>Por fim, n\u00e3o \u00e9 seguro enviar chaves API para hosts p\u00fablicos, como seu provedor Git. Ao hospedar na Kinsta, voc\u00ea pode adicion\u00e1-las como <a href=\"https:\/\/kinsta.com\/pt\/docs\/variaveis-de-ambiente\/\">vari\u00e1veis de ambiente<\/a> usando o mesmo nome e valor de vari\u00e1vel especificados no seu arquivo <strong>.env<\/strong> de desenvolvimento.<\/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=\"Defina as vari\u00e1veis de ambiente no DevKinsta quando estiver implantado.\" width=\"1600\" height=\"225\"><figcaption class=\"wp-caption-text\">Defina as vari\u00e1veis de ambiente no DevKinsta quando estiver implantado.<\/figcaption><\/figure>\n<p>Quando voc\u00ea iniciar a implanta\u00e7\u00e3o do seu aplicativo, o processo come\u00e7ar\u00e1, e normalmente ser\u00e1 conclu\u00eddo em alguns minutos. Se algum problema com as configura\u00e7\u00f5es do Node.js afetar a implanta\u00e7\u00e3o, voc\u00ea poder\u00e1 adicionar um buildpack do Node.js na aba de configura\u00e7\u00f5es de implanta\u00e7\u00e3o.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Voc\u00ea pode ativar a implanta\u00e7\u00e3o autom\u00e1tica, para que a Kinsta reimplante seu aplicativo sempre que voc\u00ea alterar sua base de c\u00f3digo e envi\u00e1-la para o GitHub.<\/p>\n<\/aside>\n\n<h2>Resumo<\/h2>\n<p>Neste artigo, voc\u00ea aprendeu a criar um aplicativo Node.js que conecta o Slack \u00e0 API da Kinsta, e a implantar esse aplicativo na Kinsta.<\/p>\n<p>Slackbots e a API da Kinsta facilitam monitorar e gerenciar seus servi\u00e7os hospedados na Kinsta. Com base nos princ\u00edpios b\u00e1sicos deste tutorial, imagine o que voc\u00ea pode fazer com um Slackbot e a API. Considere comandos mais complexos que realizam opera\u00e7\u00f5es como <a href=\"https:\/\/kinsta.com\/pt\/blog\/clonar-facilmente-o-seu-site-wordpress\/\">clonagem de sites<\/a> WordPress e <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-api\/\">cria\u00e7\u00e3o de sites<\/a> diretamente do Slack.<\/p>\n<p><em>Como voc\u00ea est\u00e1 usando a API da Kinsta? Quais recursos voc\u00ea gostaria de ver adicionados\/expostos em seguida?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Slack \u00e9 uma poderosa plataforma de mensagens que permite que as equipes colaborem de forma eficiente. E se essa colabora\u00e7\u00e3o tamb\u00e9m envolve cuidar de v\u00e1rios &#8230;<\/p>\n","protected":false},"author":287,"featured_media":62028,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[951,992],"class_list":["post-62027","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>Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.\" \/>\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\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites\" \/>\n<meta property=\"og:description\" content=\"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-05T13:50:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-06T11:23:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\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\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites\",\"datePublished\":\"2023-12-05T13:50:23+00:00\",\"dateModified\":\"2023-12-06T11:23:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\"},\"wordCount\":3945,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\",\"name\":\"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"datePublished\":\"2023-12-05T13:50:23+00:00\",\"dateModified\":\"2023-12-06T11:23:36+00:00\",\"description\":\"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites - Kinsta\u00ae","description":"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.","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\/pt\/blog\/criar-slackbot-gerenciamento-sites\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites","og_description":"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.","og_url":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-12-05T13:50:23+00:00","article_modified_time":"2023-12-06T11:23:36+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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":"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"21 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites","datePublished":"2023-12-05T13:50:23+00:00","dateModified":"2023-12-06T11:23:36+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/"},"wordCount":3945,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/","url":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/","name":"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","datePublished":"2023-12-05T13:50:23+00:00","dateModified":"2023-12-06T11:23:36+00:00","description":"Aprenda a criar um Slackbot poderoso com Node.js e a API da Kinsta para agilizar o gerenciamento de sites com comandos slash do Slack.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/how-to-build-a-slackbot-with-node.js-and-kinsta-api-for-site-management-1.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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\/pt\/blog\/criar-slackbot-gerenciamento-sites\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/pt\/topicos\/api\/"},{"@type":"ListItem","position":3,"name":"Como Criar um Slackbot com Node.js e a API da Kinsta para Gerenciamento de Sites"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/62027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=62027"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/62027\/revisions"}],"predecessor-version":[{"id":65644,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/62027\/revisions\/65644"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62027\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/62028"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=62027"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=62027"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=62027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}