{"id":5569,"date":"2018-08-06T10:05:26","date_gmt":"2018-08-06T17:05:26","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5569"},"modified":"2025-06-13T22:39:40","modified_gmt":"2025-06-14T05:39:40","slug":"eventing-notification-couchbase-functions","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/eventing-notification-couchbase-functions\/","title":{"rendered":"Eventos: Notifica\u00e7\u00e3o com o Couchbase Functions"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Observa\u00e7\u00e3o importante: esta postagem do blog cont\u00e9m informa\u00e7\u00f5es sobre uma fun\u00e7\u00e3o CURL de visualiza\u00e7\u00e3o do desenvolvedor em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/eventing\/\">Eventos<\/a>. A fun\u00e7\u00e3o CURL ser\u00e1 alterada no Couchbase Server 6.5, consulte <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/using-curl-eventing-service-update\/\">Usando cURL com o Eventing Service: Atualiza\u00e7\u00e3o<\/a> para obter mais detalhes.<\/p>\n<p>Eventing \u00e9 um novo servi\u00e7o dispon\u00edvel no Couchbase Server. O Cincinnati Reds est\u00e1 interessado em usar esse recurso para atender mais rapidamente aos seus clientes VIP. Um concierge \u00e9 atribu\u00eddo a um ou mais VIPs. Quando o VIP entra no est\u00e1dio, uma mensagem de texto \u00e9 enviada ao concierge. O concierge pode ent\u00e3o encontrar o VIP em seus assentos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como prova de conceito, criei um exemplo que usa Functions (parte de Eventing) para enviar uma mensagem de texto. Estou usando um <a href=\"https:\/\/www.twilio.com\/try-twilio\">conta de teste do Twilio<\/a> para enviar as mensagens. I <em>n\u00e3o<\/em> n\u00e3o sei se os Reds planejam usar o Twilio ou mensagens de texto em seu sistema de produ\u00e7\u00e3o. Mas \u00e9 gratuito e f\u00e1cil come\u00e7ar a usar o Twilio, ent\u00e3o foi isso que decidi usar em minha prova de conceito. Voc\u00ea pode usar qualquer servi\u00e7o de mensagem\/notifica\u00e7\u00e3o que desejar (em vez disso), desde que ele tenha uma API HTTP.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_eventing_review\">Revis\u00e3o de eventos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>N\u00e3o vou fornecer todos os detalhes sobre eventos aqui. Meus colegas j\u00e1 falaram bastante sobre isso em seus blogs. Definitivamente, d\u00ea uma olhada em suas postagens para obter mais detalhes:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/eventing\/\">Apresentando o servi\u00e7o de eventos do Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/using-the-curl-function-with-the-couchbase-eventing-service\/\">Usando a fun\u00e7\u00e3o cURL com o servi\u00e7o de eventos do Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/detect-sensitive-information-nosql-documents-automatically-couchbase-functions\/\">Detecte informa\u00e7\u00f5es confidenciais em seus documentos NoSQL automaticamente com as fun\u00e7\u00f5es do Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-data-platform-action-setup-steps\/\">A plataforma de dados Couchbase em a\u00e7\u00e3o: Configura\u00e7\u00e3o passo a passo<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Mas a hist\u00f3ria resumida \u00e9 a seguinte: O Couchbase Functions (parte do Eventing) permite que voc\u00ea escreva fun\u00e7\u00f5es JavaScript que respondem a documentos que s\u00e3o criados\/atualizados\/exclu\u00eddos. Dentro dessas fun\u00e7\u00f5es, voc\u00ea pode ler documentos, gravar documentos (em outros buckets), executar consultas N1QL e executar um <code>enrolar<\/code> para fazer solicita\u00e7\u00f5es a pontos de extremidade HTTP. <strong>Observa\u00e7\u00e3o: a constru\u00e7\u00e3o curl ainda est\u00e1 em desenvolvimento. Esse recurso destina-se apenas a fins de desenvolvimento e n\u00e3o deve ser usado em ambientes de produ\u00e7\u00e3o.<\/strong><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vou reunir partes das publica\u00e7\u00f5es do blog acima para criar essa prova de conceito de eventos para os Reds.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_scanning_tickets\">Digitaliza\u00e7\u00e3o de bilhetes<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A primeira etapa \u00e9 escanear o bilhete do cliente no port\u00e3o. Escrevi um programa para <em>simular<\/em> isso. Ele criar\u00e1 um documento \"ticketscan\" aleat\u00f3rio em um compartimento \"tickets\" no Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de digitalizar os t\u00edquetes, eu precisava preencher previamente o balde com alguns dados.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Decidi que os clientes de 1 a 9 s\u00e3o os VIPs, e qualquer outro cliente \u00e9 um \"cidad\u00e3o comum\".<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">_bucket.Upsert(\"customer::1\", new { Name = \"George Clooney\" });\r\n_bucket.Upsert(\"customer::2\", new { Name = \"Josh Hutcherson\" });\r\n_bucket.Upsert(\"customer::3\", new { Name = \"Darius Rucker\" });\r\n_bucket.Upsert(\"customer::4\", new { Name = \"Brooklyn Decker\" });\r\n_bucket.Upsert(\"customer::5\", new { Name = \"Eddie Vedder\" });\r\n_bucket.Upsert(\"customer::6\", new { Name = \"Nick Lachey\" });\r\n_bucket.Upsert(\"customer::7\", new { Name = \"Nick Goepper\" });\r\n_bucket.Upsert(\"customer::8\", new { Name = \"Johnny Bench\" });\r\n_bucket.Upsert(\"customer::9\", new { Name = \"Ryan Collins\" });<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Observa\u00e7\u00e3o divertida: esses VIPs s\u00e3o todos torcedores reais dos Reds!<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tamb\u00e9m criei 3 concierges e dividi os VIPs entre eles.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">_bucket.Upsert(\"concierge::1\", new\r\n{\r\n    Name = \"Matt Groves\",\r\n    CellNumber = _yourVerifiedNumber,\r\n    vips = new List&lt;string&gt; { \"customer::1\", \"customer::2\", \"customer::9\" }\r\n});\r\n_bucket.Upsert(\"concierge::2\", new\r\n{\r\n    Name = \"Mr. Redlegs\",\r\n    CellNumber = _yourVerifiedNumber,\r\n    vips = new List&lt;string&gt; { \"customer::3\", \"customer::4\", \"customer::5\" }\r\n});\r\n_bucket.Upsert(\"concierge::3\", new\r\n{\r\n    Name = \"Rosie Red\",\r\n    CellNumber = _yourVerifiedNumber,\r\n    vips = new List&lt;string&gt; { \"customer::6\", \"customer::7\", \"customer::8\" }\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>No exemplo acima, estou atribuindo os clientes 1, 2 e 9 a \"Matt Groves\". Isso significa que George Clooney, Josh Hutcherson e Ryan Collins s\u00e3o os VIPs para os quais o concierge Matt Groves est\u00e1 designado a cuidar. (Substituir <code>_seuN\u00fameroVerificado<\/code> com o n\u00famero de telefone que voc\u00ea confirmou com o Twilio).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tamb\u00e9m estou armazenando as credenciais do Twilio em um documento. Fiz isso porque precisarei das credenciais dentro de uma fun\u00e7\u00e3o do Couchbase e n\u00e3o queria codific\u00e1-las de forma r\u00edgida. O documento de credenciais tem a seguinte apar\u00eancia:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">{\r\n  \"url\": \"https:\/\/api.twilio.com\/2010-04-01\/Accounts\/&lt; twilio user name here &gt;\/Messages.json\",\r\n  \"username\": \"&lt; twilio user name here &gt;\",\r\n  \"password\": \"&lt; twilio password name here &gt;\",\r\n  \"fromNumber\": \"&lt; twilio 'from' number here &gt;\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Criei um aplicativo de console que criar\u00e1 um novo documento \"ticketscan\". Ao execut\u00e1-lo, voc\u00ea pode optar por criar uma varredura VIP ou uma varredura \"normal\".<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">Console.WriteLine(\"1 - Simulate a VIP ticket scan.\");\r\nConsole.WriteLine(\"2 - Simulate a regular joe ticket scan.\");\r\nConsole.WriteLine(\"Q - End simulation.\");\r\nvar choice = Console.ReadKey().KeyChar;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Um documento do ticketcan cont\u00e9m apenas tr\u00eas campos: a ID do documento do cliente, um registro de data e hora e um n\u00famero de assento.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">_bucket.Upsert(ticketScanId, new {CustomerId = customerId, Timestamp = ticketScanTimestamp, Seat = seatInformation });<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode encontrar o <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/111RedsEventingTwilio\/src\/TicketVip\">c\u00f3digo-fonte completo no Github<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_eventing_function\">Fun\u00e7\u00e3o de eventos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O n\u00facleo desse exemplo de eventos \u00e9 a fun\u00e7\u00e3o. Quando criei essa fun\u00e7\u00e3o, chamei-a de \"notifyConcierge\"; usei um compartimento \"tickets_metadata\" (conforme a figura abaixo). Mais importante ainda, criei um alias para o compartimento \"tickets\" e o chamei de \"src\". Na fun\u00e7\u00e3o, esse compartimento \u00e9 somente leitura, mas preciso dele para obter informa\u00e7\u00f5es do cliente e do concierge, bem como as credenciais do Twilio.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/08\/11101-create-eventing-function.png\" alt=\"Creating a function in eventing\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/blob\/master\/Groves\/111RedsEventingTwilio\/src\/TicketVip\/TicketVip\/notifyConcierge.js\">A fun\u00e7\u00e3o completa pode ser visualizada no Github<\/a>. Aqui est\u00e1 o detalhamento da fun\u00e7\u00e3o, passo a passo:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>1 - O documento alterado \u00e9 um ticketcan? Se for, prossiga. Caso contr\u00e1rio, essa fun\u00e7\u00e3o pode ignor\u00e1-lo.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">if (meta.id.indexOf(\"ticketscan::\") !== -1) {<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>2 - O cliente que escaneou esse bilhete \u00e9 um VIP? Se for, obtenha os detalhes do concierge e prossiga. Caso contr\u00e1rio, ignore-o. Observe o N1QL em linha nesta parte da fun\u00e7\u00e3o. Esse \u00e9 um recurso exclusivo da variante de JavaScript usada nas fun\u00e7\u00f5es do Couchbase.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">let customerId = doc.customerId;\r\nlet stmt = SELECT t.cellNumber, t.name\r\n           FROM tickets t\r\n           WHERE ANY v IN t.vips SATISFIES v == $customerId END;\r\n\r\n\/\/get the concierge (there should only be one)\r\nlet concierge = null;\r\nfor (var record of stmt) {\r\n    concierge = record;\r\n}\r\n\r\n\/\/ only proceed with notification if\r\n\/\/ the customer has a concierge\r\nif (concierge) {<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>3 - Obtenha os detalhes do VIP.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">let customer = src[customerId];<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>4 - Obtenha as credenciais do Twilio.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">let twilioCredentials = src[\"twilio::credentials\"];<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>5 - Construa uma mensagem (contendo o nome do VIP, o n\u00famero do assento e o nome do concierge). <code>dados<\/code> \u00e9 o m\u00ednimo necess\u00e1rio para usar a API do Twilio.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">let message = \"Hello '\" + concierge.name + \"'. A VIP assigned to you just checked in. '\" + customer.name + \"' will be in '\" + doc.seat + \"'\";\r\nlet from = twilioCredentials.fromNumber;\r\nlet data = \"To=\" + concierge.cellNumber + \"&amp;From=\" + from + \"&amp;Body=\" + message;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>6 - Envie uma mensagem de texto para o concierge usando a API do Twilio. <strong>A constru\u00e7\u00e3o curl ainda est\u00e1 em desenvolvimento. Esse recurso destina-se apenas a fins de desenvolvimento e n\u00e3o deve ser usado em ambientes de produ\u00e7\u00e3o.<\/strong><\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\">let url = twilioCredentials.url;\r\nlet auth = twilioCredentials.username + \": \" + twilioCredentials.password;\r\nvar result = curl(url, { \"data\": data, \"header\": [\"Content-Type: x-www-form-urlencoded\"], \"method\": \"POST\", \"auth\": auth });<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_eventing_in_action\">Eventos em a\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Agora, sempre que um documento do ticketscan for criado ou modificado, um concierge ser\u00e1 notificado em seu telefone celular. Veja a seguir um exemplo de toda a demonstra\u00e7\u00e3o, desde a digitaliza\u00e7\u00e3o do t\u00edquete at\u00e9 a notifica\u00e7\u00e3o por SMS:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/08\/11102-function-sending-text-message.gif\" alt=\"Eventing demonstration using SMS\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Nesta imagem, estou criando quatro digitaliza\u00e7\u00f5es de t\u00edquetes. O primeiro \u00e9 para um VIP, os dois seguintes s\u00e3o para os Jo\u00f5es comuns e o \u00faltimo \u00e9 para um VIP. Aparecem duas mensagens de texto. Na realidade, elas apareceriam em telefones diferentes, mas estou enviando todas as notifica\u00e7\u00f5es para um \u00fanico n\u00famero para teste. <em>Observa\u00e7\u00e3o: Estou usando <a href=\"https:\/\/www.join.me\/\">join.me<\/a> para mostrar minha tela ativa do Android lado a lado com o console).<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea estiver enfrentando problemas, a boa not\u00edcia \u00e9 que a depura\u00e7\u00e3o est\u00e1 dispon\u00edvel para o Functions no Couchbase. Voc\u00ea pode definir pontos de interrup\u00e7\u00e3o no JavaScript e percorr\u00ea-lo usando uma ferramenta como o Chrome. Para saber mais sobre isso, consulte a se\u00e7\u00e3o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/eventing\/\">Postagem de an\u00fancio de eventos<\/a>.<\/p>\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>Com essa fun\u00e7\u00e3o em execu\u00e7\u00e3o no sistema de eventos do Couchbase, cada novo escaneamento de t\u00edquetes para um VIP acionar\u00e1 uma notifica\u00e7\u00e3o por mensagem de texto. Observe que o sistema de verifica\u00e7\u00e3o de t\u00edquetes n\u00e3o precisa saber nada sobre o Twilio, desde que os dados acabem no Couchbase. Al\u00e9m disso, se <em>qualquer outro<\/em> o sistema estiver criando documentos de verifica\u00e7\u00e3o de t\u00edquetes, o SMS tamb\u00e9m ser\u00e1 acionado l\u00e1. A l\u00f3gica \u00e9 <em>pr\u00f3ximo<\/em> para os dados.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso encerra minha s\u00e9rie de postagens sobre o Cincinnati Reds (por enquanto). As outras duas postagens da s\u00e9rie foram:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/nifi-processing-flow-couchbase-server\/\">Processamento e fluxo Nifi com o servidor Couchbase<\/a> - \u00c9 assim que os Reds realmente colocar\u00e3o os dados de escaneamento de ingressos no Couchbase.<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/data-visualization-couchbase-knowi\/\">Visualiza\u00e7\u00e3o de dados com Couchbase e Knowi<\/a> - Esse \u00e9 outro caso de uso para o qual os Reds est\u00e3o pensando em usar os dados de leitura de t\u00edquetes.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Deixe um coment\u00e1rio abaixo ou encontre-me em <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a>. For\u00e7a Reds!<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Important note: This blog post contains information about a developer preview CURL function in Eventing. The CURL function will be changing in Couchbase Server 6.5, please see Using cURL with the Eventing Service: Update for more details. Eventing is a [&hellip;]<\/p>","protected":false},"author":71,"featured_media":5570,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816,2273],"tags":[2258,2133],"ppma_author":[8937],"class_list":["post-5569","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","category-eventing","tag-5-5","tag-functions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Eventing: Notification with Couchbase Functions - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Eventing is a new service available in Couchbase Server. The Cincinnati Reds are interested in using this feature to more quickly serve their VIP customers.\" \/>\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\/eventing-notification-couchbase-functions\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Eventing: Notification with Couchbase Functions\" \/>\n<meta property=\"og:description\" content=\"Eventing is a new service available in Couchbase Server. The Cincinnati Reds are interested in using this feature to more quickly serve their VIP customers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/eventing-notification-couchbase-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-06T17:05:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:39:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"1463\" \/>\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\/eventing-notification-couchbase-functions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Eventing: Notification with Couchbase Functions\",\"datePublished\":\"2018-08-06T17:05:26+00:00\",\"dateModified\":\"2025-06-14T05:39:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/\"},\"wordCount\":1094,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg\",\"keywords\":[\"5.5\",\"functions\"],\"articleSection\":[\".NET\",\"Couchbase Server\",\"Eventing\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/\",\"name\":\"Eventing: Notification with Couchbase Functions - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg\",\"datePublished\":\"2018-08-06T17:05:26+00:00\",\"dateModified\":\"2025-06-14T05:39:40+00:00\",\"description\":\"Eventing is a new service available in Couchbase Server. The Cincinnati Reds are interested in using this feature to more quickly serve their VIP customers.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg\",\"width\":2048,\"height\":1463,\"caption\":\"From https:\/\/www.nationalmuseum.af.mil\/Upcoming\/Photos\/igphoto\/2001339275\/mediaid\/2438863\/\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Eventing: Notification with Couchbase Functions\"}]},{\"@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":"Eventing: Notification with Couchbase Functions - The Couchbase Blog","description":"Eventing \u00e9 um novo servi\u00e7o dispon\u00edvel no Couchbase Server. O Cincinnati Reds est\u00e1 interessado em usar esse recurso para atender mais rapidamente seus clientes VIP.","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\/eventing-notification-couchbase-functions\/","og_locale":"pt_BR","og_type":"article","og_title":"Eventing: Notification with Couchbase Functions","og_description":"Eventing is a new service available in Couchbase Server. The Cincinnati Reds are interested in using this feature to more quickly serve their VIP customers.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/eventing-notification-couchbase-functions\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-08-06T17:05:26+00:00","article_modified_time":"2025-06-14T05:39:40+00:00","og_image":[{"width":2048,"height":1463,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.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\/eventing-notification-couchbase-functions\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Eventing: Notification with Couchbase Functions","datePublished":"2018-08-06T17:05:26+00:00","dateModified":"2025-06-14T05:39:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/"},"wordCount":1094,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg","keywords":["5.5","functions"],"articleSection":[".NET","Couchbase Server","Eventing"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/","url":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/","name":"Eventing: Notification with Couchbase Functions - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg","datePublished":"2018-08-06T17:05:26+00:00","dateModified":"2025-06-14T05:39:40+00:00","description":"Eventing \u00e9 um novo servi\u00e7o dispon\u00edvel no Couchbase Server. O Cincinnati Reds est\u00e1 interessado em usar esse recurso para atender mais rapidamente seus clientes VIP.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/111-hero-cincinnati-reds-vip.jpg","width":2048,"height":1463,"caption":"From https:\/\/www.nationalmuseum.af.mil\/Upcoming\/Photos\/igphoto\/2001339275\/mediaid\/2438863\/"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/eventing-notification-couchbase-functions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Eventing: Notification with Couchbase Functions"}]},{"@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\/5569","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=5569"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5569\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/5570"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=5569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=5569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=5569"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=5569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}