{"id":6329,"date":"2019-01-29T08:29:06","date_gmt":"2019-01-29T16:29:06","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6329"},"modified":"2025-06-13T21:09:39","modified_gmt":"2025-06-14T04:09:39","slug":"developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/","title":{"rendered":"Desarrollo de una Alexa Skill con Golang, AWS Lambda y Couchbase NoSQL"},"content":{"rendered":"<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><em><a href=\"https:\/\/www.thepolyglotdeveloper.com\/\">Nic Raboy<\/a>\u00a0es 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.\u00a0<a href=\"https:\/\/twitter.com\/nraboy\">Nic<\/a>\u00a0escribe sobre sus experiencias de desarrollo relacionadas con facilitar la comprensi\u00f3n del desarrollo web y m\u00f3vil.<\/em><\/p>\n<p><span style=\"font-weight: 400;\">Hace poco escrib\u00ed un tutorial sobre <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/developing-aws-lambda-functions-with-golang-and-couchbase-nosql\/\"><span style=\"font-weight: 400;\">crear un AWS Lambda<\/span><\/a><span style=\"font-weight: 400;\"> que se comunicaba con el <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/\"><span style=\"font-weight: 400;\">Couchbase<\/span><\/a><span style=\"font-weight: 400;\"> NoSQL utilizando el lenguaje de programaci\u00f3n Go. Este tutorial anterior se basaba en un desarrollo sin servidor est\u00e1ndar, pero \u00bfy si quisi\u00e9ramos llevar las cosas al siguiente nivel? Por ejemplo, los dispositivos impulsados por Amazon Alexa, en la mayor\u00eda de las circunstancias, aprovechan AWS Lambda para funcionar. Entonces, \u00bfqu\u00e9 har\u00eda falta para que nuestra funci\u00f3n fuera compatible con Alexa?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">En este tutorial vamos a ver c\u00f3mo trabajar con las peticiones de Amazon Alexa y responder adecuadamente para que Alexa retransmita un mensaje de audio al usuario. Los datos con los que respondamos vendr\u00e1n de nuestra base de datos y ser\u00e1n gestionados con el lenguaje de programaci\u00f3n Go.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span style=\"font-weight: 400;\">Creaci\u00f3n de una funci\u00f3n lambda compatible con Amazon Alexa<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Si no ha visto mi <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developing-aws-lambda-functions-with-golang-and-couchbase-nosql\/\">tutorial anterior<\/a>te sugiero que le eches un vistazo antes de seguir leyendo.  El tutorial anterior es corto y proporcionar\u00e1 alguna perspectiva en el desarrollo de funciones Lambda con Go y Couchbase.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A continuaci\u00f3n, cree un proyecto dentro de su **$GOPATH** con un archivo **main.go** en \u00e9l. Desde la l\u00ednea de comandos, ejecute lo siguiente para descargar nuestras dependencias:<\/span><\/p>\n<pre class=\"lang:default decode:true\">go get github.com\/arienmalec\/alexa-go\r\n\r\ngo get github.com\/aws\/aws-lambda-go\/lambda\r\n\r\ngo get github.com\/satori\/go.uuid\r\n\r\ngo get gopkg.in\/couchbase\/gocb.v1<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">De nuestras dependencias, estamos descargando el SDK de AWS Lambda para Go as\u00ed como el SDK de Couchbase para Go. Tambi\u00e9n estamos descargando un paquete UUID para generar valores \u00fanicos para representar nuestras claves de documento, que es lo que ten\u00edamos en nuestro tutorial anterior. Sin embargo, esta vez estamos descargando otro paquete que contiene modelos para cada una de nuestras peticiones y respuestas. Alexa espera que tanto las peticiones como las respuestas est\u00e9n en un determinado formato JSON, que es pr\u00e1cticamente el \u00fanico prop\u00f3sito del paquete Alexa.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">En el archivo **main.go**, a\u00f1ade el siguiente c\u00f3digo boilerplate:<\/span><\/p>\n<pre class=\"lang:default decode:true\">package main\r\n\r\n\r\n\r\nimport (\r\n\r\n\u00a0\u00a0\u00a0 \"github.com\/arienmalec\/alexa-go\"\r\n\r\n\u00a0\u00a0\u00a0 \"github.com\/aws\/aws-lambda-go\/lambda\"\r\n\r\n\u00a0\u00a0\u00a0 uuid \"github.com\/satori\/go.uuid\"\r\n\r\n\u00a0\u00a0\u00a0 gocb \"gopkg.in\/couchbase\/gocb.v1\"\r\n\r\n)\r\n\r\n\r\n\r\nvar bucket *gocb.Bucket\r\n\r\n\r\n\r\ntype Todo struct {\r\n\r\n\u00a0\u00a0\u00a0 ID \u00a0\u00a0string `json:\"id,omitempty\"`\r\n\r\n\u00a0\u00a0\u00a0 Text string `json:\"text,omitempty\"`\r\n\r\n\u00a0\u00a0\u00a0 Type string `json:\"type,omitempty\"`\r\n\r\n}\r\n\r\n\r\n\r\nfunc IntentDispatcher(request alexa.Request) (alexa.Response, error) {\r\n\r\n\u00a0\u00a0\u00a0 var response alexa.Response\r\n\r\n\u00a0\u00a0\u00a0 switch request.Body.Intent.Name {\r\n\r\n\u00a0\u00a0\u00a0 case \"GetTodosIntent\":\r\n\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 response = HandleGetTodosIntent(request)\r\n\r\n\u00a0\u00a0\u00a0 case \"CreateTodoIntent\":\r\n\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 response = HandleCreateTodoIntent(request)\r\n\r\n\u00a0\u00a0\u00a0 case \"AboutIntent\":\r\n\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 response = HandleAboutIntent(request)\r\n\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 return response, nil\r\n\r\n}\r\n\r\n\r\n\r\nfunc HandleAboutIntent(request alexa.Request) alexa.Response { }\r\n\r\nfunc HandleCreateTodoIntent(request alexa.Request) alexa.Response { }\r\n\r\nfunc HandleGetTodosIntent(request alexa.Request) alexa.Response { }\r\n\r\n\r\n\r\nfunc main() {\r\n\r\n\u00a0\u00a0\u00a0 cluster, _ := gocb.Connect(\"couchbase:\/\/HOST_HERE\")\r\n\r\n\u00a0\u00a0\u00a0 cluster.Authenticate(gocb.PasswordAuthenticator{Username: \"todos\", Password: \"123456\"})\r\n\r\n\u00a0\u00a0\u00a0 bucket, _ = cluster.OpenBucket(\"todos\", \"\")\r\n\r\n\u00a0\u00a0\u00a0 lambda.Start(IntentDispatcher)\r\n\r\n}\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">\u00bfQu\u00e9 ocurre en el c\u00f3digo anterior?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After importing the downloaded dependencies, we can create a `Todo` data structure which will hold our data. Similar to the previous example, we are going to be storing todo list information and querying that information.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the `main` function we are establishing a connection to our Couchbase instance and opening our bucket. It is important that our Couchbase instance be hosted somewhere because Lambda needs to be able to interact with it. This means you probably can&#8217;t test with Couchbase running on your local host.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When it comes to Alexa, things happen based on actions known as intents. These actions are typically a request to Alexa. For any given Skill you can typically interact with Alexa in numerous ways, hence numerous intents. Our Skill will have an `AboutIntent` for information, a `CreateTodoIntent` for saving data, and a `GetTodosIntent` for querying our data and returning it to the user. These intents will be controlled by our `IntentDispatcher` function.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The idea behind our `IntentDispatcher` is a request will come in from Alexa. Within the request, Amazon will figure out the correct intent and we can use that information. This intent information will be defined later on. Using the intent information we can call the correct function.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">So let&#8217;s look at the `AboutIntent` function:<\/span><\/p>\n<pre class=\"lang:default decode:true\">func HandleAboutIntent(request alexa.Request) alexa.Response {\r\n\r\n\u00a0\u00a0\u00a0 return alexa.NewSimpleResponse(\"About\", \"Created by Nic Raboy of The Polyglot Developer.\")\r\n\r\n}\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">Si la funci\u00f3n es llamada, podemos usar el paquete Alexa para formatear nuestra respuesta como JSON correcto y devolverla. La respuesta tendr\u00e1 un t\u00edtulo y un texto que se le dir\u00e1 al usuario.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now let&#8217;s look at the `CreateTodoIntent` function:<\/span><\/p>\n<pre class=\"lang:default decode:true\">func HandleCreateTodoIntent(request alexa.Request) alexa.Response {\r\n\r\n\u00a0\u00a0\u00a0 todo := Todo{Text: request.Body.Intent.Slots[\"todo\"].Value}\r\n\r\n\u00a0\u00a0\u00a0 bucket.Insert(uuid.Must(uuid.NewV4()).String(), todo, 0)\r\n\r\n\u00a0\u00a0\u00a0 return alexa.NewSimpleResponse(\"Todo Created\", \"Added `\"+todo.Text+\"` to the list.\")\r\n\r\n}\r\n\r\n\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">Si nuestro despachador elige la funci\u00f3n anterior, tomaremos los datos din\u00e1micos, conocidos como slot, y los insertaremos en Couchbase. Los datos de la ranura ser\u00e1n analizados por Amazon e incluidos en la solicitud, al igual que la intenci\u00f3n. Los datos de la ranura ser\u00e1n devueltos y hablados por Alexa cuando hayamos terminado.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La funci\u00f3n final es m\u00e1s larga, pero no mucho m\u00e1s complicada:<\/span><\/p>\n<pre class=\"lang:default decode:true\">func HandleGetTodosIntent(request alexa.Request) alexa.Response {\r\n\r\n\u00a0\u00a0\u00a0 todos := \"\"\r\n\r\n\u00a0\u00a0\u00a0 query := gocb.NewN1qlQuery(\"SELECT text FROM `todos` AS todos\")\r\n\r\n\u00a0\u00a0\u00a0 rows, _ := bucket.ExecuteN1qlQuery(query, nil)\r\n\r\n\u00a0\u00a0\u00a0 var row Todo\r\n\r\n\u00a0\u00a0\u00a0 for rows.Next(&amp;row) {\r\n\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 todos += row.Text + \". \"\r\n\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 return alexa.NewSimpleResponse(\"Todo List\", todos)\r\n\r\n}\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">In the `HandleGetTodosIntent` we are querying the open bucket using N1QL. With the results we are forming a string of data to be returned to the user and spoken by Alexa.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Una vez completado el c\u00f3digo, podemos centrarnos en el despliegue.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Desplegar y probar la funci\u00f3n Lambda como una Alexa Skill<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Antes de que podamos desplegar en la tienda Skill, tenemos que preparar nuestro c\u00f3digo de funci\u00f3n para Lambda. Al igual que en el ejemplo anterior, tenemos que realizar una compilaci\u00f3n cruzada de nuestra aplicaci\u00f3n para Linux, que es lo que utiliza Lambda.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Desde la l\u00ednea de comandos, ejecute lo siguiente:<\/span><\/p>\n<pre class=\"lang:default decode:true\">GOOS=linux go build\r\n\r\nzip handler.zip .\/binary-name<\/pre>\n<p><span style=\"font-weight: 400;\">Make sure to change the `binary-name` with that of the name of your actual binary file created from the previous build command. If you can&#8217;t run the `zip` command, go ahead and archive the file however makes the most sense.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Con el archivo **handler.zip** en la mano, ve al panel de gesti\u00f3n de Lambda (https:\/\/console.aws.amazon.com\/lambda) y crea una nueva funci\u00f3n utilizando los valores predeterminados. Aseg\u00farate de que est\u00e1s usando un proyecto Go.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Para el activador, elija **Alexa Skills Kit** y proceda a cargar su archivo ZIP. Para el **Handler** aseg\u00farate de proporcionar el nombre de tu archivo binario, no el nombre de tu archivo ZIP.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La \u00faltima cosa a tener en cuenta es su id ARN. Este valor ARN ser\u00e1 necesario cuando configuremos Alexa.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ahora ve a la Alexa Developer Console (https:\/\/developer.amazon.com\/alexa\/console) para que podamos crear una nueva Skill. Como parte del proceso de creaci\u00f3n, tendr\u00e1s que hacer cuatro cosas:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Nombre de la invocaci\u00f3n<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Intenciones, muestras y franjas horarias<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Modelo de construcci\u00f3n<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Punto final<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">El nombre de la invocaci\u00f3n no tiene por qu\u00e9 coincidir con el nombre de tu Skill, pero deben ser palabras reales que se puedan pronunciar con todos los acentos. Si empiezas a inventarte palabras o utilizas palabras complicadas, buena suerte con Alexa a la hora de entender lo que dice la gente.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">El endpoint es el ARN que copiaste en el paso anterior desde la consola de Lambda. Aseg\u00farate de pegarlo.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La mayor parte de nuestro trabajo consistir\u00e1 en crear intents, expresiones de ejemplo y nuestros datos din\u00e1micos de ranura. Tenemos que crear tres intentos para que coincida con lo que tenemos en nuestro c\u00f3digo Golang. Cada uno de nuestros intentos debe tener una lista de frases que activan el intento.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, the `GetTodosIntent` might have the following sample utterances:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:default decode:true\">what are my todos\r\n\r\nget me my list\r\n\r\nwhat is on my todo list\r\n\r\nget me my todos\r\n\r\n\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">The more example phrases you have, the better your Skill will perform. Basically, the samples help Alexa determine which intent to trigger in your code. The `CreateTodoIntent` is where things will get a little complicated because we are expecting dynamic data.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Eche un vistazo a los siguientes ejemplos de enunciados:<\/span><\/p>\n<pre class=\"lang:default decode:true\">add {todo} to my list\r\n\r\nsave {todo}\r\n\r\ncreate {todo} for my list<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Notice that I have `{todo}` in the above samples which matches that of my slot in my code. The `{todo}` placeholder is actually a variable for dynamic information. This information will be saved to our database. However, we need to define what type of data `{todo}` is.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Crear un tipo de ranura personalizada y darle algunos valores. Por ejemplo, he a\u00f1adido:<\/span><\/p>\n<pre class=\"lang:default decode:true\">wash car\r\n\r\nclean house<\/pre>\n<p><span style=\"font-weight: 400;\">No necesitas una lista exhaustiva, pero son datos de aprendizaje para Alexa, y ayudan a Alexa a identificar qu\u00e9 tipos de informaci\u00f3n deben considerarse informaci\u00f3n sobre ranuras. El hecho de que un texto no aparezca en la lista no significa que Alexa no lo vaya a recoger.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">En este momento, deber\u00eda ser capaz de construir su Skill. Escriba algunas frases de ejemplo en el portal de pruebas para verlas en acci\u00f3n antes de intentar desplegarlas.<\/span><\/p>\n<h3><\/h3>\n<h3><span style=\"font-weight: 400;\">Conclusi\u00f3n<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Acabas de ver c\u00f3mo crear una Amazon Alexa Skill usando Golang y <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/\"><span style=\"font-weight: 400;\">Servidor Couchbase<\/span><\/a><span style=\"font-weight: 400;\">. Esta fue una extensi\u00f3n de un tutorial anterior que escrib\u00ed titulado, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developing-aws-lambda-functions-with-golang-and-couchbase-nosql\/\">Desarrollo de funciones AWS Lambda con Golang y Couchbase NoSQL.<\/a><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tambi\u00e9n hay que tener en cuenta algo sobre nuestra Skill. Amazon tiene varias intenciones obligatorias que deben estar presentes para ser aprobadas. Por ejemplo, debe haber intents para detener y cancelar acciones. Nosotros no las hemos a\u00f1adido, pero seguir\u00edan la misma estrategia.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Si quieres ver otro ejemplo de desarrollo de una Skill con Golang, echa un vistazo a mi tutorial titulado, <\/span><a href=\"https:\/\/www.thepolyglotdeveloper.com\/2018\/10\/build-alexa-skill-golang-aws-lambda\/\"><span style=\"font-weight: 400;\">Crear una habilidad de Alexa con Golang y AWS Lambda<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Nic Raboy\u00a0is 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.\u00a0Nic\u00a0writes about his development experiences related to making web and mobile [&hellip;]<\/p>","protected":false},"author":53,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2225,1820,1812,2201],"tags":[10124,2100],"ppma_author":[9026],"class_list":["post-6329","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud","category-golang","category-n1ql-query","category-tools-sdks","tag-amazon-web-services-aws","tag-lambda"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Develop an Alexa Skill using Golang and Couchbase Server<\/title>\n<meta name=\"description\" content=\"See how to work with Amazon Alexa requests and respond appropriately so that Alexa will relay an audio message back to the user.\" \/>\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\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Developing an Alexa Skill with Golang, AWS Lambda, and Couchbase NoSQL\" \/>\n<meta property=\"og:description\" content=\"See how to work with Amazon Alexa requests and respond appropriately so that Alexa will relay an audio message back to the user.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-29T16:29:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:09:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\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=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"Developing an Alexa Skill with Golang, AWS Lambda, and Couchbase NoSQL\",\"datePublished\":\"2019-01-29T16:29:06+00:00\",\"dateModified\":\"2025-06-14T04:09:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\"},\"wordCount\":1368,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Amazon Web Services (AWS)\",\"lambda\"],\"articleSection\":[\"Couchbase Capella\",\"GoLang\",\"SQL++ \/ N1QL Query\",\"Tools &amp; SDKs\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\",\"name\":\"Develop an Alexa Skill using Golang and Couchbase Server\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2019-01-29T16:29:06+00:00\",\"dateModified\":\"2025-06-14T04:09:39+00:00\",\"description\":\"See how to work with Amazon Alexa requests and respond appropriately so that Alexa will relay an audio message back to the user.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Developing an Alexa Skill with Golang, AWS Lambda, and Couchbase NoSQL\"}]},{\"@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":"Develop an Alexa Skill using Golang and Couchbase Server","description":"Vea c\u00f3mo trabajar con las solicitudes de Amazon Alexa y responda adecuadamente para que Alexa transmita un mensaje de audio de vuelta al usuario.","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\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/","og_locale":"es_MX","og_type":"article","og_title":"Developing an Alexa Skill with Golang, AWS Lambda, and Couchbase NoSQL","og_description":"See how to work with Amazon Alexa requests and respond appropriately so that Alexa will relay an audio message back to the user.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-01-29T16:29:06+00:00","article_modified_time":"2025-06-14T04:09:39+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/01\/nraboy-here.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":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"Developing an Alexa Skill with Golang, AWS Lambda, and Couchbase NoSQL","datePublished":"2019-01-29T16:29:06+00:00","dateModified":"2025-06-14T04:09:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/"},"wordCount":1368,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Amazon Web Services (AWS)","lambda"],"articleSection":["Couchbase Capella","GoLang","SQL++ \/ N1QL Query","Tools &amp; SDKs"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/","url":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/","name":"Develop an Alexa Skill using Golang and Couchbase Server","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2019-01-29T16:29:06+00:00","dateModified":"2025-06-14T04:09:39+00:00","description":"Vea c\u00f3mo trabajar con las solicitudes de Amazon Alexa y responda adecuadamente para que Alexa transmita un mensaje de audio de vuelta al usuario.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/developing-an-alexa-skill-with-golang-aws-lambda-and-couchbase-nosql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Developing an Alexa Skill with Golang, AWS Lambda, and Couchbase NoSQL"}]},{"@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","author_category":"","last_name":"Czajkowski","first_name":"Laura","job_title":"","user_url":"","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\/6329","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=6329"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/6329\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=6329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=6329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=6329"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=6329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}