{"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\/pt\/chatbot-azure-couchbase-viber\/","title":{"rendered":"Chatbot no Azure e no Couchbase para o Viber"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Um chatbot pode ser uma forma inovadora de interagir com os usu\u00e1rios. Depois de escrever um post apresentando os conceitos b\u00e1sicos de <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/serverless-architecture-cloud-computing\/\">sem servidor<\/a>e tamb\u00e9m escrever um post sobre escrita <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/azure-functions-couchbase-server\/\">Fun\u00e7\u00f5es do Azure<\/a>Por isso, decidi que tentaria criar algo um pouco mais pr\u00e1tico do que um \"hello, world\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Usar uma arquitetura sem servidor para um chatbot faz sentido. O uso do chatbot pode ser espor\u00e1dico. O uso pode ter picos e quedas em v\u00e1rios momentos do dia. Ao usar a arquitetura sem servidor, voc\u00ea pagar\u00e1 apenas pelos recursos e pelo tempo necess\u00e1rios.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Se voc\u00ea quiser acompanhar o processo, todo o c\u00f3digo-fonte desta postagem do blog est\u00e1 em <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/092ServerlessChatbot\/src\/ViberChatbot\">dispon\u00edvel no Github<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_viber_chatbot\">Viber Chatbot<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Eu poderia ter escolhido muitas plataformas diferentes para criar um chatbot: Facebook Messenger, Skype, WhatsApp, entre outras. Mas decidi optar pelo <a href=\"https:\/\/www.viber.com\/\">Viber<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Nos Estados Unidos, o Viber n\u00e3o parece ter um grande n\u00famero de seguidores, mas eu o tenho usado bastante. \u00c9 uma maneira muito pr\u00e1tica de conversar com minha esposa, enviar fotos, GIFs engra\u00e7ados e assim por diante. Acho que ele \u00e9 mais confi\u00e1vel e mais r\u00e1pido do que o SMS, especialmente para fotos. Gostaria que todos da minha fam\u00edlia o usassem! Tamb\u00e9m \u00e9 um bom efeito colateral o fato de que <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/customers\/viber\/\">O Viber \u00e9 um cliente do Couchbase<\/a>. Eles mudaram do MongoDb para dar suporte \u00e0s suas necessidades crescentes de dados.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tamb\u00e9m, <a href=\"https:\/\/developers.viber.com\/docs\/api\/rest-bot-api\/\">API REST do Viber<\/a> \u00e9 simples e bem documentado. Entre o uso da arquitetura sem servidor e a API do Viber, n\u00e3o pude acreditar na rapidez com que passei do zero ao chatbot.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_setup\">Configura\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Primeiro, voc\u00ea precisar\u00e1 come\u00e7ar por <a href=\"https:\/\/viber.github.io\/docs\/general\/get-started\/\">criar um bot no Viber<\/a> (voc\u00ea precisar\u00e1 de uma conta do Viber em algum momento). O Viber lhe dar\u00e1 uma chave de API semelhante a <code>30a6470a1c67d66f-4207550bd0f024fa-c4cacb89afc04094<\/code>. Voc\u00ea usar\u00e1 isso nos cabe\u00e7alhos HTTP para se autenticar na API do Viber.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em seguida, crie uma nova solu\u00e7\u00e3o do Azure Functions. J\u00e1 escrevi anteriormente no blog sobre <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/azure-functions-couchbase-server\/\">Fun\u00e7\u00f5es do Azure<\/a> com uma continua\u00e7\u00e3o em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/azure-functions-lazy-initialization-couchbase-server\/\">Inicializa\u00e7\u00e3o pregui\u00e7osa<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Decidi usar o C# para escrever minhas fun\u00e7\u00f5es do Azure. Infelizmente, n\u00e3o h\u00e1 SDK .NET para o Viber (at\u00e9 onde eu sei), ent\u00e3o terei que usar a API REST diretamente. N\u00e3o \u00e9 grande coisa, apenas usei <a href=\"https:\/\/restsharp.org\/\">RestSharp<\/a>. Mas se voc\u00ea preferir <a href=\"https:\/\/developers.viber.com\/docs\/api\/nodejs-bot-api\/\">NodeJS<\/a> ou <a href=\"https:\/\/developers.viber.com\/docs\/api\/python-bot-api\/\">Python<\/a>O Viber oferece a voc\u00ea SDKs para esses idiomas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de come\u00e7ar a codificar, voc\u00ea precisar\u00e1 configurar um <a href=\"https:\/\/viber.github.io\/docs\/api\/rest-bot-api\/#webhooks\">Webhook<\/a>. Essa \u00e9 simplesmente uma maneira de dizer ao Viber para onde enviar as mensagens recebidas. Voc\u00ea s\u00f3 precisar\u00e1 fazer isso no in\u00edcio. Fiz isso implantando primeiro uma fun\u00e7\u00e3o b\u00e1sica do Azure que retorna 200. Usei o Postman para definir o 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 fim, configurei um cluster do Couchbase no Azure. <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/azure-getting-started-easy-free\/\">Come\u00e7ar a usar o Couchbase e o Azure \u00e9 f\u00e1cil e gratuito<\/a>. (Voc\u00ea pode at\u00e9 usar o bot\u00e3o \"Test Drive\" para obter 3 horas de Couchbase Server sem gastar nenhum cr\u00e9dito do Azure). Criei um \u00fanico usu\u00e1rio chamado \"viberchatbot\", um bucket chamado \"ViberChatBot\" e carreguei o bucket \"travel-sample\".<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_azure_function\">Fun\u00e7\u00e3o do Azure<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para esse aplicativo, eu queria criar um chatbot com um pouco mais de subst\u00e2ncia do que \"Hello, world\" e tamb\u00e9m queria me divertir um pouco. Aqui est\u00e3o os comandos que quero que meu chatbot entenda:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>Se eu disser \"hi\" (ou hello, etc.), ele responder\u00e1 com \"Howdy!\".<\/p>\n<\/li>\n<li>\n<p>Se eu solicitar \"m\u00e9tricas\", ele me informar\u00e1 quantas mensagens foram processadas at\u00e9 o momento.<\/p>\n<\/li>\n<li>\n<p>Se eu mencionar \"twitter\", ele far\u00e1 uma recomenda\u00e7\u00e3o sobre quem seguir.<\/p>\n<\/li>\n<li>\n<p>Se eu solicitar voos de CMH para ATL (ou outros aeroportos), ele me informar\u00e1 quantos voos existem hoje (usarei o <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/settings\/install-sample-buckets.html\">balde para amostras de viagem<\/a> para esses dados).<\/p>\n<\/li>\n<li>\n<p>Se eu disser \"help\", ele me fornecer\u00e1 uma lista dos comandos acima.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Decidi n\u00e3o usar nenhuma biblioteca de processamento ou an\u00e1lise de linguagem natural. Vou usar apenas declara\u00e7\u00f5es if\/else simples e algumas combina\u00e7\u00f5es b\u00e1sicas de strings. Se estiver planejando criar um chatbot robusto com recursos avan\u00e7ados, definitivamente recomendo consultar bibliotecas e ferramentas 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> e outros.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_chatbot_code\">C\u00f3digo do chatbot<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Comecei criando algumas classes C# para representar a estrutura dos dados que o Viber enviar\u00e1 ao meu endpoint sem servidor.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_viber_classes\">Aulas no Viber<\/h3>\n<div class=\"paragraph\">\n<p>Essa n\u00e3o \u00e9, nem de longe, uma representa\u00e7\u00e3o exaustiva dos recursos do Viber, mas \u00e9 suficiente para come\u00e7ar a receber mensagens de texto b\u00e1sicas.<\/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>Em seguida, a fun\u00e7\u00e3o do Azure converter\u00e1 a solicita\u00e7\u00e3o HTTP bruta em uma solicita\u00e7\u00e3o <code>ViberIncoming<\/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>Depois disso, criei um <code>ViberProcessador<\/code> com uma classe <code>Processo<\/code> que recebe esse 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\">Processamento de mensagens do Viber<\/h3>\n<div class=\"paragraph\">\n<p><code>Registro de entrada<\/code> cria um registro (no Couchbase) para que eu saiba tudo sobre cada solicita\u00e7\u00e3o recebida.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>ProcessMessage<\/code> analisar\u00e1 o texto da mensagem e descobrir\u00e1 o que fazer em resposta. Voc\u00ea pode conferir o c\u00f3digo completo em <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/092ServerlessChatbot\/src\/ViberChatbot\">Github<\/a>mas aqui est\u00e1 um breve trecho para que voc\u00ea tenha uma ideia:<\/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\">Obten\u00e7\u00e3o de m\u00e9tricas<\/h3>\n<div class=\"paragraph\">\n<p>Uma das coisas que meu chatbot escuta \u00e9 \"m\u00e9tricas\". Quando voc\u00ea solicita as m\u00e9tricas, ele fornece uma contagem das mensagens recebidas que foram processadas. Como estou registrando cada solicita\u00e7\u00e3o no Couchbase, a consulta de m\u00e9tricas \u00e9 feita facilmente com uma 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\">Enviar uma mensagem de volta<\/h3>\n<div class=\"paragraph\">\n<p>O chatbot precisa se comunicar de volta com a pessoa que est\u00e1 falando com ele. Como eu disse anteriormente, n\u00e3o h\u00e1 SDK do Viber .NET, portanto, tenho que criar uma chamada REST \"manualmente\". Isso \u00e9 bastante f\u00e1cil com o <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>Observe que tamb\u00e9m estou registrando cada resposta do Viber para o Couchbase. Isso pode ser uma informa\u00e7\u00e3o muito \u00fatil para an\u00e1lise posterior e\/ou solu\u00e7\u00e3o de problemas. Se o Viber decidir alterar a estrutura e o conte\u00fado de sua resposta, os dados no Couchbase ser\u00e3o todos armazenados como dados JSON flex\u00edveis. Voc\u00ea n\u00e3o ter\u00e1 erros surpreendentes ou dados ausentes nesse ponto de ingest\u00e3o.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Isso \u00e9 tudo o que \u00e9 b\u00e1sico. Confira o c\u00f3digo-fonte para ver o conjunto completo de a\u00e7\u00f5es\/opera\u00e7\u00f5es que o chatbot pode realizar. Para testar o bot, usei o aplicativo Viber para Android no meu telefone (e no da minha esposa, para garantir que funcionasse quando eu fosse a 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>Aten\u00e7\u00e3o: no momento em que voc\u00ea ler isto, o chatbot que criei provavelmente estar\u00e1 off-line. Qualquer outra pessoa que criar um \"Bot do Couchbase\" n\u00e3o ser\u00e1 eu!<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aqui est\u00e1 uma recapitula\u00e7\u00e3o dos benef\u00edcios dessa abordagem para a cria\u00e7\u00e3o de um chatbot:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>O <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/serverless-architecture-cloud-computing\/\">abordagem sem servidor<\/a> \u00e9 uma boa maneira de controlar os custos de um chatbot. Seja no Viber ou em outra plataforma de mensagens, h\u00e1 potencial para uso espor\u00e1dico e c\u00edclico.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/viber.github.io\/docs\/api\/rest-bot-api\/\">API REST do Viber<\/a> utiliza JSON, o que torna o Couchbase uma op\u00e7\u00e3o natural para rastreamento\/armazenamento\/consulta.<\/p>\n<\/li>\n<li>\n<p>A facilidade de dimensionamento e as parcerias do Couchbase com <a href=\"https:\/\/azuremarketplace.microsoft.com\/en-us\/marketplace\/apps\/couchbase.couchbase-enterprise\">Microsoft<\/a> (e Amazon e Google) fazem dele uma \u00f3tima op\u00e7\u00e3o para um backend de chatbot.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso foi muito divertido, e eu definitivamente poderia me empolgar brincando com esse novo chatbot. Ele poderia analisar imagens, contar piadas, procurar todo tipo de informa\u00e7\u00e3o, vender produtos e servi\u00e7os ou qualquer outra opera\u00e7\u00e3o \u00fatil.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Gostaria muito de saber o que voc\u00ea est\u00e1 fazendo com os chatbots! Deixe um coment\u00e1rio ou entre em contato comigo em <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 v26.2 (Yoast SEO v26.2) - 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\/pt\/chatbot-azure-couchbase-viber\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/chatbot-azure-couchbase-viber\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/chatbot-azure-couchbase-viber\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4324"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4324\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/4325"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4324"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=4324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}