{"id":16427,"date":"2024-10-08T18:26:16","date_gmt":"2024-10-09T01:26:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=16427"},"modified":"2025-06-13T16:36:39","modified_gmt":"2025-06-13T23:36:39","slug":"ai-in-action-enhancing-and-not-replacing-jobs","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/","title":{"rendered":"AI in Action: Enhancing and Not Replacing Jobs"},"content":{"rendered":"<h2><span style=\"font-weight: 400;\">Part 1 &#8211; Building with Vonage and Couchbase to transform communication and data<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Let\u2019s imagine a paradigm shift in the way we perceive the role of AI in the workplace. Instead of AI replacing roles, what if it comes to enhance people\u2019s work in those very same roles? In other words, instead of fearing AI making jobs redundant, we use AI to improve our own workflows and make ourselves more productive.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Does that seem far-fetched? It doesn\u2019t have to be.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this two-part blog post series, we are going to discover how to take advantage of the precision and clarity of vector search to build a customer support experience that empowers support agents. The end result will be to improve their effectiveness, not to replace them.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Why focus on customer support agents? Well, because they, more often than so many other roles, spend their entire day needing to access vast amounts of knowledge across a wide variety of topics and context switch between topics quickly and efficiently. They need to do all of this while maintaining friendliness and approachability with customers who are reaching out to them often in a state of distress. Customer support agents do this work day in and day out.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Could we build an experience for them that provides them with access to useful context faster and with less effort on their part for each and every customer ticket they are working on? Yes, and that\u2019s exactly what we are going to do.<\/span><\/p>\n<hr \/>\n<p><b><i>tl;dr In case you want to skip right to the implementation, you can find a fully working example of this application on <\/i><\/b><a href=\"https:\/\/github.com\/hummusonrails\/whatsapp_support_app\"><b><i>GitHub<\/i><\/b><\/a><b><i> along with detailed README instructions.<\/i><\/b><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/part2-ai-in-action-enhancing-and-not-replacing-jobs\/\">Skip to Part 2 here<\/a>.<\/p>\n<hr \/>\n<p><span style=\"font-weight: 400;\">Here\u2019s what we are going to build together \u2013\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A Ruby on Rails application that enables customer support agents to:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Receive and reply to customers in the application dashboard via WhatsApp<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">See answers to previously resolved queries that relate to the current open ticket to provide critical context<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Mark tickets as resolved and add their resolved answer to the knowledge base for context for future customer queries<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">All of this will be built using three services:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/cloud.couchbase.com\/\"><span style=\"font-weight: 400;\">Couchbase Capella<\/span><\/a><span style=\"font-weight: 400;\">, a fully managed database as a service (DBaaS) to store user and ticket information, along with the vector embeddings representing the knowledge base of resolved solutions<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/developer.vonage.com\/en\/messages\/overview\"><span style=\"font-weight: 400;\">Vonage Messages API<\/span><\/a><span style=\"font-weight: 400;\">, a multi-channel communications API that enables bi-directional conversations on WhatsApp, SMS, Facebook Messenger and other providers<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/platform.openai.com\/docs\/guides\/embeddings\"><span style=\"font-weight: 400;\">OpenAI Embeddings API<\/span><\/a><span style=\"font-weight: 400;\">, a service from OpenAI that converts data provided into vector representations of that data to enable vector search<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Not sure what vector search and vector embeddings are? Check out <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/couchbase-vector-search-in-5-minutes\/\"><span style=\"font-weight: 400;\">this blog post<\/span><\/a><span style=\"font-weight: 400;\"> that explains it all and how to get started in 5 minutes. When you are done reading it, come back here and continue the journey!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ready to get started building? Let\u2019s do it!<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Scaffolding the Rails application<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">The first step to any new Rails application, starts with the beloved <\/span><i><span style=\"font-weight: 400;\">rails new<\/span><\/i><span style=\"font-weight: 400;\"> command in the terminal, and this project is no different.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Go ahead and initialize a new application by executing the following on your command line:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">rails new whatsapp_support_app \u2013css tailwind<\/pre>\n<p><span style=\"font-weight: 400;\">This command will create a brand new Rails application with <a href=\"https:\/\/tailwindcss.com\">TailwindCSS<\/a> installed. We will be using Tailwind for the styling of the frontend of the application.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Then, once the command has finished executing, change into the new directory and let\u2019s install the additional dependencies we will need, namely the Vonage Ruby SDK, the Couchbase Ruby ORM, and a popular Ruby OpenAI SDK:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">bundle add vonage couchbase-orm ruby-openai<\/pre>\n<p><span style=\"font-weight: 400;\">Go ahead at this point and run <\/span><i><span style=\"font-weight: 400;\">bundle install<\/span><\/i><span style=\"font-weight: 400;\"> to install these dependencies.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now, let\u2019s create the initializer for both the Vonage and OpenAI clients in our app:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">touch config\/initializers\/vonage.rb\r\ntouch config\/initializers\/openai.rb<\/pre>\n<p><span style=\"font-weight: 400;\">While we are creating files in the config directory, let\u2019s also add the configuration file where we will define our connection settings to Couchbase:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">touch config\/couchbase.yml<\/pre>\n<p><span style=\"font-weight: 400;\">Once we have created the files for the initializers, we can create the files to hold our future Models and Controllers:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">touch app\/controllers\/messages_controller.rb\r\ntouch app\/controllers\/dashboard_controller.rb\r\ntouch app\/models\/ticket.rb\r\ntouch app\/models\/user.rb\r\ntouch app\/models\/agent.rb\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">The only files left to create at this point are the frontend views, and we will create those later in the <\/span><strong>Creating the Frontend for the Application<\/strong><span style=\"font-weight: 400;\"> section.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At this point, your file structure should look something like this, also including all the standard Rails files that are not mentioned below:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">whatsapp_support_app\/\r\n\u00a0\u00a0\u00a0\u00a0app\/\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0controllers\/\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0application_controller.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages_controller.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dashboard_controller.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0models\/\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0application_record.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ticket.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0user.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent.rb\r\n\u00a0\u00a0\u00a0\u00a0config\/\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0initializers\/\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0vonage.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0openai.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0couchbase.yml\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0application.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0environment.rb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0routes.rb\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">The last bit we will add at this point is a file to hold our credentials and other confidential information we do not want to check into Git or make publicly available:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">touch .env<\/pre>\n<p><span style=\"font-weight: 400;\">With that last file, we are ready now to move on and create our Couchbase Capella account, our cluster and our bucket to hold ticket and user data.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Setting up Couchbase Capella<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Capella is a fully managed database as a service (DBaaS) brought to you by Couchbase. It offers a complete data platform to help accomplish many of your needs, from caching to full text search to big data analytics with <\/span><a href=\"https:\/\/www.couchbase.com\/products\/analytics\/\"><span style=\"font-weight: 400;\">Columnar<\/span><\/a><span style=\"font-weight: 400;\">. For this application, we are going to leverage Capella\u2019s JSON document database along with its vector search capabilities.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Each document hosted in Capella is either going to be a <\/span><b>ticket<\/b><span style=\"font-weight: 400;\"> or a <\/span><b>user<\/b>:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A <\/span><b>user<\/b><span style=\"font-weight: 400;\"> document will hold the WhatsApp phone number the user messaged on.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A <\/span><b>ticket<\/b><span style=\"font-weight: 400;\"> document will have the original query, the user ID of the user who asked the query, the status of the ticket (either <\/span><b>open<\/b><span style=\"font-weight: 400;\"> or <\/span><b>resolved<\/b><span style=\"font-weight: 400;\">), eventually a summary of the solution, and the vector embedding representing the solution.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">We are also going to create a <\/span><b>vector search index<\/b><span style=\"font-weight: 400;\"> that will enable the application to search through the embeddings hosted in the ticket documents for similarities to the ticket an agent is currently working on.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create a Capella account<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">The first step is to create a free Capella account. To do so, navigate to <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><span style=\"font-weight: 400;\">cloud.couchbase.com<\/span><\/a><span style=\"font-weight: 400;\"> and sign up with either your Google or GitHub account or create an account using an email and password combination.<\/span><\/p>\n<p><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-16409 size-large\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-1024x835.png\" alt=\"\" width=\"900\" height=\"734\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-1024x835.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-300x245.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-768x626.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-1536x1252.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-2048x1670.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/capella-cloud-dbaas-couchbase-signup-free-1320x1076.png 1320w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">That\u2019s all it takes to create an account! Now that you have your account, you can create your cluster. A cluster, in case you are unfamiliar with the terminology, is akin to a database server. Let\u2019s do it!<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create a cluster<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Capella works in a multi-cloud environment, which means you have the freedom to choose to deploy your cluster to AWS, GCP or Azure. All you need to do is click which one you prefer and Capella, behind the scenes, takes care of the rest for you.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">From the home page of your account after you log in click on the <\/span><b>+ Create Database<\/b><span style=\"font-weight: 400;\"> button in the top right corner and fill in the details, namely the name you chose for it. If you don\u2019t have a name picked out already, perhaps you <\/span><i><span style=\"font-weight: 400;\">whatsapp_support_cluster<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When you are ready go ahead and click on the final <\/span><b>Create Database<\/b><span style=\"font-weight: 400;\"> button and let Capella do the rest of the work for you.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You now have a Cluster, i.e. Database. The next step is to add a bucket to hold your data. A bucket is akin to a database table, with significant differences. Since you are working with unstructured and semi-structured JSON data, a single bucket can hold diverse types of data.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create a bucket<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Now that you are in the view in the Capella dashboard for your cluster, you will see another <\/span><b>+ Create<\/b><span style=\"font-weight: 400;\"> button in the top left corner. Once you click the button, you will have the ability to create your first Capella bucket.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-16428\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1-1024x653.png\" alt=\"\" width=\"900\" height=\"574\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1-1024x653.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1-300x191.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1-768x490.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1-1536x980.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1-1320x842.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image4-1.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Let\u2019s name the bucket <\/span><i><span style=\"font-weight: 400;\">whatsapp_support_bucket<\/span><\/i><span style=\"font-weight: 400;\"> and make sure to click on the <\/span><b>use system generated _default for scope and collection<\/b><span style=\"font-weight: 400;\"> checkbox.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now, add the bucket name to your <\/span><b>.env<\/b><span style=\"font-weight: 400;\"> file you created earlier like this:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">COUCHBASE_BUCKET=your_bucket_name<\/pre>\n<p><span style=\"font-weight: 400;\">With your bucket created, the last bit we will do at this point is create your access credentials and fetch your Capella connection string.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create access credentials<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">In order to interact with your data on Capella from your application, you need to know the connection string and create access credentials. The connection string can be found by clicking on the <\/span><b>Connect<\/b><span style=\"font-weight: 400;\"> button in the top navigation bar in the dashboard. Go ahead and add that to the <\/span><b>.env<\/b><span style=\"font-weight: 400;\"> file you created earlier in your codebase like this:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">COUCHBASE_CONNECTION_STRING=your_connection_string<\/pre>\n<p><span style=\"font-weight: 400;\">To add access credentials, you will navigate to this page in your Capella settings like shown below and click on the <\/span><b>+ Create Database Access<\/b><span style=\"font-weight: 400;\"> button. You will provide a name and password and click save. Make sure to immediately add the credentials to your <\/span><b>.env <\/b><span style=\"font-weight: 400;\">file as you won\u2019t be able to access the password again after this:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">COUCHBASE_USERNAME=your_username\r\nCOUCHBASE_PASSWORD=your_password<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-16429\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8-1024x820.png\" alt=\"\" width=\"900\" height=\"721\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8-1024x820.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8-300x240.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8-768x615.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8-1536x1230.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8-1320x1057.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image8.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">After creating your credentials, your Capella setup is just about complete! The last step is to create the vector search index, which you can follow the steps outlined<\/span> <a href=\"https:\/\/www.bengreenberg.dev\/blog\/blog_add-vector-search-to-your-astro-blog_1716508800000\"><span style=\"font-weight: 400;\">in this post<\/span><\/a><span style=\"font-weight: 400;\"> to do so.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">At this point, you are ready to move on to set up the WhatsApp API service provider that will power the conversations in the application. For our service provider, we will be using the Vonage Messages API.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Using the Vonage Messages API<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Vonage offers a suite of communications APIs that cover almost every aspect of modern day interactions, from SMS to phone calls to chatbots. The API we will be using for this application is the <\/span><b>Messages API<\/b><span style=\"font-weight: 400;\"> and it offers multi-channel communications in a single API for Facebook Messenger, WhatsApp, Viber, SMS and MMS.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We will be using it for its WhatsApp capabilities, in which you can both send and receive WhatsApp messages programmatically.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Setting up the WhatsApp functionality for production usage requires several steps from Meta, namely the creation of a WhatsApp business account. The details on what this is and the steps to do so are explained in the <\/span><a href=\"https:\/\/developer.vonage.com\/en\/messages\/concepts\/whatsapp\"><span style=\"font-weight: 400;\">Vonage documentation<\/span><\/a><span style=\"font-weight: 400;\">, and you are encouraged to read more about it there.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, just because you don\u2019t have a Meta WhatsApp business account yet, does not mean that you can\u2019t build and test out the functionality! Enter into the scene the Vonage Messages API sandbox. With the sandbox, you can authenticate your personal cell number to programmatically send and receive WhatsApp messages. This allows you to build out your application robustly while you await your Meta WhatsApp business account approval.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now that we understand a bit of the context, let\u2019s go ahead and create a Vonage APIs account.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create a Vonage account<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To create a Vonage account navigate to <a href=\"https:\/\/dashboard.vonage.com\">dashboard.vonage.com<\/a> and click on <strong>sign-up<\/strong>. It is free to create an account and to begin building with the various APIs.<\/span><\/p>\n<p><a href=\"https:\/\/dashboard.vonage.com\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-16430 size-large\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7-1024x761.png\" alt=\"\" width=\"900\" height=\"669\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7-1024x761.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7-300x223.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7-768x571.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7-1536x1141.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7-1320x981.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image7.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Now that you have your account, you\u2019re ready to set up the Messages API sandbox!<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Configure the Vonage Messages API Sandbox<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">As explained above, the sandbox is excellent for testing and prototyping your application. It allows you to send and receive messages from a preconfigured Vonage phone number and an approved personal phone number.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To configure the Vonage Messages API sandbox, you will need to send a message to the preconfigured Vonage phone number provided. The dashboard will guide you through the process by providing a QR code, a link and a direct phone number to send a message to. It will also share the exact message to send to the number. You can choose to use any of the methods to send the message.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-16431\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3-656x1024.png\" alt=\"\" width=\"656\" height=\"1024\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3-656x1024.png 656w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3-192x300.png 192w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3-768x1199.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3-984x1536.png 984w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3-300x469.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image1-3.png 1280w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Once you send the message, you will have successfully configured your personal phone number to receive and reply to messages from the Vonage Messages API sandbox.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You will notice the space in the sandbox setup to provide URLs for both Inbound and Status webhook messages. The way in which you receive new WhatsApp messages from the API is via a webhook, so you need to have an externally accessible URL to provide for the webhook to access. There are popular tools available that can expose your <\/span><b>localhost<\/b><span style=\"font-weight: 400;\"> environment to the Internet and provide you with an external URL, amongst them is ngrok.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Using ngrok is as straightforward as installing it on your machine and then running <\/span><i><span style=\"font-weight: 400;\">ngrok http 3000<\/span><\/i><span style=\"font-weight: 400;\"> in a separate terminal window. The command takes two arguments in this example:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The service to expose \u2013 <\/span><b>http<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The port the localhost server is running on \u2013 <\/span><b>3000<\/b><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Follow the <\/span><a href=\"https:\/\/ngrok.com\/docs\/getting-started\/\"><span style=\"font-weight: 400;\">Quickstart Guide<\/span><\/a><span style=\"font-weight: 400;\"> from ngrok with instructions on how to install ngrok on your machine depending on if you are using Mac, Linux or Windows.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Define the Vonage environment variables<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">As you have been adding your Capella details to your <\/span><i><span style=\"font-weight: 400;\">.env <\/span><\/i><span style=\"font-weight: 400;\">file, you will now add your Vonage details to the same file. Namely, you need to add your API key and secret and the preconfigured Vonage phone number provided to you in the sandbox.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Go ahead and open the <\/span><i><span style=\"font-weight: 400;\">.env <\/span><\/i><span style=\"font-weight: 400;\">file and add the following:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true\">VONAGE_API_KEY=your_vonage_api_key\r\nVONAGE_API_SECRET=your_vonage_api_secret\r\nVONAGE_FROM_NUMBER=your_vonage_from_number\r\n<\/pre>\n<p><span style=\"font-weight: 400;\">Now that you have set up both Capella and Vonage, the last step in initial setup is to create an OpenAI API account and add your OpenAI API key to your <\/span><i><span style=\"font-weight: 400;\">.env<\/span><\/i><span style=\"font-weight: 400;\"> file.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Getting started with the OpenAI Embeddings API<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Before we create an OpenAI account, let\u2019s take a moment to understand why we are using OpenAI and what an embedding is. Full disclosure, this is not meant to be a comprehensive look at vector embeddings and what they do. Rather, consider this just a brief overview to equip you to build the application.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A vector embedding is an array of numbers that mathematically represents a piece of data. That data could be text, an image, audio or a video. There are different algorithms that generate these embeddings, each designed to capture various aspects of the data in a way that makes it useful for machine learning models.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, in the context of text, an embedding captures the semantic meaning of words or sentences, allowing the AI to understand relationships between concepts beyond simple keyword matching. These embeddings become the building blocks for tasks like search, classification, and recommendation systems, as they enable machines to process and compare complex data efficiently. By using OpenAI&#8217;s powerful models, we can generate high-quality embeddings that will allow our application to perform advanced functions such as content similarity matching, which is exactly what it is meant to do when it searches for previously resolved answers to support agents in their current tickets.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now, let\u2019s proceed with setting up your OpenAI account so we can start building.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create an OpenAI account<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">To create an account, head over to <a href=\"https:\/\/platform.openai.com\">platform.openai.com<\/a> and sign up with your Google, Microsoft or Apple credentials, or create an account using an email and password combination.<\/span><\/p>\n<p><a href=\"https:\/\/platform.openai.com\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-16432\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image2-1-744x1024.png\" alt=\"\" width=\"502\" height=\"690\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image2-1-744x1024.png 744w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image2-1-218x300.png 218w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image2-1-768x1056.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image2-1-300x413.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image2-1.png 1028w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Now that you have your account, all you need to do is create and copy your API key.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Create OpenAI API key<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Once you have an account, you can navigate to <\/span><a href=\"https:\/\/platform.openai.com\/api-keys\"><span style=\"font-weight: 400;\">platform.openai.com\/api-keys<\/span><\/a><span style=\"font-weight: 400;\"> and create a new API key by clicking on the <\/span><b>+ Create new secret key<\/b><span style=\"font-weight: 400;\"> button on the top right part of the page.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><a href=\"https:\/\/platform.openai.com\/api-keys\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-16433 size-large\" style=\"border: 1px solid black;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1-1024x554.png\" alt=\"\" width=\"900\" height=\"487\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1-1024x554.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1-300x162.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1-768x415.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1-1536x831.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1-1320x714.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/image5-1.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Similar to your other credentials, you need to immediately save the key as you will not be able to view it again in the dashboard after this moment. As such, add it to the <\/span><i><span style=\"font-weight: 400;\">.env<\/span><\/i><span style=\"font-weight: 400;\"> file like so:<\/span><\/p>\n<pre class=\"nums:false lang:default decode:true \">OPENAI_API_KEY=your_api_key<\/pre>\n<p><span style=\"font-weight: 400;\">That\u2019s it! At this point, you have all your external services defined and set up. You are now ready to build your application. Let\u2019s get going!<\/span><\/p>\n<h3>To be continued&#8230;<\/h3>\n<p><span style=\"font-weight: 400;\">In the <a href=\"https:\/\/www.couchbase.com\/blog\/part2-ai-in-action-enhancing-and-not-replacing-jobs\/\">second part of this two-part series<\/a>, we will build the application business logic and run our application for the first time. Make sure to check out <a href=\"https:\/\/www.couchbase.com\/blog\/part2-ai-in-action-enhancing-and-not-replacing-jobs\/\">part two<\/a> to continue your journey.<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Part 1 &#8211; Building with Vonage and Couchbase to transform communication and data Let\u2019s imagine a paradigm shift in the way we perceive the role of AI in the workplace. Instead of AI replacing roles, what if it comes to [&hellip;]<\/p>\n","protected":false},"author":85356,"featured_media":16435,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[10122,1815,2225,9973,9407,2389,9937],"tags":[9974,9964,10039],"ppma_author":[9985],"class_list":["post-16427","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artificial-intelligence-ai","category-best-practices-and-tutorials","category-cloud","category-generative-ai-genai","category-ruby","category-solutions","category-vector-search","tag-genai","tag-openai","tag-vonage"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>AI in Action: Enhancing and Not Replacing Jobs - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Build a Ruby on Rails app integrating Vonage, Couchbase, and OpenAI for customer support, improving agent workflows with vector search and WhatsApp.\" \/>\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\/ai-in-action-enhancing-and-not-replacing-jobs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AI in Action: Enhancing and Not Replacing Jobs\" \/>\n<meta property=\"og:description\" content=\"Build a Ruby on Rails app integrating Vonage, Couchbase, and OpenAI for customer support, improving agent workflows with vector search and WhatsApp.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-09T01:26:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T23:36:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ben Greenberg, Senior Developer Evangelist\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ben Greenberg, Senior Developer Evangelist\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/\"},\"author\":{\"name\":\"Ben Greenberg, Senior Developer Evangelist\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d\"},\"headline\":\"AI in Action: Enhancing and Not Replacing Jobs\",\"datePublished\":\"2024-10-09T01:26:16+00:00\",\"dateModified\":\"2025-06-13T23:36:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/\"},\"wordCount\":2563,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png\",\"keywords\":[\"GenAI\",\"openai\",\"vonage\"],\"articleSection\":[\"Artificial Intelligence (AI)\",\"Best Practices and Tutorials\",\"Couchbase Capella\",\"Generative AI (GenAI)\",\"Ruby\",\"Solutions\",\"Vector Search\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/\",\"name\":\"AI in Action: Enhancing and Not Replacing Jobs - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png\",\"datePublished\":\"2024-10-09T01:26:16+00:00\",\"dateModified\":\"2025-06-13T23:36:39+00:00\",\"description\":\"Build a Ruby on Rails app integrating Vonage, Couchbase, and OpenAI for customer support, improving agent workflows with vector search and WhatsApp.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI in Action: Enhancing and Not Replacing Jobs\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\/48efa1524aec97312d92f65a270c255d\",\"name\":\"Ben Greenberg, Senior Developer Evangelist\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/c9bda12524045d12a5878a2ef3fbe0de\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg\",\"caption\":\"Ben Greenberg, Senior Developer Evangelist\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/bengreenberg\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"AI in Action: Enhancing and Not Replacing Jobs - The Couchbase Blog","description":"Build a Ruby on Rails app integrating Vonage, Couchbase, and OpenAI for customer support, improving agent workflows with vector search and WhatsApp.","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\/ai-in-action-enhancing-and-not-replacing-jobs\/","og_locale":"en_US","og_type":"article","og_title":"AI in Action: Enhancing and Not Replacing Jobs","og_description":"Build a Ruby on Rails app integrating Vonage, Couchbase, and OpenAI for customer support, improving agent workflows with vector search and WhatsApp.","og_url":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/","og_site_name":"The Couchbase Blog","article_published_time":"2024-10-09T01:26:16+00:00","article_modified_time":"2025-06-13T23:36:39+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png","type":"image\/png"}],"author":"Ben Greenberg, Senior Developer Evangelist","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ben Greenberg, Senior Developer Evangelist","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/"},"author":{"name":"Ben Greenberg, Senior Developer Evangelist","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/48efa1524aec97312d92f65a270c255d"},"headline":"AI in Action: Enhancing and Not Replacing Jobs","datePublished":"2024-10-09T01:26:16+00:00","dateModified":"2025-06-13T23:36:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/"},"wordCount":2563,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png","keywords":["GenAI","openai","vonage"],"articleSection":["Artificial Intelligence (AI)","Best Practices and Tutorials","Couchbase Capella","Generative AI (GenAI)","Ruby","Solutions","Vector Search"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/","url":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/","name":"AI in Action: Enhancing and Not Replacing Jobs - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png","datePublished":"2024-10-09T01:26:16+00:00","dateModified":"2025-06-13T23:36:39+00:00","description":"Build a Ruby on Rails app integrating Vonage, Couchbase, and OpenAI for customer support, improving agent workflows with vector search and WhatsApp.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/10\/blog-vonage-whats-app-1.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/ai-in-action-enhancing-and-not-replacing-jobs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AI in Action: Enhancing and Not Replacing Jobs"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/48efa1524aec97312d92f65a270c255d","name":"Ben Greenberg, Senior Developer Evangelist","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/c9bda12524045d12a5878a2ef3fbe0de","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","caption":"Ben Greenberg, Senior Developer Evangelist"},"url":"https:\/\/www.couchbase.com\/blog\/author\/bengreenberg\/"}]}},"authors":[{"term_id":9985,"user_id":85356,"is_guest":0,"slug":"bengreenberg","display_name":"Ben Greenberg, Senior Developer Evangelist","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/06\/T024FJS4M-U075H3NTJUR-b4c321d902e2-512.jpeg"},"author_category":"","last_name":"Greenberg, Senior Developer Evangelist","first_name":"Ben","job_title":"Senior Developer Evangelist","user_url":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/16427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/85356"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=16427"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/16427\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/16435"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=16427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=16427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=16427"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=16427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}