{"id":6998,"date":"2019-06-03T22:11:14","date_gmt":"2019-06-04T05:11:14","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6998"},"modified":"2025-06-13T21:23:08","modified_gmt":"2025-06-14T04:23:08","slug":"build-chatbot-couchbase-amazon-lex-node-js","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/build-chatbot-couchbase-amazon-lex-node-js\/","title":{"rendered":"Creaci\u00f3n de un chatbot con Couchbase, Amazon Lex y Node.js"},"content":{"rendered":"<p><em><a href=\"https:\/\/www.thepolyglotdeveloper.com\/\">Nic Raboy<\/a>&nbsp;es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova.&nbsp;<a href=\"https:\/\/twitter.com\/nraboy\">Nic<\/a>&nbsp;escribe sobre sus experiencias de desarrollo relacionadas con facilitar la comprensi\u00f3n del desarrollo web y m\u00f3vil.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-6316\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/01\/nraboy-here-300x300.jpg\" alt=\"Nic Raboy\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here-300x300.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here-150x150.jpg 150w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here-768x768.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here-65x65.jpg 65w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here-50x50.jpg 50w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here-20x20.jpg 20w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>No cabe duda de que el futuro va a ser automatizado. Tenemos veh\u00edculos autoconducidos automatizados, asistentes de voz, bots de centros de llamadas y de texto, y mucho m\u00e1s. Sin embargo, \u00bfqu\u00e9 hace falta para llevar la automatizaci\u00f3n a tu empresa?<\/p>\n<p>La respuesta breve es que no hace falta mucho m\u00e1s que crear aplicaciones est\u00e1ndar si se utilizan las herramientas adecuadas.<\/p>\n<p>En este tutorial vamos a explorar la creaci\u00f3n de un chatbot que puede tomar parte de la carga de trabajo de sus empleados humanos mediante el aprovechamiento de <a href=\"https:\/\/aws.amazon.com\/lex\/\">Amazon Lex<\/a> para el aprendizaje profundo y las interfaces conversacionales, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\">Couchbase<\/a> NoSQL como base de datos, y <a href=\"https:\/\/docs.couchbase.com\/nodejs-sdk\/current\/start-using-sdk.html\">Node.js<\/a> para interactuar con la base de datos.<\/p>\n<h2 id=\"the-requirements-for-this-tutorial\">Requisitos para este tutorial<\/h2>\n<p>Hay algunos requisitos de software que deben cumplirse para tener \u00e9xito con este tutorial y proyecto:<\/p>\n<ol type=\"1\">\n<li>Couchbase Server 5.0+ debe estar instalado y disponible remotamente.<\/li>\n<li>Una cuenta AWS.<\/li>\n<li>Docker o un software de m\u00e1quina virtual.<\/li>\n<\/ol>\n<p>Dado que utilizaremos productos de Amazon como Lex y Lambda, es necesario disponer de una cuenta de AWS. Ambos productos son de pago, por lo que un nivel gratuito ser\u00e1 m\u00e1s que suficiente. Como usaremos productos de Amazon, estos productos necesitan acceso a Couchbase. Por esta raz\u00f3n, Couchbase no puede ejecutarse desde localhost, debe instalarse en alg\u00fan lugar remoto. Por \u00faltimo, dado que el SDK de Couchbase Node.js utiliza dependencias nativas, Docker o alg\u00fan otro software de m\u00e1quina virtual debe estar disponible para descargar las dependencias como Linux, que es lo que espera Lambda.<\/p>\n<h2 id=\"configuring-amazon-lex-for-user-interaction\">Configuraci\u00f3n de Amazon Lex para la interacci\u00f3n con el usuario<\/h2>\n<p>Antes de entrar en el c\u00f3digo, podemos dedicar nuestro tiempo a configurar Lex. Aunque Lambda nos permitir\u00e1 hacer nuestro bot \u00fatil, no necesitas ning\u00fan tipo de backend para jugar con Lex.<\/p>\n<p>Ir a <a href=\"https:\/\/console.aws.amazon.com\/lex\">Lex<\/a> en tu portal de AWS y elige crear un nuevo bot personalizado.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7005\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/aws-lex-custom-bot-300x147.jpeg\" alt=\"aws-lex-custom-bot\" width=\"435\" height=\"213\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-bot-300x147.jpeg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-bot-1024x503.jpeg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-bot-768x377.jpeg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-bot-20x10.jpeg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-bot-1320x649.jpeg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-bot.jpeg 1500w\" sizes=\"auto, (max-width: 435px) 100vw, 435px\" \/><\/p>\n<p>Como estamos creando un bot basado en texto, la voz de salida deber\u00eda ser ninguna. Todo lo dem\u00e1s deben ser los valores predeterminados o lo que considere m\u00e1s apropiado.<\/p>\n<p>Con el bot personalizado creado, el primer paso es empezar a crear intents. Para este ejemplo vamos a crear un <code>Acerca deIntent<\/code>, <code>GetProfileIntent<\/code> y <code>UpgradeServiceIntent<\/code>dos de los cuales utilizar\u00e1n Couchbase para obtener informaci\u00f3n.<\/p>\n<p>Empecemos por el <code>Acerca deIntent<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7006\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/aws-lex-aboutintent-300x147.jpg\" alt=\"aws-lex-aboutintent\" width=\"398\" height=\"195\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-aboutintent-300x147.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-aboutintent-1024x501.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-aboutintent-768x376.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-aboutintent-20x10.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-aboutintent-1320x646.jpg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-aboutintent.jpg 1500w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/p>\n<p>La idea que subyace a la <code>Acerca deIntent<\/code> es s\u00f3lo para empezar. No usaremos la base de datos para esta intent, pero eventualmente se conectar\u00e1 a nuestra funci\u00f3n Lambda. Esta intent es para darnos informaci\u00f3n sobre el bot.<\/p>\n<p>Para activar nuestra intenci\u00f3n, necesitamos definir algunos enunciados de ejemplo que son b\u00e1sicamente una lista de frases posibles. Tomemos como ejemplo las siguientes:<\/p>\n<pre><code>who made this chatbot\r\nwhat can you tell me about yourself\r\ngive me information about this bot<\/code><\/pre>\n<p>Las frases anteriores son las que podr\u00eda preguntar un usuario. Cuantas m\u00e1s, mejor, porque Lex aprender\u00e1 de los datos de entrenamiento y podr\u00e1 rellenar los huecos si alguien pregunta algo que no est\u00e1 en la lista.<\/p>\n<p>Por ahora dejaremos <strong>Cumplimiento<\/strong> como <strong>Devolver los par\u00e1metros al cliente<\/strong>pero eventualmente lo cambiaremos a Lambda.<\/p>\n<p>Echemos un vistazo a <code>GetProfileIntent<\/code> ahora.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7007\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/aws-lex-getprofileintent-300x147.jpeg\" alt=\"aws-lex-getprofileintent\" width=\"484\" height=\"237\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-getprofileintent-300x147.jpeg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-getprofileintent-1024x503.jpeg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-getprofileintent-768x377.jpeg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-getprofileintent-20x10.jpeg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-getprofileintent-1320x649.jpeg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-getprofileintent.jpeg 1500w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/p>\n<p>Esta intenci\u00f3n es un poco diferente porque queremos ser capaces de aceptar informaci\u00f3n din\u00e1mica del usuario, algo que cambiar\u00e1 entre diferentes usuarios. Podemos permitir informaci\u00f3n din\u00e1mica a trav\u00e9s de variables de ranura.<\/p>\n<p>Tome como ejemplo los siguientes enunciados que contienen variables de ranura:<\/p>\n<pre><code>i need some information about my account\r\nget me some information about my account {AccountId}<\/code><\/pre>\n<p>No es necesario que todas las expresiones de ejemplo contengan variables de ranura, pero observe que la variable va entre llaves. Cada variable utilizada puede definirse en la configuraci\u00f3n de la intenci\u00f3n. Por ejemplo, nuestra <code>AccountId<\/code> se define como <code>AMAZON.Direcci\u00f3nEmail<\/code> con una frase de aviso por defecto.<\/p>\n<p>\u00bfQu\u00e9 significa esto?<\/p>\n<p>Cuando Lex determina que nuestra variable de ranura existe, debe ser una direcci\u00f3n de correo electr\u00f3nico v\u00e1lida. Si Lex determina que estamos tratando de ejecutar el comando <code>GetProfileInfo<\/code> pero la variable no existe, utilizar\u00e1 nuestra frase de aviso para pedir al usuario la informaci\u00f3n de esa variable. Esto hace que la conversaci\u00f3n sea fluida, pero sin omitir ning\u00fan dato necesario.<\/p>\n<p>Por \u00faltimo, veamos <code>UpgradeServiceIntent<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7008\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/aws-lex-upgradeserviceintent-300x147.jpeg\" alt=\"aws-lex-upgradeserviceintent\" width=\"502\" height=\"246\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-upgradeserviceintent-300x147.jpeg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-upgradeserviceintent-1024x502.jpeg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-upgradeserviceintent-768x376.jpeg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-upgradeserviceintent-20x10.jpeg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-upgradeserviceintent-1320x647.jpeg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-upgradeserviceintent.jpeg 1500w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/p>\n<p>En <code>UpgradeServiceIntent<\/code> es similar a nuestro <code>GetProfileIntent<\/code>pero esta vez tenemos dos posibles variables de ranura. Tomemos los siguientes ejemplos de enunciados:<\/p>\n<pre><code>i'd like {Service} and my account information is {AccountId}\r\ni'd like to upgrade my service to {Service}<\/code><\/pre>\n<p>Recuerda que dos enunciados de muestra no son suficientes, pero espero que te hagas una idea de c\u00f3mo se pueden utilizar las variables. La idea es que quieres que la conversaci\u00f3n con este chatbot sea fluida, como con una persona real, porque entonces puedes sustituir a la persona real por el bot.<\/p>\n<p>Sin embargo, hay una excepci\u00f3n con el <code>UpgradeServiceIntent<\/code> variables de ranura. La direcci\u00f3n <code>Servicio<\/code> es una ranura personalizada que debemos crear.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-7009\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/aws-lex-custom-slot-300x147.jpg\" alt=\"aws-lex-custom-slot\" width=\"480\" height=\"235\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-slot-300x147.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-slot-1024x502.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-slot-768x377.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-slot-20x10.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-slot-1320x648.jpg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/aws-lex-custom-slot.jpg 1500w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/p>\n<p>En nuestro ejemplo queremos crear un <code>CustomServiceSlot<\/code> donde el nombre no es importante, pero los datos s\u00ed. Queremos definir las cosas posibles que pueden existir dentro de la variable. En nuestro ejemplo estamos diciendo que la ranura puede ser cualquiera de los siguientes:<\/p>\n<ul>\n<li>Plata<\/li>\n<li>Oro<\/li>\n<li>Lo \u00faltimo en<\/li>\n<\/ul>\n<p>Suponemos que los tres puntos anteriores son posibles servicios. Esto es solo un ejemplo y sus necesidades pueden variar.<\/p>\n<p>En este momento puedes guardar cada uno de los tres intentos y construir tu bot.<\/p>\n<h2 id=\"developing-aws-lambda-logic-with-simple-javascript-and-couchbase\">Desarrollo de la l\u00f3gica de AWS Lambda con JavaScript simple y Couchbase<\/h2>\n<p>Ya tenemos nuestros intentos, nuestras expresiones de ejemplo y nuestras variables de ranura. Es hora de crear la l\u00f3gica para responder a nuestro usuario cuando los intentos se activan.<\/p>\n<p>Ya deber\u00edas tener Couchbase instalado, configurado y listo para funcionar. El objetivo de este tutorial no es c\u00f3mo configurar Couchbase, sino c\u00f3mo usarlo con Lex.<\/p>\n<p>Dentro de Couchbase, a\u00f1ade el siguiente documento a tu Bucket:<\/p>\n<pre><code>{\r\n    \"email\": \"test@test.com\",\r\n    \"service\": \"Silver\"\r\n}<\/code><\/pre>\n<p>Vamos a suponer que el documento anterior es un cliente y que actualmente tiene el plan \"Plata\", signifique lo que signifique. En teor\u00eda, este ejemplo podr\u00eda ser \u00fatil para cualquier organizaci\u00f3n que tenga una l\u00ednea telef\u00f3nica o de chat. Por ejemplo, piensa en Comcast para Internet. Si creas un bot, tus usuarios podr\u00edan llamar o chatear y solicitar cambios en su cuenta. El bot podr\u00eda interpretar esto y hacer los cambios sin que una persona los hiciera.<\/p>\n<p>En tu ordenador, crea un nuevo directorio y ejecuta lo siguiente:<\/p>\n<pre><code>npm init -y\r\nnpm install git+https:\/\/github.com\/couchbase\/couchnode.git#v2.5.1 --save\r\ntouch index.js<\/code><\/pre>\n<p>Los comandos anteriores crear\u00e1n un nuevo <strong>paquete.json<\/strong> e instale el <a href=\"https:\/\/docs.couchbase.com\/server\/current\/sdk\/overview.html\">SDK de Couchbase<\/a>. Estamos utilizando la URL de GitHub por razones de que tiene dependencias nativas que necesitan ser construidos a partir de la fuente. Si usted no tiene el <code>toque<\/code> crear un <strong>index.js<\/strong> manualmente.<\/p>\n<p>Dentro del <strong>index.js<\/strong> a\u00f1ada el siguiente c\u00f3digo:<\/p>\n<pre><code>const Couchbase = require(\"couchbase\");\r\n\r\nvar cluster, bucket;\r\n\r\nconst dispatcher = async (event) =&gt; {\r\n    let response = {\r\n        \"dialogAction\": {\r\n            \"type\": \"Close\",\r\n            \"fulfillmentState\": \"\",\r\n            \"message\": {\r\n                \"contentType\": \"PlainText\",\r\n                \"content\": \"\"\r\n            }\r\n        }\r\n    };\r\n    let cbResult;\r\n    switch(event.currentIntent.name) {\r\n        default:\r\n            response.dialogAction.fulfillmentState = \"Failed\";\r\n            response.dialogAction.message.content = \"The request could not be understood.\";\r\n            break;\r\n    }\r\n    return response;\r\n}\r\n\r\nconst handler = (event) =&gt; {\r\n    if(cluster == null || bucket == null) {\r\n        cluster = new Couchbase.Cluster(\"couchbase:\/\/COUCHBASE_HOST_HERE\");\r\n        cluster.authenticate(\"COUCHBASE_USERNAME\", \"COUCHBASE_PASSWORD\");\r\n        bucket = cluster.openBucket(\"COUCHBASE_BUCKET\");\r\n        console.log(bucket);\r\n    }\r\n    return dispatcher(event);\r\n};\r\n\r\nexports.handler = handler;<\/code><\/pre>\n<p>Hay algunas cosas a tener en cuenta en el c\u00f3digo anterior. S\u00f3lo he a\u00f1adido informaci\u00f3n para el host, nombre de usuario, contrase\u00f1a y Bucket. Tendr\u00e1s que sustituirla por la de tu instalaci\u00f3n real de Couchbase.<\/p>\n<p>Lo que est\u00e1 sucediendo arriba es que estamos creando una funci\u00f3n Lambda con una funci\u00f3n dispatcher. Cuando Lex recibe un mensaje de chat, crea un objeto request para enviarlo a Lambda. En nuestro escenario, Lambda toma el objeto request y lo introduce en un dispatcher despu\u00e9s de establecer una conexi\u00f3n con la base de datos. Dentro del despachador, se crea un objeto de respuesta y se analiza la intenci\u00f3n.<\/p>\n<p>A partir de ahora todos los intentos son malos ya que s\u00f3lo golpear\u00e1n la condici\u00f3n por defecto. Vamos a cambiar eso.<\/p>\n<p>Empecemos por preocuparnos <code>Acerca deIntent<\/code> ya que es la m\u00e1s sencilla:<\/p>\n<pre><code>switch(event.currentIntent.name) {\r\n    case \"AboutIntent\":\r\n        response.dialogAction.fulfillmentState = \"Fulfilled\";\r\n        response.dialogAction.message.content = \"Created by Nic Raboy, The Polyglot Developer\";\r\n        break;\r\n    default:\r\n        response.dialogAction.fulfillmentState = \"Failed\";\r\n        response.dialogAction.message.content = \"The request could not be understood.\";\r\n        break;\r\n}<\/code><\/pre>\n<p>Si Lex determina que el usuario est\u00e1 pidiendo informaci\u00f3n y elige la opci\u00f3n <code>Acerca deIntent<\/code> vamos a responder con un mensaje b\u00e1sico, pero apropiado. De lo contrario, vamos a seguir fallando la solicitud.<\/p>\n<p>Veamos ahora una intenci\u00f3n m\u00e1s complicada, por ejemplo, la intenci\u00f3n <code>GetProfileIntent<\/code>:<\/p>\n<pre><code>case \"GetProfileIntent\":\r\n    cbResult = await new Promise((resolve, reject) =&gt; {\r\n        let statement = \"SELECT * FROM lexbot WHERE email = $email\";\r\n        let query = Couchbase.N1qlQuery.fromString(statement);\r\n        bucket.query(query, { email: event.currentIntent.slots.AccountId }, (error, result) =&gt; {\r\n            if(error) {\r\n                return reject({ status: \"Failed\", message: error.message });\r\n            }\r\n            resolve({ status: \"Fulfilled\", message: JSON.stringify(result) });\r\n        });\r\n    });\r\n    response.dialogAction.fulfillmentState = cbResult.status;\r\n    response.dialogAction.message.content = cbResult.message;\r\n    break;<\/code><\/pre>\n<p>La idea detr\u00e1s de esta intenci\u00f3n es cuando el usuario pide informaci\u00f3n sobre su perfil, el documento debe ser devuelto. Lo que estamos haciendo es crear un <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/n1ql\/\">Consulta N1QL<\/a> con el <code>correo electr\u00f3nico<\/code> como condici\u00f3n. Recuerde la Lex <code>AccountId<\/code> es s\u00f3lo un correo electr\u00f3nico para nuestro ejemplo. Los resultados de esa consulta se serializan y se devuelven a Lex para mostr\u00e1rselos al usuario.<\/p>\n<p>Ahora vamos a complicar las cosas un poco m\u00e1s. Veamos nuestro <code>UpgradeServiceIntent<\/code>:<\/p>\n<pre><code>case \"UpgradeServiceIntent\":\r\n    cbResult = await new Promise((resolve, reject) =&gt; {\r\n        let statement = `\r\n            UPDATE lexbot\r\n            SET service = $service\r\n            WHERE email = $email\r\n        `;\r\n        let query = Couchbase.N1qlQuery.fromString(statement);\r\n        bucket.query(\r\n            query, \r\n            { \r\n                service: event.currentIntent.slots.Service,\r\n                email: event.currentIntent.slots.AccountId\r\n            },\r\n            (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject({\r\n                        status: \"Failed\",\r\n                        message: error.message\r\n                    });\r\n                }\r\n                resolve({\r\n                    status: \"Fulfilled\",\r\n                    message: \"Service has been upgraded to \" + event.currentIntent.slots.Service + \" for \" + event.currentIntent.slots.AccountId\r\n                });\r\n            }\r\n        );\r\n    });\r\n    response.dialogAction.fulfillmentState = cbResult.status;\r\n    response.dialogAction.message.content = cbResult.message;\r\n    break;<\/code><\/pre>\n<p>Vamos a hacer otra consulta N1QL, pero esta vez una consulta <code>ACTUALIZACI\u00d3N<\/code> funcionamiento. La idea es que el usuario quiera actualizar su servicio. Proporcionan la informaci\u00f3n de su cuenta y el servicio que desean, y nuestra l\u00f3gica Lambda se encarga de ello sin intervenci\u00f3n humana.<\/p>\n<p>No estamos haciendo ning\u00fan saneamiento de datos, pero podr\u00edamos.<\/p>\n<p>En este punto nuestra funci\u00f3n Lambda est\u00e1 hecha. Podemos responder a tres consultas diferentes a trav\u00e9s de un chat humano fluido con Lex. Ahora he mencionado que el SDK de Couchbase usa dependencias nativas. Como el foco de este tutorial no es Lambda, voy a referirte a un tutorial previo que escrib\u00ed titulado, <a href=\"https:\/\/www.thepolyglotdeveloper.com\/2017\/12\/deploying-native-nodejs-dependencies-aws-lambda\/\">Implementaci\u00f3n de dependencias de Node.js nativo en AWS Lambda<\/a>.<\/p>\n<p>Despu\u00e9s de cargar el paquete Lambda, debe volver al panel de Lex y, para cada intento, elegir <strong>Funci\u00f3n AWS Lambda<\/strong> como el <strong>Cumplimiento<\/strong> opci\u00f3n. Una vez hecho esto, reconstruye y tu chatbot deber\u00eda obtener sus datos de tu c\u00f3digo Lambda, que est\u00e1 obteniendo sus datos de Couchbase.<\/p>\n<h2 id=\"conclusion\">Conclusi\u00f3n<\/h2>\n<p>Acaba de ver c\u00f3mo crear un chatbot sencillo pero potencialmente \u00fatil con Amazon Lex y <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\">Couchbase<\/a>. Los chatbots son muy \u00fatiles y probablemente sean el futuro a la hora de sustituir a los humanos en los centros de llamadas u otras l\u00edneas de asistencia.<\/p>\n<p>En un escenario de producci\u00f3n, probablemente querr\u00e1 validar los datos de todo lo que llegue desde Lex. Por ejemplo, comprobar si los datos existen, o incluso hacer las cosas de forma m\u00e1s segura. En este ejemplo podr\u00eda cambiar el servicio de cualquier persona con s\u00f3lo proporcionar la direcci\u00f3n de correo electr\u00f3nico. Probablemente querr\u00e1 cambiar eso en producci\u00f3n.<\/p>\n<p><em>Este art\u00edculo ha sido publicado por Couchbase <a href=\"https:\/\/www.couchbase.com\/blog\/es\/community\/community-writers-program\/\">Programa de escritura comunitaria<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Nic Raboy&nbsp;is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang, and a variety of frameworks such as Angular, NativeScript, and Apache Cordova.&nbsp;Nic&nbsp;writes about his development experiences related to making web and mobile [&hellip;]<\/p>","protected":false},"author":53,"featured_media":7030,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1822,1812],"tags":[],"ppma_author":[9026],"class_list":["post-6998","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-node-js","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building a Chatbot with Couchbase, Amazon Lex, and Node.js - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Creating a chatbot that can take some of the workload off your human employees by leveraging Amazon Lex for deep learning and conversational interfaces, Couchbase NoSQL as the database, and Node.js for interacting with the database.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/build-chatbot-couchbase-amazon-lex-node-js\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Chatbot with Couchbase, Amazon Lex, and Node.js\" \/>\n<meta property=\"og:description\" content=\"Creating a chatbot that can take some of the workload off your human employees by leveraging Amazon Lex for deep learning and conversational interfaces, Couchbase NoSQL as the database, and Node.js for interacting with the database.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/build-chatbot-couchbase-amazon-lex-node-js\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-04T05:11:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:23:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"411\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"Building a Chatbot with Couchbase, Amazon Lex, and Node.js\",\"datePublished\":\"2019-06-04T05:11:14+00:00\",\"dateModified\":\"2025-06-14T04:23:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/\"},\"wordCount\":1630,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg\",\"articleSection\":[\"Node.js\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/\",\"name\":\"Building a Chatbot with Couchbase, Amazon Lex, and Node.js - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg\",\"datePublished\":\"2019-06-04T05:11:14+00:00\",\"dateModified\":\"2025-06-14T04:23:08+00:00\",\"description\":\"Creating a chatbot that can take some of the workload off your human employees by leveraging Amazon Lex for deep learning and conversational interfaces, Couchbase NoSQL as the database, and Node.js for interacting with the database.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg\",\"width\":900,\"height\":411,\"caption\":\"AmazonxCB Blog Banner\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Chatbot with Couchbase, Amazon Lex, and Node.js\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\",\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"caption\":\"Laura Czajkowski, Developer Community Manager, Couchbase\"},\"description\":\"Laura Czajkowski is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/laura-czajkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building a Chatbot with Couchbase, Amazon Lex, and Node.js - The Couchbase Blog","description":"Creating a chatbot that can take some of the workload off your human employees by leveraging Amazon Lex for deep learning and conversational interfaces, Couchbase NoSQL as the database, and Node.js for interacting with the database.","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:\/\/www.couchbase.com\/blog\/es\/build-chatbot-couchbase-amazon-lex-node-js\/","og_locale":"es_MX","og_type":"article","og_title":"Building a Chatbot with Couchbase, Amazon Lex, and Node.js","og_description":"Creating a chatbot that can take some of the workload off your human employees by leveraging Amazon Lex for deep learning and conversational interfaces, Couchbase NoSQL as the database, and Node.js for interacting with the database.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/build-chatbot-couchbase-amazon-lex-node-js\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-06-04T05:11:14+00:00","article_modified_time":"2025-06-14T04:23:08+00:00","og_image":[{"width":900,"height":411,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg","type":"image\/jpeg"}],"author":"Laura Czajkowski, Developer Community Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Laura Czajkowski, Developer Community Manager, Couchbase","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"Building a Chatbot with Couchbase, Amazon Lex, and Node.js","datePublished":"2019-06-04T05:11:14+00:00","dateModified":"2025-06-14T04:23:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/"},"wordCount":1630,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg","articleSection":["Node.js","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/","url":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/","name":"Building a Chatbot with Couchbase, Amazon Lex, and Node.js - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg","datePublished":"2019-06-04T05:11:14+00:00","dateModified":"2025-06-14T04:23:08+00:00","description":"Creating a chatbot that can take some of the workload off your human employees by leveraging Amazon Lex for deep learning and conversational interfaces, Couchbase NoSQL as the database, and Node.js for interacting with the database.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/AmazonxCB-Blog-Banner.jpg","width":900,"height":411,"caption":"AmazonxCB Blog Banner"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/build-chatbot-couchbase-amazon-lex-node-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a Chatbot with Couchbase, Amazon Lex, and Node.js"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220","name":"Laura Czajkowski, Directora de la Comunidad de Desarrolladores, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409","url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","caption":"Laura Czajkowski, Developer Community Manager, Couchbase"},"description":"Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro bolet\u00edn mensual para desarrolladores.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/laura-czajkowski\/"}]}},"authors":[{"term_id":9026,"user_id":53,"is_guest":0,"slug":"laura-czajkowski","display_name":"Laura Czajkowski, Developer Community Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","first_name":"Laura","last_name":"Czajkowski","user_url":"","author_category":"","description":"Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro bolet\u00edn mensual para desarrolladores."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=6998"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6998\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/7030"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=6998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=6998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=6998"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=6998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}