{"id":4324,"date":"2017-12-08T06:29:35","date_gmt":"2017-12-08T14:29:35","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4324"},"modified":"2025-06-13T16:52:25","modified_gmt":"2025-06-13T23:52:25","slug":"chatbot-azure-couchbase-viber","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/chatbot-azure-couchbase-viber\/","title":{"rendered":"Chatbot en Azure y Couchbase para Viber"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Un chatbot puede ser una forma novedosa de interactuar con los usuarios. Despu\u00e9s de escribir un post introduciendo los fundamentos de <a href=\"https:\/\/www.couchbase.com\/blog\/es\/serverless-architecture-cloud-computing\/\">sin servidor<\/a>y tambi\u00e9n escribir un post sobre la escritura <a href=\"https:\/\/www.couchbase.com\/blog\/es\/azure-functions-couchbase-server\/\">Funciones Azure<\/a>decid\u00ed que intentar\u00eda construir algo un poco m\u00e1s pr\u00e1ctico que un \"hola, mundo\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Utilizar una arquitectura sin servidor para un chatbot tiene sentido. El uso del chatbot puede ser espor\u00e1dico. El uso puede aumentar y disminuir en distintos momentos del d\u00eda. Al utilizar una arquitectura sin servidor, solo pagar\u00e1s por los recursos y el tiempo que necesites.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Si quieres seguirnos, todo el c\u00f3digo fuente de esta entrada del blog es <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/092ServerlessChatbot\/src\/ViberChatbot\">disponible en Github<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_viber_chatbot\">Chatbot de Viber<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Podr\u00eda haber elegido muchas plataformas diferentes para crear un chatbot: Facebook Messenger, Skype, WhatsApp y muchas m\u00e1s. Pero me decid\u00ed por <a href=\"https:\/\/www.viber.com\/\">Viber<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En Estados Unidos, Viber no parece tener muchos seguidores, pero yo lo uso mucho. Es una forma muy pr\u00e1ctica de chatear con mi mujer, enviar fotos, GIF divertidos, etc\u00e9tera. Me parece m\u00e1s fiable y r\u00e1pido que los SMS, sobre todo para las fotos. Ojal\u00e1 toda mi familia lo usara. Tambi\u00e9n es un buen efecto secundario que <a href=\"https:\/\/www.couchbase.com\/blog\/es\/customers\/viber\/\">Viber es cliente de Couchbase<\/a>. Cambiaron de MongoDb para dar soporte a sus crecientes necesidades de datos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n, <a href=\"https:\/\/developers.viber.com\/docs\/api\/rest-bot-api\/\">API REST de Viber<\/a> es sencillo y est\u00e1 bien documentado. Entre el uso de la arquitectura sin servidor y la API de Viber, no pod\u00eda creer lo r\u00e1pido que pas\u00e9 de 0 a chatbot.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_setup\">Configurar<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En primer lugar, tendr\u00e1 que empezar por <a href=\"https:\/\/viber.github.io\/docs\/general\/get-started\/\">Crear un bot en Viber<\/a> (en alg\u00fan momento necesitar\u00e1 una cuenta de Viber). Viber le proporcionar\u00e1 una clave de API similar a la siguiente <code>30a6470a1c67d66f-4207550bd0f024fa-c4cacb89afc04094<\/code>. Lo utilizar\u00e1 en las cabeceras HTTP para autenticarse en la API de Viber.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, cree una nueva soluci\u00f3n Azure Functions. Anteriormente he blogueado sobre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/azure-functions-couchbase-server\/\">Funciones Azure<\/a> con un seguimiento en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/azure-functions-lazy-initialization-couchbase-server\/\">Inicializaci\u00f3n perezosa<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Decid\u00ed usar C# para escribir mis Azure Functions. Desafortunadamente, no hay un SDK .NET para Viber (que yo sepa), as\u00ed que tendr\u00e9 que usar la API REST directamente. No es un gran problema, acabo de utilizar <a href=\"https:\/\/restsharp.org\/\">RestSharp<\/a>. Pero si prefiere <a href=\"https:\/\/developers.viber.com\/docs\/api\/nodejs-bot-api\/\">NodeJS<\/a> o <a href=\"https:\/\/developers.viber.com\/docs\/api\/python-bot-api\/\">Python<\/a>Viber te ofrece SDK para esos idiomas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de empezar a codificar, tendr\u00e1 que configurar un archivo <a href=\"https:\/\/viber.github.io\/docs\/api\/rest-bot-api\/#webhooks\">Gancho web<\/a>. Esto es simplemente una manera de decirle a Viber d\u00f3nde enviar los mensajes entrantes. S\u00f3lo tendr\u00e1 que hacer esto al principio. Yo lo hice desplegando primero una funci\u00f3n Azure b\u00e1sica que devuelve un 200. Utilic\u00e9 Postman para configurar el webhook inicial. Utilic\u00e9 Postman para configurar el webhook inicial.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/12\/09201-chatbot-webhook-with-postman.png\" alt=\"Chatbot webhook with Postman\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por \u00faltimo, configur\u00e9 un cl\u00faster de Couchbase en Azure. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/azure-getting-started-easy-free\/\">Empezar a utilizar Couchbase y Azure es f\u00e1cil y gratuito<\/a>. (Incluso puedes usar el bot\u00f3n \"Test Drive\" para obtener 3 horas de Couchbase Server sin gastar ning\u00fan cr\u00e9dito Azure). He creado un \u00fanico usuario llamado \"viberchatbot\", un bucket llamado \"ViberChatBot\" y he cargado el bucket \"travel-sample\".<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_azure_function\">Funci\u00f3n Azure<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para esta aplicaci\u00f3n, quer\u00eda crear un chatbot con un poco m\u00e1s de sustancia que \"Hola, mundo\" y tambi\u00e9n quer\u00eda divertirme un poco. Aqu\u00ed est\u00e1n los comandos que quiero que mi chatbot entienda:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Si le digo \"hola\" (o hello, etc.), responder\u00e1 con un \"\u00a1Hola!\".<\/p>\n<\/li>\n<li>\n<p>Si le pido \"m\u00e9tricas\", me dir\u00e1 cu\u00e1ntos mensajes ha procesado hasta ahora.<\/p>\n<\/li>\n<li>\n<p>Si menciono \"twitter\", me har\u00e1 una recomendaci\u00f3n sobre a qui\u00e9n seguir.<\/p>\n<\/li>\n<li>\n<p>Si pregunto por vuelos de CMH a ATL (u otros aeropuertos) me dir\u00e1 cu\u00e1ntos vuelos hay hoy (utilizar\u00e9 el bot\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/settings\/install-sample-buckets.html\">cubo para muestras de viaje<\/a> para estos datos).<\/p>\n<\/li>\n<li>\n<p>Si digo \"help\", me dar\u00e1 una lista de los comandos anteriores.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>He decidido no utilizar ninguna librer\u00eda de procesamiento o an\u00e1lisis del lenguaje natural. S\u00f3lo voy a usar simples sentencias if\/else y algunas coincidencias b\u00e1sicas de cadenas. Si usted est\u00e1 planeando crear un chatbot robusto con capacidades ricas, definitivamente recomiendo revisar bibliotecas y herramientas como <a href=\"https:\/\/www.luis.ai\/home\">LUIS<\/a>, <a href=\"https:\/\/wit.ai\/\">wit.ai<\/a>, <a href=\"https:\/\/www.nltk.org\/\">NLTK<\/a> y otros.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_chatbot_code\">C\u00f3digo Chatbot<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Empec\u00e9 creando unas cuantas clases C# para representar la estructura de los datos que Viber enviar\u00e1 a mi punto final sin servidor.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_viber_classes\">Clases de Viber<\/h3>\n<div class=\"paragraph\">\n<p>Esto no es ni mucho menos una representaci\u00f3n exhaustiva de las capacidades de Viber, pero es suficiente para empezar a recibir mensajes de texto b\u00e1sicos.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public class ViberIncoming\r\n{\r\n    public string Event { get; set; }\r\n    public long Timestamp { get; set; }\r\n    public ViberSender Sender { get; set; }\r\n    public ViberMessage Message { get; set; }\r\n}\r\n\r\npublic class ViberSender\r\n{\r\n    public string Id { get; set; }\r\n    public string Name { get; set; }\r\n}\r\n\r\npublic class ViberMessage\r\n{\r\n    public string Text { get; set; }\r\n    public string Type { get; set; }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, la funci\u00f3n Azure convertir\u00e1 la solicitud HTTP sin procesar en un archivo <code>ViberEntrada<\/code> objeto.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">[FunctionName(\"Chatbot\")]\r\npublic static async Task&lt;HttpResponseMessage&gt; Run(\r\n    [HttpTrigger(AuthorizationLevel.Anonymous, \"get\", \"post\", Route = null)]HttpRequestMessage req,\r\n    TraceWriter log)\r\n{\r\n    var incoming = req.Content.ReadAsAsync&lt;ViberIncoming&gt;().Result;\r\n\r\n    var viber = new ViberProcessor(Bucket.Value);\r\n    viber.Process(incoming);\r\n\r\n    \/\/ return \"OK\" each time\r\n    \/\/ this is most important for the initial Viber webhook setup\r\n    return req.CreateResponse(HttpStatusCode.OK);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Despu\u00e9s de esto, he creado un <code>ViberProcesador<\/code> con una clase <code>Proceso<\/code> que recibe este objeto.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">public void Process(ViberIncoming incoming)\r\n{\r\n    if (incoming?.Message?.Type == \"text\")\r\n    {\r\n        LogIncoming(incoming);\r\n        ProcessMessage(incoming);\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_processing_viber_messages\">Procesamiento de mensajes de Viber<\/h3>\n<div class=\"paragraph\">\n<p><code>LogIncoming<\/code> crea un registro (en Couchbase) para que yo sepa todo sobre cada solicitud que llega.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>ProcesarMensaje<\/code> analizar\u00e1 el texto del mensaje y averiguar\u00e1 qu\u00e9 hacer en respuesta. Puede consultar el c\u00f3digo completo en <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/092ServerlessChatbot\/src\/ViberChatbot\">Github<\/a>pero he aqu\u00ed un breve fragmento para que se haga una idea:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">\/\/ if the message contains \"hi\", \"hello\", etc say \"howdy\"\r\nelse if (HelloStrings.Any(incoming.Message.Text.ToLower().Contains))\r\n    SendTextMessage(\"Howdy!\", incoming.Sender.Id);\r\n\/\/ if message contains \"?\" then link to the forums\r\nelse if (incoming.Message.Text.Contains(\"?\"))\r\n    SendTextMessage(\"If you have a Couchbase question, please ask on the forums! https:\/\/forums.couchbase.com\", incoming.Sender.Id);\r\nelse\r\n    SendTextMessage(\"I'm sorry, I don't understand you. Type 'help' for help!\", incoming.Sender.Id);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_getting_metrics\">Obtener m\u00e9tricas<\/h3>\n<div class=\"paragraph\">\n<p>Una de las cosas que escucha mi chatbot son las \"m\u00e9tricas\". Cuando le pides m\u00e9tricas, te dar\u00e1 un recuento de los mensajes entrantes que ha procesado. Dado que registro todas las solicitudes en Couchbase, la consulta de m\u00e9tricas se realiza f\u00e1cilmente con una consulta N1QL.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">private string GetMetrics()\r\n{\r\n    var n1ql = @\"select value count(*) as totalIncoming\r\n                from ViberChatBot b\r\n                where meta(b).id like 'incoming::%';\";\r\n    var query = QueryRequest.Create(n1ql);\r\n    var response = _bucket.Query&lt;int&gt;(query);\r\n    if (response.Success)\r\n        return $\"I have received {response.Rows.First()} incoming messages so far!\";\r\n    return \"Sorry, I'm having trouble getting metrics right now.\";\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_sending_a_message_back\">Devolver un mensaje<\/h3>\n<div class=\"paragraph\">\n<p>El chatbot necesita comunicarse con la persona que est\u00e1 hablando con \u00e9l. Como he dicho antes, no hay Viber .NET SDK, as\u00ed que tengo que crear una llamada REST \"manualmente\". Esto es bastante f\u00e1cil con <a href=\"https:\/\/restsharp.org\/\">RestSharp<\/a>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">private void SendTextMessage(string message, string senderId)\r\n{\r\n    var client = new RestClient(\"https:\/\/chatapi.viber.com\/pa\/send_message\");\r\n    var request = new RestRequest(RestSharp.Method.POST);\r\n    request.AddJsonBody(new\r\n    {\r\n        receiver = senderId,    \/\/ receiver\t(Unique Viber user id, required)\r\n        type = \"text\",          \/\/ type\t(Message type, required) Available message types: text, picture, etc\r\n        text = message\r\n    });\r\n    request.AddHeader(\"X-Viber-Auth-Token\", ViberKey);\r\n    var response = client.Execute(request);\r\n\r\n    \/\/ log to Couchbase\r\n    _bucket.Insert(\"resp::\" + Guid.NewGuid(), response.Content);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta que tambi\u00e9n estoy registrando cada respuesta de Viber a Couchbase. Esto podr\u00eda ser informaci\u00f3n muy \u00fatil para el an\u00e1lisis posterior y \/ o soluci\u00f3n de problemas. Si Viber decide cambiar la estructura y el contenido de su respuesta, los datos en Couchbase se almacenan como datos JSON flexibles. No obtendr\u00e1s errores sorpresa o datos faltantes en este punto de ingesti\u00f3n.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Eso es todo lo b\u00e1sico. Consulta el c\u00f3digo fuente para ver el conjunto completo de acciones\/operaciones que puede realizar el chatbot. Para probar el bot, utilic\u00e9 mi aplicaci\u00f3n Viber para Android en mi tel\u00e9fono (y en el de mi mujer, para asegurarme de que funcionaba cuando lo hiciera p\u00fablico).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/12\/09202-viber-conversation-with-chatbot.png\" alt=\"Conversation with chatbot\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Cuidado: para cuando leas esto, es probable que el chatbot que he creado est\u00e9 fuera de l\u00ednea. \u00a1Cualquier otra persona que cree un \"Couchbase Bot\" no soy yo!<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aqu\u00ed tienes un resumen de las ventajas de este enfoque para crear un chatbot:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>En <a href=\"https:\/\/www.couchbase.com\/blog\/es\/serverless-architecture-cloud-computing\/\">enfoque sin servidor<\/a> es una buena forma de controlar los costes de un chatbot. Ya sea Viber o alguna otra plataforma de mensajer\u00eda, hay potencial para un uso espor\u00e1dico y c\u00edclico.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/viber.github.io\/docs\/api\/rest-bot-api\/\">API REST de Viber<\/a> utiliza JSON, lo que convierte a Couchbase en una herramienta natural para el seguimiento\/almacenamiento\/consulta.<\/p>\n<\/li>\n<li>\n<p>La facilidad de escalado de Couchbase y sus asociaciones con <a href=\"https:\/\/azuremarketplace.microsoft.com\/en-us\/marketplace\/apps\/couchbase.couchbase-enterprise\">Microsoft<\/a> (y Amazon y Google) lo convierten en una gran opci\u00f3n para un backend de chatbot.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Fue muy divertido, y sin duda pude dejarme llevar jugando con este nuevo chatbot. Pod\u00eda analizar im\u00e1genes, contar chistes, buscar todo tipo de informaci\u00f3n, vender productos y servicios, o cualquier otra operaci\u00f3n \u00fatil.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Me encantar\u00eda saber qu\u00e9 est\u00e1s haciendo con los chatbots. Deja un comentario o ponte en contacto conmigo en <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>A chatbot can be a novel way to interact with users. After writing a post introducing the basics of serverless, and also writing a post on writing Azure Functions, I decided I would try to build something a little more [&hellip;]<\/p>","protected":false},"author":71,"featured_media":4325,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816],"tags":[1245,1673,2099,1322],"ppma_author":[8937],"class_list":["post-4324","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","tag-cloud","tag-microsoft-azure","tag-serverless","tag-viber"],"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>Chatbot on Azure and Couchbase for Viber - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Use a serverless approach to quickly build a chatbot. In this blog post, I&#039;ll show you an example with Azure, Couchbase, and Viber.\" \/>\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\/chatbot-azure-couchbase-viber\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chatbot on Azure and Couchbase for Viber\" \/>\n<meta property=\"og:description\" content=\"Use a serverless approach to quickly build a chatbot. In this blog post, I&#039;ll show you an example with Azure, Couchbase, and Viber.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/chatbot-azure-couchbase-viber\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-12-08T14:29:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T23:52:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"853\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Chatbot on Azure and Couchbase for Viber\",\"datePublished\":\"2017-12-08T14:29:35+00:00\",\"dateModified\":\"2025-06-13T23:52:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/\"},\"wordCount\":1170,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg\",\"keywords\":[\"cloud\",\"Microsoft Azure\",\"serverless\",\"viber\"],\"articleSection\":[\".NET\",\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/\",\"name\":\"Chatbot on Azure and Couchbase for Viber - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg\",\"datePublished\":\"2017-12-08T14:29:35+00:00\",\"dateModified\":\"2025-06-13T23:52:25+00:00\",\"description\":\"Use a serverless approach to quickly build a chatbot. In this blog post, I'll show you an example with Azure, Couchbase, and Viber.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg\",\"width\":1280,\"height\":853,\"caption\":\"mobile phone chatbot\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chatbot on Azure and Couchbase for Viber\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Chatbot on Azure and Couchbase for Viber - The Couchbase Blog","description":"Use a serverless approach to quickly build a chatbot. In this blog post, I'll show you an example with Azure, Couchbase, and Viber.","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\/chatbot-azure-couchbase-viber\/","og_locale":"es_MX","og_type":"article","og_title":"Chatbot on Azure and Couchbase for Viber","og_description":"Use a serverless approach to quickly build a chatbot. In this blog post, I'll show you an example with Azure, Couchbase, and Viber.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/chatbot-azure-couchbase-viber\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-12-08T14:29:35+00:00","article_modified_time":"2025-06-13T23:52:25+00:00","og_image":[{"width":1280,"height":853,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Chatbot on Azure and Couchbase for Viber","datePublished":"2017-12-08T14:29:35+00:00","dateModified":"2025-06-13T23:52:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/"},"wordCount":1170,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg","keywords":["cloud","Microsoft Azure","serverless","viber"],"articleSection":[".NET","Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/","url":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/","name":"Chatbot on Azure and Couchbase for Viber - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg","datePublished":"2017-12-08T14:29:35+00:00","dateModified":"2025-06-13T23:52:25+00:00","description":"Use a serverless approach to quickly build a chatbot. In this blog post, I'll show you an example with Azure, Couchbase, and Viber.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/12\/092-hero-chat-mobile-phone.jpg","width":1280,"height":853,"caption":"mobile phone chatbot"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Chatbot on Azure and Couchbase for Viber"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","first_name":"Matthew","last_name":"Groves","user_url":"https:\/\/crosscuttingconcerns.com","author_category":"","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4324","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=4324"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4324\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/4325"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=4324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4324"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}