<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dhruv Rajkotia</title>
    <description>The latest articles on DEV Community by Dhruv Rajkotia (@dhruv_rajkotia).</description>
    <link>https://dev.to/dhruv_rajkotia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F717581%2Fbb2612cc-9d57-449e-a4b3-85c2b316bd2f.jpg</url>
      <title>DEV Community: Dhruv Rajkotia</title>
      <link>https://dev.to/dhruv_rajkotia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhruv_rajkotia"/>
    <language>en</language>
    <item>
      <title>RGB color picker using HTML &amp; Bootstrap</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Sun, 03 Apr 2022 07:45:08 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/rgb-color-picker-using-html-bootstrap-3jn1</link>
      <guid>https://dev.to/dhruv_rajkotia/rgb-color-picker-using-html-bootstrap-3jn1</guid>
      <description>&lt;p&gt;Today, I have created a RGB color picker using the HTML and Bootstrap. It was kind of fun and completed this within the 10 minutes of the development. &lt;/p&gt;

&lt;p&gt;Here is the LIVE &lt;a href="https://ephemeral-starship-845e9e.netlify.app/"&gt;DEMO&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technologies that used to build this demo
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS (Inline)&lt;/li&gt;
&lt;li&gt;Bootstrap 5&lt;/li&gt;
&lt;li&gt;Javascript(A few lines)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Code snippet
&lt;/h2&gt;

&lt;p&gt;Here is the link of the code snippet if you wanted to have a look at the code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;RGB Color Chooser&amp;lt;/title&amp;gt;
    &amp;lt;!-- CSS only --&amp;gt;
    &amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body style="background-color: black;"&amp;gt;
    &amp;lt;header&amp;gt;
        &amp;lt;h1 class="text-center my-4 font-monospace text-white"&amp;gt;RGB COLOR PICKER&amp;lt;/h1&amp;gt;
    &amp;lt;/header&amp;gt;
    &amp;lt;div class="container"&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-4"&amp;gt;&amp;lt;/div&amp;gt;
            &amp;lt;div id="result" class="shadow rounded col-md-4 d-flex justify-content-center p-5 my-5" style="background-color: rgb(127,127,127);"&amp;gt;

            &amp;lt;/div&amp;gt;
            &amp;lt;div class="col-md-4"&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-4 col-lg-4 p-5"&amp;gt;
                &amp;lt;p class="text-center text-white"&amp;gt;RED&amp;lt;/p&amp;gt;
                &amp;lt;input type="range" class="form-range" min="0" max="255" step="1" id="customRange1" oninput='OutputIdRed.value = customRange1.value' onchange="changebackground()"&amp;gt;
                &amp;lt;output class="text-center text-white" style="display: block;" id="OutputIdRed"&amp;gt;127&amp;lt;/output&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class="col-md-4 col-lg-4 p-5"&amp;gt;
                &amp;lt;p class="text-center text-white"&amp;gt;GREEN&amp;lt;/p&amp;gt;
                &amp;lt;input type="range" class="form-range" min="0" max="255" step="1" id="customRange2" oninput='OutputIdGreen.value = customRange2.value' onchange="changebackground()"&amp;gt;
                &amp;lt;output class="text-center text-white" style="display: block;" id="OutputIdGreen"&amp;gt;127&amp;lt;/output&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class="col-md-4 col-lg-4 p-5"&amp;gt;
                &amp;lt;p class="text-center text-white"&amp;gt;BLUE&amp;lt;/p&amp;gt;
                &amp;lt;input type="range" class="form-range" min="0" max="255" step="1" id="customRange3" oninput='OutputIdBlue.value = customRange3.value' onchange="changebackground()"&amp;gt;
                &amp;lt;output class="text-center text-white" style="display: block;" id="OutputIdBlue"&amp;gt;127&amp;lt;/output&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;script&amp;gt;

        function changebackground(){
            document.getElementById('result').style.backgroundColor = 'rgb(' + document.getElementById("OutputIdRed").value + ',' + document.getElementById("OutputIdGreen").value + ',' + document.getElementById("OutputIdBlue").value + ')';
        }
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Points to learn with this demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bootstraps Classes&lt;/li&gt;
&lt;li&gt;Display Scroll value without using the javascript. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So If you have checked the code,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;input type="range" class="form-range" min="0" max="255" step="1" id="customRange1" oninput='OutputIdRed.value = customRange1.value' onchange="changebackground()"&amp;gt;
&amp;lt;output class="text-center text-white" style="display: block;" id="OutputIdRed"&amp;gt;127&amp;lt;/output&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So here we are showing the scroll value that user has selected. So for that we have used the &lt;strong&gt;oninput&lt;/strong&gt; field and set the user selected value in the &lt;strong&gt;output&lt;/strong&gt; field. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Today, We have created a small demo where user can see the actual color based on the RGB values. We have created that demo using the HTML and Bootstrap. Also we have covered the key points that we can learn from this small demo which has developed within the 10 minutes😀. Hope you liked it and learn something new today. &lt;/p&gt;

&lt;p&gt;I'm also posting some useful content on twitter. So You guys can follow me there. &lt;a href="https://twitter.com/dhruv_rajkotia"&gt;Link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
    </item>
    <item>
      <title>TOP 5 NLP Platforms for AI Chatbots</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Fri, 01 Apr 2022 04:26:55 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/top-5-nlp-platforms-for-ai-chatbots-3292</link>
      <guid>https://dev.to/dhruv_rajkotia/top-5-nlp-platforms-for-ai-chatbots-3292</guid>
      <description>&lt;p&gt;Currently, we are living in the world where we regularly dealing with the chatbots/messaging apps like WhatsApp, Instagram etc. Now a days a lot of businesses uses the chatbots for there business marketing through this messaging platforms like WhatsApp, Instagram, Facebook etc. Isn't it great like if you wanted to book an appointment for the doctor visit which can be done via a simple bot. Sound interesting right?&lt;/p&gt;

&lt;p&gt;So today we are discussing about What is a Chatbot and Top 5 NLP platforms which helps to create a most intelligent AI chatbots to make human life better.  &lt;/p&gt;

&lt;p&gt;Let's first talk about &lt;strong&gt;What is Chatbot?&lt;/strong&gt;&lt;br&gt;
A chatbot is a computer program that simulates and processes human conversation (either written or spoken), allowing humans to interact with digital devices as if they were communicating with a real person.&lt;/p&gt;

&lt;p&gt;So Now questions arise 🧐, How those bots are developing. So most intelligent chatbots are built with NLP and NLU technology.&lt;/p&gt;

&lt;h3&gt;
  
  
  NLP (Natural Language Processing)
&lt;/h3&gt;

&lt;p&gt;NLP or Natural Language Processing consists in the processing of natural language by machines.&lt;/p&gt;

&lt;h3&gt;
  
  
  NLU (Natural Language Understanding)
&lt;/h3&gt;

&lt;p&gt;NLU is a sub-component of NLP which consists in this case of adding statistical learning (Machine Learning). The NLU intervenes to identify the intentions and meanings of natural language, to basically understand what the user is saying. In order to achieve this, NLU algorithms use NLP.&lt;/p&gt;

&lt;p&gt;So for building the chatbots some companies has developed a low code/no-code NLP platform for developer to build a great chatbot. So let's talk about what is NLP platform?&lt;/p&gt;

&lt;h3&gt;
  
  
  NLP Platform
&lt;/h3&gt;

&lt;p&gt;A NLP platform is a SaaS (software as a service) that proposes NLP algorithms to integrate conversation interfaces with chatbots or other types of applications.&lt;/p&gt;

&lt;p&gt;Hope you guys are with me till yet, Now probably you are thinking how many NLP platforms are in the market and which platforms are leading the chatbot market. So here you go 😀.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top 5 NLP platforms for your chatbot
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Dialogflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dialogflow is developed by the Google. So the main advantages of this NLP platform are. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Different pricing including a freemium version&lt;br&gt;
Channel specific answers are customisable to each of your channels can display the most suitable response.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many channel integrations are available (ie: Messenger, Twilio, Slack)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In build conversation history and analytics based on the user's conversations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multi-lingual supports&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;System as well as custom entity to capture the required information from the users. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create custom dashboards for analytics using the Big-query and data-studio based on the Conversation logs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A test interface is available with the following text features: utterance, engine responses, contexts, intent, action, detected entities, values, JSON streams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For more info: &lt;a href="https://cloud.google.com/dialogflow/docs"&gt;Dialogflow&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Witai&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Witai is developed by the Facebook. So the main advantages of this NLP platform are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No difference between intent and entity as all actions are intents&lt;/li&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Logs of past conversation history in the form of a chat dialogue.&lt;/li&gt;
&lt;li&gt;Management of a very large number of languages (multi language) 58 languages&lt;/li&gt;
&lt;li&gt;For more info: &lt;a href="https://wit.ai/"&gt;Witai&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. IBM Watson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IBM Watson is developed by the IBM. So the main advantages of this NLP platform are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different pricing starting with freemium&lt;/li&gt;
&lt;li&gt;Automated named entity recognition&lt;/li&gt;
&lt;li&gt;Full query history&lt;/li&gt;
&lt;li&gt;Multilanguage on the most used languages in the world&lt;/li&gt;
&lt;li&gt;For more info: &lt;a href="https://www.ibm.com/in-en/watson"&gt;IBM Watson&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Rasa NLP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rasa NLP is developed by the Rasa Enterprise. So the main advantages of this NLP platform are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open-source&lt;/li&gt;
&lt;li&gt;Requires programming knowledge&lt;/li&gt;
&lt;li&gt;Can be installed on premise as well as used as Saas
Specialized in customer experience&lt;/li&gt;
&lt;li&gt;For more info: &lt;a href="https://rasa.com/"&gt;Rasa NLP&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Amazon Lex&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Lex is developed by the Amazon. So the main advantages of this NLP platform are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tagging of model versions, intents or entities.&lt;/li&gt;
&lt;li&gt;Tagging of entities in intents in an explicit way by indicating slots.&lt;/li&gt;
&lt;li&gt;Evolutive pricing starting from freemium.&lt;/li&gt;
&lt;li&gt;Supports 6 different languages&lt;/li&gt;
&lt;li&gt;For more info: &lt;a href="https://aws.amazon.com/lex/"&gt;Amazon Lex&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Today we have covered What is chatbot and Top 5 low code NLP tools that can help us to build a great AI chatbots(🤖) and make human life much better(🤩). &lt;/p&gt;

&lt;p&gt;Please follow me on &lt;a href="https://twitter.com/dhruv_rajkotia"&gt;Twitter&lt;/a&gt; for more updates regarding the programming cool stuff😄. Have a great day.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatbot</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Which Python Framework is fastest?  </title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Thu, 30 Dec 2021 12:29:26 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/which-python-framework-is-fastest-2fgo</link>
      <guid>https://dev.to/dhruv_rajkotia/which-python-framework-is-fastest-2fgo</guid>
      <description>&lt;p&gt;Now a days, we have seen an usage of the web development is increased a lot &amp;amp; along with that Python language is became the world's 2nd most popular programming language based on it's usage. Python has grown to become one of the most popular server-side languages on the Internet. According to W3Techs, it is used by more high-traffic sites than ColdFusion, PHP, ASP.NET And Java. Even Tech giants like Google, Facebook, Netflix, Microsoft all have started using the Python as a server side language for their applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrgmm2gmhpflcu62g1hs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrgmm2gmhpflcu62g1hs.gif" alt="Image description"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Today, there is a wide variety of Python frameworks that make creating web applications much easier. These frameworks bring together the modules and packages that allow you to build applications quickly, without the need to take care of involved details, like sockets and protocols, all in one place. &lt;/p&gt;

&lt;p&gt;Top Python Frameworks&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;CherryPy&lt;/li&gt;
&lt;li&gt;Bottle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To know more Python frameworks visit &lt;a href="https://www.upgrad.com/blog/top-python-framework-for-web-development/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now our questions arise, which python framework is fastest among all the python frameworks. Based on the &lt;a href="https://www.techempower.com/benchmarks/#section=test&amp;amp;runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&amp;amp;hw=ph&amp;amp;test=query&amp;amp;l=v2qiv3-db&amp;amp;a=2" rel="noopener noreferrer"&gt;Techempower&lt;/a&gt; listing, Fastest Python Framework is "&lt;strong&gt;FastAPI&lt;/strong&gt;". &lt;/p&gt;

&lt;p&gt;FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.&lt;/p&gt;

&lt;p&gt;The key features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast: Very high performance, on par with NodeJS and Go. One of the fastest Python frameworks available.&lt;/li&gt;
&lt;li&gt;Fast to code: Increase the speed to develop features by about 200% to 300%. *&lt;/li&gt;
&lt;li&gt;Fewer bugs: Reduce about 40% of human (developer) induced errors. *&lt;/li&gt;
&lt;li&gt;Intuitive: Great editor support. Completion everywhere. Less time debugging.&lt;/li&gt;
&lt;li&gt;Easy: Designed to be easy to use and learn. Less time reading docs.&lt;/li&gt;
&lt;li&gt;Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.&lt;/li&gt;
&lt;li&gt;Robust: Get production-ready code. With automatic interactive documentation.&lt;/li&gt;
&lt;li&gt;Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can check the full documentation &lt;a href="https://fastapi.tiangolo.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I do recommend to check the documentation and use this framework for one of your microservice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br&gt;
As there are so many Python frameworks available in the market, we first need to identify which framework we should use to build our web applications. So we need to identify which Python framework is best, easy and fast. Python FastAPI is one of the fastest and come up with so many good features which reduce the development efforts. So I would highly recommend to use this framework for one of your next web services. Hope you liked it. Have a Great Day. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frh594ku9d2j4ua1ls3nu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frh594ku9d2j4ua1ls3nu.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to get rid of code formatting</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Sat, 25 Dec 2021 08:31:06 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/how-to-get-rid-of-code-formatting-5794</link>
      <guid>https://dev.to/dhruv_rajkotia/how-to-get-rid-of-code-formatting-5794</guid>
      <description>&lt;p&gt;As a Developer, We used to be in the situation to format the code after writing it. It became very frustrating when we have written the tons of lines of code and then we need to format it. So Isn't it better if we use some IDE extension to solve our issue🤪. Yes, Correct in this blog we are going to discuss one of the best formatting extension for VS Code that I'm using it regularly. It's &lt;strong&gt;Prettier&lt;/strong&gt; Extension. I'm sure you guys gonna loved it once start using it :). &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Prettier?
&lt;/h2&gt;

&lt;p&gt;Prettier is an opinionated code formatter with support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript (including experimental features)&lt;/li&gt;
&lt;li&gt;JSX&lt;/li&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;li&gt;Vue&lt;/li&gt;
&lt;li&gt;Flow&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;CSS, Less, and SCSS&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;GraphQL&lt;/li&gt;
&lt;li&gt;Markdown, including GFM and MDX&lt;/li&gt;
&lt;li&gt;YAML&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benefits Of Using Prettier
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Code consistency across all the files that you have worked&lt;/li&gt;
&lt;li&gt;Easily format the old code base if you are working on any new features with the same file&lt;/li&gt;
&lt;li&gt;Prettier support the pre-commit Hook which can re-format your files that are marked as &lt;strong&gt;staged&lt;/strong&gt;. &lt;a href="https://prettier.io/docs/en/precommit.html"&gt;Ref&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Easy to adopt &lt;/li&gt;
&lt;li&gt;Reduce overall development time&lt;/li&gt;
&lt;li&gt;Prettier provide functionality to ignore some of the files that we don't want to format.&lt;/li&gt;
&lt;li&gt;It reminds me of how Steve Jobs used to wear the same clothes every day because he has a million decisions to make and he didn’t want to be bothered to make trivial ones like picking out clothes. I think Prettier is like that.😃&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to install in VS Code
&lt;/h2&gt;

&lt;p&gt;As I'm mostly using the VS Code so I'll take VS Code IDE example for explaining the setup of the prettier extension. You can check other IDE setup &lt;a href="https://prettier.io/docs/en/editors.html"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-1:&lt;/strong&gt; Open Visual Code Editor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-2:&lt;/strong&gt; Go to Extension tab and search for the Prettier&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pGXiNjT5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r2f2dsdli2euwwppzres.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pGXiNjT5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r2f2dsdli2euwwppzres.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-3:&lt;/strong&gt; Install Extension. (It may takes few seconds 😉)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o-tclin3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92asjrr5grzkgccyqtsx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o-tclin3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92asjrr5grzkgccyqtsx.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-4:&lt;/strong&gt; Go to settings or use the command (Ctr + "," or Command + "," (mac users 😏))&lt;br&gt;
    In this step we are going to configure to format code when we save the file. You may find the below screen. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NLm79QKt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ufv1ddzh0ioqnzqyign.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NLm79QKt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ufv1ddzh0ioqnzqyign.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perform the below operations: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;strong&gt;Prettier-Code formatter&lt;/strong&gt; as Default Formatter (Take reference from above screenshot)&lt;/li&gt;
&lt;li&gt;Enabled Format On Save option&lt;/li&gt;
&lt;li&gt;There are some other options if you want then you can enabled it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step-5:&lt;/strong&gt; Now let's test it.&lt;br&gt;
Now let's add some extra space like below code. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SFek92b2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/darowxbfxj69fpnizl6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SFek92b2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/darowxbfxj69fpnizl6w.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you save the file then it'll automatically remove the extra spaces and format the code of that file. Hope you see the magic 😄.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--38UZZYGH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jyejma591uxhs0byu8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--38UZZYGH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jyejma591uxhs0byu8h.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignore certain files and folder completely Feature&lt;/strong&gt;&lt;br&gt;
We can achieve it using the 2 methods&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use .prettierignore to ignore (i.e. not reformat) certain files and folders completely.
To exclude files from formatting, create a .prettierignore file in the root of your project. .prettierignore uses &lt;a href="https://git-scm.com/docs/gitignore#_pattern_format"&gt;gitignore syntax&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;# Ignore all HTML files:&lt;br&gt;
*.html&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Use “prettier-ignore” comments to ignore parts of files.
Here we can add the comment above the code lines to ignore the parts of the file. It's normal like a comments based on the language. for more info check &lt;a href="https://prettier.io/docs/en/ignore.html"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more info you can check the below links regarding the features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://prettier.io/docs/en/index.html"&gt;Prettier Official Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"&gt;Visual Studio Market place &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Today, we have covered how to add the &lt;strong&gt;Prettier&lt;/strong&gt; extension to our IDE for getting rid of code formatting and reduce the development time for most used programming languages. I have been using it for a long time and I really liked it. Once you start using it you'll definitely liked it. Hope you learn something new today😀.&lt;/p&gt;

&lt;p&gt;Please follow me on &lt;a href="https://twitter.com/dhruv_rajkotia"&gt;Twitter&lt;/a&gt; for more updates regarding the programming cool stuff😄. Have a great day.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Make Cloud Storage Objects Publicly Accessible</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Wed, 15 Dec 2021 06:17:33 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/make-cloud-storage-objects-publicly-accessible-186o</link>
      <guid>https://dev.to/dhruv_rajkotia/make-cloud-storage-objects-publicly-accessible-186o</guid>
      <description>&lt;p&gt;Recently, I'm working on the website development and I wanted to store some of my images in the cloud so that I can easily access those images using the public link.😄&lt;/p&gt;

&lt;p&gt;So I thought🤔 to go with the google cloud services for the same, But by default the public access of the GCP storage objects is disabled in the Cloud Storage services. To access using the public URL we need to perform some steps. So today we are going to discuss about the same like how we can enabled the public access URL for cloud storage objects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Step 1: Create GCP storage bucket&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;First of all go to &lt;a href="https://console.cloud.google.com/"&gt;https://console.cloud.google.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Search Cloud storage and select the service from suggestions&lt;/li&gt;
&lt;li&gt;Click on the Create Bucket option
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YhE0tQ4B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyos732z3mr2huyiapci.png" alt="Image description" width="880" height="434"&gt; &lt;/li&gt;
&lt;li&gt;Provide name of your bucket
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wX1ERnwY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o161dx1h1266c1i8xluu.png" alt="Image description" width="880" height="434"&gt; &lt;/li&gt;
&lt;li&gt;Click Continue and select the region and location based on your requirement. For me It's Multi-region &amp;amp; Asia&lt;/li&gt;
&lt;li&gt;Then Click continue and select the default storage class for your data. I'll choose standard as I need the frequent access to my data.&lt;/li&gt;
&lt;li&gt;For the next step we need to choose how to control access to objects option which is basically an access mechanism for the bucket's object.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;We have 2 options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uniform: Means that access mechanism will be at the bucket level so all the objects of the bucket will have a same access mechanism&lt;/li&gt;
&lt;li&gt;Fine-grained: Here we can manage access at the object level so if we have a requirements like some object can be accessible and some of them are not then we can select this one.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'll choose the first option as I want the access management at the bucket level so I can easily manage of my all the objects access management. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Last step for the bucket creation is Choose how to protect object data. Let's keep it as a none for now as we don't have any specific requirement regarding the protect object data. &lt;/li&gt;
&lt;li&gt;Click on the create button, So now your bucket will be created.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Step 2: Upload the objects/data that you want to access publicly&lt;br&gt;
Now the next steps is to upload the objects/data. So that we can make it public and use it further in our applications/website based on our requirements. &lt;/p&gt;

&lt;p&gt;Step 3: Check the object configurations&lt;br&gt;
Now let's first check the object configuration and check how we can identify that the object is publicly available or not. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you click on the object configuration then you may find the below screen. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rW2RJSCx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85xrw9bl3yfq1rjwe8t7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rW2RJSCx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85xrw9bl3yfq1rjwe8t7.png" alt="Image description" width="880" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here if you check &lt;strong&gt;Public URL&lt;/strong&gt; option, which has &lt;strong&gt;Not applicable&lt;/strong&gt; as a value. So it means that this object can only be access by those users who has the access to the cloud bucket which you can check on IAM. So this object will not be publicly accessible. So Now let's move to the final step for how we can make that object publicly accessible. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Step 4: Make Object publicly accessible&lt;br&gt;
Now let's go to the cloud bucket main page. Click on the browser in the left panel of the GCP console and select the bucket that you have created. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You probably on the below screen. (May be our bucket name and regions will be different 😀) &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1DM1KW1F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ceti9srdayej3nulcoyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1DM1KW1F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ceti9srdayej3nulcoyp.png" alt="Image description" width="880" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's go to the &lt;strong&gt;Permission&lt;/strong&gt; tab. Click on the Add permission button.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2k3ddm90--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/han4hludyh6xi1h7he2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2k3ddm90--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/han4hludyh6xi1h7he2m.png" alt="Image description" width="880" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Provide New principals as a &lt;strong&gt;allUsers&lt;/strong&gt; and Role as a "Storage Legacy Object Reader" &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RPeearj6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iimcljrxs7r3c3tapszh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RPeearj6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iimcljrxs7r3c3tapszh.png" alt="Image description" width="880" height="442"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click on the Save button which leads to open the new popup for confirmation. Select the &lt;strong&gt;Allow Public Access&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Congratulations, now you have enabled the public access to your buckets which means that all the objects in that bucket can be publicly accessible.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Step 5: Test the accessibility of the Object&lt;br&gt;
Now let's go to the object configuration and check the public URL field. Now we have a link associate with the public URL field which is our publicly accessible link. Using that link we can able to access the object publicly. 🤟&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z1U82dFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pzf1ayhppu3dp4bd9zmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z1U82dFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pzf1ayhppu3dp4bd9zmr.png" alt="Image description" width="880" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. Congratulations now you know that how to make cloud storage objects publicly accessible.&lt;/p&gt;

&lt;p&gt;Hope you liked it 🤞. Please &lt;a href="https://twitter.com/dhruv_rajkotia"&gt;Follow&lt;/a&gt; me on twitter for more updates regarding my blogs. Have a great day :)😉.&lt;/p&gt;

</description>
      <category>cloudskills</category>
      <category>cloud</category>
      <category>gcp</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Automation Script for the Flight Searching</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Sat, 13 Nov 2021 08:27:46 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/automation-script-for-the-flight-searching-36g1</link>
      <guid>https://dev.to/dhruv_rajkotia/automation-script-for-the-flight-searching-36g1</guid>
      <description>&lt;p&gt;How's it going guys😀, Today I wanted to share you how to write an automation script for any website. for this example I'm going to use the example of the Google Flight(&lt;a href="https://www.google.com/travel/flights" rel="noopener noreferrer"&gt;https://www.google.com/travel/flights&lt;/a&gt;). &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Download the latest chrome driver
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://chromedriver.storage.googleapis.com/index.html?path=95.0.4638.69/" rel="noopener noreferrer"&gt;https://chromedriver.storage.googleapis.com/index.html?path=95.0.4638.69/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download the chrome driver based on your OS(I'm using Windows💻)&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Clone repository and setup virtual env
&lt;/h2&gt;

&lt;p&gt;Clone repo: &lt;a href="https://github.com/dhruvrajkotia/automation_scripts" rel="noopener noreferrer"&gt;https://github.com/dhruvrajkotia/automation_scripts&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;git clone &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:dhruvrajkotia/automation_scripts.git&lt;/li&gt;
&lt;li&gt;cd automation_scripts&lt;/li&gt;
&lt;li&gt;python -m venv  (I'm using Python 3.9)&lt;/li&gt;
&lt;li&gt;pip install -r requirements.txt (Install all requirements)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Put your chrome driver in the chrome_driver directory in the project. &lt;/p&gt;

&lt;p&gt;Great👏, You have setup the Project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Run Python Script
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;python google_flights_automation_script.py&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can see that one new browser window will shown up and search for the flight based on the parameters that we have provided in the script. &lt;/p&gt;

&lt;p&gt;Now you have successfully configured the script in your local file. Now let's talk about the script logic and how it's working. Hope 🤞 you enjoyed to see the result of the Automation script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Explanation
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So here we are using the selenium library for automation script. Selenium is one of the best library available for the Python Automation script. for more information check it out the official documentation of the selenium: &lt;a href="https://selenium-python.readthedocs.io/" rel="noopener noreferrer"&gt;https://selenium-python.readthedocs.io/&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

chromedriver_location = "chrome_driver/chromedriver.exe"  # Path of chrome driver script. OS: windows


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here we have provided the path to the chromium driver.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

# test inputs
site = "https://www.google.com/flights?hl=en"
source_city = "Ahmeda"
destination_city = "Mumbai"
departure_date = "2021-11-21" # YYYY-MM-DD
return_date = "2022-02-27"


# XPATH List of the UI elements
source_city_XPATH = "//*[@id='i6']/div[1]/div/div/div[1]/div/div/input"
dropdown_selection_XPATH = "//*[@id='i6']/div[6]/div[2]/div[2]/div[1]/div/input"
destination_XPATH = "//*[@id='i6']/div[4]/div/div/div[1]/div/div/input"
departure_date_XPATH = '//*[@id="yDmH0d"]/c-wiz[2]/div/div[2]/div/c-wiz/div/c-wiz/div[2]/div[1]/div[1]/div[2]/div[2]/div/div/div[1]/div/div/div[1]/div/div[1]/div/input'
return_date_XPATH = '//*[@id="yDmH0d"]/c-wiz[2]/div/div[2]/div/c-wiz/div/c-wiz/div[2]/div[1]/div[1]/div[2]/div[2]/div/div/div[1]/div/div/div[1]/div/div[2]/div/input'
search_button_XPATH = '//*[@id="yDmH0d"]/c-wiz[2]/div/div[2]/div/c-wiz/div/c-wiz/div[2]/div[1]/div[2]/div/button'
calendar_date_XPATH = '//div[@data-iso = "{date}"]//div[@class="lkvzbb KQqAEc"]'
calendar_submit_button_XPATH = '//*[@id="ow59"]/div[2]/div/div[3]/div[3]/div/button'


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here we have defined the static test input which will fill the values in the google flights website via script. &lt;/p&gt;

&lt;p&gt;we have defined the XPATH for the UI component which will help us to fill the test values using automation script. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    driver = webdriver.Chrome(chromedriver_location)
    driver.maximize_window()
    driver.get(site)  # Open Site in new chrome window


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So using above code new chrome window will open and then maximize the size of the chrome window to full size and open the site that we have configured in the test inputs. (&lt;a href="https://www.google.com/flights?hl=en" rel="noopener noreferrer"&gt;https://www.google.com/flights?hl=en&lt;/a&gt;)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

   # source_city selection steps
    fly_from = driver.find_element(By.XPATH, source_city_XPATH)
    fly_from.click()
    fly_from_text = driver.find_element(By.XPATH, dropdown_selection_XPATH)
    fly_from_text.send_keys(source_city)
    fly_from_text.send_keys(Keys.ENTER)


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So here we first find the source city element. For that you need to open the site and open the inspect window. Select the element and copy the XPATH for the element.(How to find XPATH: &lt;a href="https://www.browserstack.com/guide/find-element-by-xpath-in-selenium" rel="noopener noreferrer"&gt;https://www.browserstack.com/guide/find-element-by-xpath-in-selenium&lt;/a&gt;) After then we click on that div so the dropdown will be open where we can search for the city name. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2u84cm8z3a32zwigmik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2u84cm8z3a32zwigmik.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  # destination_city selection steps
    fly_to = driver.find_element(By.XPATH, destination_XPATH)
    fly_to.click()
    fly_to_text = driver.find_element(By.XPATH, dropdown_selection_XPATH)
    fly_to_text.send_keys(destination_city)
    fly_to_text.send_keys(Keys.ENTER)


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For the destination city, we are going to follow the same sequence.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

# departure_date selection steps
    departure_date_element = driver.find_element(By.XPATH, departure_date_XPATH)
    departure_date_element.click()
    time.sleep(2)
    calendar_div = driver.find_element(By.XPATH, calendar_date_XPATH.format(date=departure_date))
    calendar_div.click() 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is for the calendar picker, to pick the calendar date. So here we first open the calendar by clicking on the div. and select the date. &lt;/p&gt;

&lt;p&gt;Here we are going to use the one of the element in div which is data-iso, which has the date in the format of YYYY-MM-DD . So based on that we can select the appropriate date. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;calendar_date_XPATH = '//div[@data-iso = "{date}"]//div[&lt;a class="mentioned-user" href="https://dev.to/class"&gt;@class&lt;/a&gt;="lkvzbb KQqAEc"]'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The same way we are going to perform for the return date.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 # return_date selection steps
    return_date_calendar_div = driver.find_element(By.XPATH, calendar_date_XPATH.format(date=return_date))
    return_date_calendar_div.click()


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Once we added all the information we need to click on the Done button in the calendar picker. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqldtu2b952y03a8879wp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqldtu2b952y03a8879wp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

 # click on the Done button in calendar picker
    submit_button = driver.find_element(By.XPATH, calendar_submit_button_XPATH)
    submit_button.click()


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So, Yeah Congratulations, You probably understood all the concepts regarding automation script for flight search.&lt;/p&gt;

&lt;p&gt;Hope 🤞 you liked it, Feel free to reach out to me if you have any doubts. &lt;/p&gt;

&lt;p&gt;Please &lt;a href="https://twitter.com/dhruv_rajkotia" rel="noopener noreferrer"&gt;Follow&lt;/a&gt; me on twitter, I'm regularly posting some information regarding the ChatBot development, NLP, Python, NodeJS. Glad to connect with you. &lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>testing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deploy NodeJS Application within 5 minutes</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Thu, 04 Nov 2021 14:13:17 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/deploy-nodejs-application-within-5-minutes-2kk1</link>
      <guid>https://dev.to/dhruv_rajkotia/deploy-nodejs-application-within-5-minutes-2kk1</guid>
      <description>&lt;p&gt;Now a days a lots of people are working on a side projects or the PoC(proof of concept) to showcase their work with rest of the world. For showing your work to rest of the world it required a deployment cost and also the person should have a knowledge regarding the deploying their apps to some server. Looking a bit weird 😟, right? Here I have come up with the quick solution for you guys. How we can deploy our NodeJs application within 5 minutes using App Engine. &lt;/p&gt;

&lt;p&gt;Google App Engine is a cloud computing platform as a service for developing and hosting web applications in Google-managed data centers. App Engine offers automatic scaling for web applications—as the number of requests increases for an application, App Engine automatically allocates more resources for the web application to handle the additional demand.&lt;/p&gt;

&lt;p&gt;Google App Engine primarily supports Go, PHP, Java, Python, Node.js, .NET, and Ruby applications, although it can also support other languages via "custom runtimes". Here we are going to use the Standard environment provide some free quota which can be enough for showing our work to the world.🤙&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;First step is to create your own NodeJS project that you wanted to deploy using App Engine&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here is link of the sample boiler plate code for the NodeJS application. &lt;a href="https://github.com/freeCodeCamp/boilerplate-npm/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can clone (hint: git clone ) this repo in your local and our step 1 is done 👏.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;We need to create a GCP project to deploy our Node application. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://console.cloud.google.com/cloud-resource-manager" rel="noopener noreferrer"&gt;https://console.cloud.google.com/cloud-resource-manager&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on the create new project&lt;/li&gt;
&lt;li&gt;Provide Project name and location&lt;/li&gt;
&lt;li&gt;Click on the Create button. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Note: Make sure you have enabled the Cloud Build API and Enabled the Billing for your GCP project&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You probably see that new project will be created. Congratulations 👏 you have passed the 2nd stage 💪. To be honest you nailed it.😄.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Download Cloud SDK installer &amp;amp; setup our GCP project in local&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Follow the steps mention in the official document of the Google. &lt;br&gt;
&lt;a href="https://cloud.google.com/sdk/docs/quickstart" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have downloaded the Cloud SDK then go to the location of your repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibtmt5u0uvdggmkr930l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibtmt5u0uvdggmkr930l.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1: Run the command: gcloud init&lt;br&gt;
You probably see the below screen. (You may have some less options which I have in the below screenshot)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnctgd3h8b59mmq4ucmj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnctgd3h8b59mmq4ucmj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;2: Select Create a new configuration option. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2c25qsojj5w2m5i3e79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2c25qsojj5w2m5i3e79.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;3: Copy Project ID from GCP Console.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7t98mgojpo0jjtp795u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7t98mgojpo0jjtp795u.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;4: Provide that project ID in Command prompt. &lt;br&gt;
Probably you'll see the below screen. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdaqiwdelod4s3euxbgcr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdaqiwdelod4s3euxbgcr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;5: Login with your Google Account &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After that, Select Login with the new account option. So You'll be redirect to the new browser window for login. Login using the same account in which you have created your GCP project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh7bywifkj4ng4ux7uc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh7bywifkj4ng4ux7uc5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;6: Select the project ID&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Select the option for your project id. You'll see the success message in the CMD.&lt;/p&gt;

&lt;p&gt;Congratulations guys, You just completed almost 80% 👍&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Create app.yaml file&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Create new file at the root level of the project structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjcguwki4k6iniyhfp7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjcguwki4k6iniyhfp7v.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add below code snippet in your app.yaml file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runtime: nodejs16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for more info regarding the app.yaml file, please have a look &lt;a href="https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Run Deploy Application Command&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Run Below command to deploy your application in APP Engine&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;gcloud app deploy&lt;br&gt;
Select the region of your APP Engine deployment&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You'll see the App Deployment is in progress, Once it's done you'll get the public URL of your application which you can use it anywhere you want.&lt;/p&gt;

&lt;p&gt;You'll see the below screen once deployment is done. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlheojl3lo1hl738emqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlheojl3lo1hl738emqt.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the URL mentioned in the response(For me: &lt;a href="https://dhruv-rajkotia.uc.r.appspot.com/" rel="noopener noreferrer"&gt;https://dhruv-rajkotia.uc.r.appspot.com/&lt;/a&gt;) &lt;/p&gt;

&lt;p&gt;Note: Here you can also use the &lt;code&gt;gcloud app browse&lt;/code&gt; command which open URL in the new browser window.&lt;/p&gt;

&lt;p&gt;That's it, You have come too far to learn the deployment with App Engine. Hope 🤞 you liked it. &lt;/p&gt;

&lt;p&gt;Please &lt;a href="https://twitter.com/dhruv_rajkotia" rel="noopener noreferrer"&gt;Follow&lt;/a&gt; me on Twitter to get update regarding upcoming blogs. Glad to connect with you guys😊. &lt;/p&gt;

</description>
      <category>node</category>
      <category>devops</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Partial Response Feature in Dialogflow CX</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Mon, 25 Oct 2021 13:47:29 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/partial-response-feature-in-dialogflow-cx-39bi</link>
      <guid>https://dev.to/dhruv_rajkotia/partial-response-feature-in-dialogflow-cx-39bi</guid>
      <description>&lt;p&gt;Dialogflow CX short for Dialogflow Customer Experience is a recent launch from Google in December 2020. It provides a new way for designing agents, taking a state machine approach to agent design. This gives you a clear and explicit control over a conversation, a better end-user experience, and a better development workflow. The older version of Dialogflow which is Dialogflow ES short for Dialogflow Essentials is still supported but the Dialogflow CX should allow chatbots with higher complexity to be built more seamlessly using a visual editor and not require one to write complex code.&lt;/p&gt;

&lt;p&gt;With Dialogflow CX, Google has come up with a lots of new features and overcomes some of the limitation of the Dialogflow ES. Today we are going to discuss about the one of the feature of Dialogflow CX which is the partial response. You probably have seen that option when setuping webhook in Dialogflow CX. Let's have a deeper discussion on that. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Partial Response? Why we need it?
&lt;/h2&gt;

&lt;p&gt;Sometimes we got into a problem where API takes more time to respond back to the end users and if we need to integrate those API in our bot then probably it's not a good experience to the end users as they need to wait until the API response. Let's understand this issue with some practical example. &lt;/p&gt;

&lt;p&gt;Like, If we have food ordering bot and user has reached to payment flow. User has asked "what is my bill amount?". So here we need to go back to our system and generate bill for the user. So let's assume that our generate bill API takes more than 5s(Dialogflow CX support the webhook timeout till 30s). So here user needs to wait until the API response which may feels user like Is he/she disconnected? or what happened to bot? which leads to a very bad user experience. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcdh65bf4a73fwnlbwdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcdh65bf4a73fwnlbwdk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To overcome this problem Dialogflow CX comes up with partial Response feature which has ability to notify users while we are fetching details through webhook. notify users and fetching details from webhook will perform parallel. So here we can notify users with some text like "One moment please while I look that up." So using end user will notified while we are fetching details in backend. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl68tsk4fzi867oyxucb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl68tsk4fzi867oyxucb.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to add partial response in Dialogflow CX
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Go to the Route which has the webhook integrated. like from which route you are going to call your webhook. For reference I have attached a screenshot below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmipzjla3z3qnq5u81qyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmipzjla3z3qnq5u81qyu.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Add the fulfillment message for that route as per the screenshot. (One moment please while I look that up.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8mdw8vdlcv164k3xl24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8mdw8vdlcv164k3xl24.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Enabled Return Partial Response option. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhh82xmfe8osng8cbpnpf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhh82xmfe8osng8cbpnpf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it, you have configured the partial response successfully. &lt;/p&gt;

&lt;p&gt;Now let's have a quick test. &lt;/p&gt;

&lt;p&gt;Go to your Simulator and click on the 3 dots setting and enabled the partial response option. please take reference from screenshot. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5waj2d86bbkeaznm5y0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5waj2d86bbkeaznm5y0w.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now try with your query which execute the route and call the webhook. After some time you'll received the defined message from bot site before your webhook success message. &lt;/p&gt;

&lt;p&gt;Hope you liked this blog. Please &lt;a href="https://twitter.com/dhruv_rajkotia" rel="noopener noreferrer"&gt;FOLLOW&lt;/a&gt; me on Twitter to get notified regarding my upcoming blogs. Have a nice day..!!&lt;/p&gt;

</description>
      <category>dialogflowcx</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>nlp</category>
    </item>
    <item>
      <title>Steps to create your own Facebook Messenger chatbot</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Thu, 21 Oct 2021 08:20:54 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/steps-to-create-your-own-facebook-messenger-chatbot-1j8g</link>
      <guid>https://dev.to/dhruv_rajkotia/steps-to-create-your-own-facebook-messenger-chatbot-1j8g</guid>
      <description>&lt;h3&gt;
  
  
  What is a Chatbot? Why it's important?
&lt;/h3&gt;

&lt;p&gt;A chatbot is an artificial intelligence software that can simulate a conversation (or a chat) with a user in natural language through messaging applications, websites, mobile apps or through the telephone. It's more like a replacement of the human services to a bot which can understand the user requirement and provide assistance at any time with very low cost. &lt;/p&gt;

&lt;p&gt;A chatbot is often described as one of the most advanced and promising expressions of interaction between humans and machines. However, from a technological point of view, a chatbot only represents the natural evolution of a Question Answering system leveraging Natural Language Processing (NLP). Formulating responses to questions in natural language is one of the most typical Examples of Natural Language Processing applied in various enterprises’ end-use applications.&lt;/p&gt;

&lt;p&gt;Now a days we are seeing that social media platforms are becomes a crucial part in our lives and also beneficial for business perceptive. So today we are going to discuss regarding the How we can create our own Facebook messenger chatbot using Dialogflow CX.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Create Facebook App
&lt;/h4&gt;

&lt;p&gt;First, we need to create a developer app for the Facebook. &lt;br&gt;
Go to &lt;a href="https://developers.facebook.com/" rel="noopener noreferrer"&gt;https://developers.facebook.com/&lt;/a&gt; and login using your Facebook credential. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpu747dda8mfswfbwy7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpu747dda8mfswfbwy7n.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on My Apps and then you will redirect to the Developer console. Now we need to create a new app for this demo. Click on the Create App button on top right corner of the console. One you click that you can see the below screen. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy8t7nq1u717pz7qfbku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy8t7nq1u717pz7qfbku.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select App type based on your requirement. For this I'll go with the Business option. Click on the Next and you'll redirect to below screen. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrs39k6lr63xaemzjfdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrs39k6lr63xaemzjfdf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Provide the below details: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Name: (I have provided as a Claudio)&lt;/li&gt;
&lt;li&gt;App Purpose: (I have selected Yourself or your own business)&lt;/li&gt;
&lt;li&gt;Business Manager Account: If you have created any business account then you can use that or you can ignore this one. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click on Create App button. App will be created and you will redirect to the App Dashboard. &lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Create Facebook page
&lt;/h4&gt;

&lt;p&gt;Go to &lt;a href="https://www.facebook.com/" rel="noopener noreferrer"&gt;https://www.facebook.com/&lt;/a&gt; and click on the Pages tab from left panel. Now click on the create New Page from left panel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgky18yf2f7yg70lznreb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgky18yf2f7yg70lznreb.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Provide the page name and the category: &lt;br&gt;
Page name: Claudio ChatBot&lt;br&gt;
Category: Entertainment website (You can choose whatever you want)&lt;/p&gt;

&lt;p&gt;Click on the Create Page button. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon2okj6yo80braqig0dh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon2okj6yo80braqig0dh.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click on the Add action button and select the Send Message Action button. Remove the pre-prompted question and click on Save.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frliwgkfba9hq9fzh0zfp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frliwgkfba9hq9fzh0zfp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we are all set regarding the Facebook Page setup. Now let's move on to setup Dialogflow bot. &lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Create Dialogflow CX Agent
&lt;/h4&gt;

&lt;p&gt;Here, We are going to create a Dialogflow Agent for our Facebook bot. For the demo purpose we are going to develop very simple flow in which bot will ask the Name and Phone number to user. Here you create a Dialogflow Agent based on your requirements. &lt;/p&gt;

&lt;p&gt;Please download the agent blob file from here. &lt;a href="https://drive.google.com/file/d/1AMID0_v4Qa2oUoQYYilLL5N5jT5mwGA-/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1AMID0_v4Qa2oUoQYYilLL5N5jT5mwGA-/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Import Agent file using the Dialogflow console. &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/agent?hl=en#export" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow/cx/docs/concept/agent?hl=en#export&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4: Connect Dialogflow CX Agent with Messenger
&lt;/h4&gt;

&lt;p&gt;Click on the Manage tab in Dialogflow CX Console. &lt;/p&gt;

&lt;p&gt;Click on the Integration option from the Menu list. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsrr7awthfnlcu1lg4hd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsrr7awthfnlcu1lg4hd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now Click on the connect button for the Facebook Messenger card. You'll see the below screen as a popup. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhq8aizpitqxxmg470shr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhq8aizpitqxxmg470shr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add below details in the popup. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Secret: Go to the Facebook developer console and then go to Settings -&amp;gt; Basic option. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get the App secret and add the value here. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page Access Token: 
Go to Messenger -&amp;gt; Settings -&amp;gt; Access Tokens section. 
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgfpcgkacx6sq75x1q3q.png" alt="Image description"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click on the Add or Remove Pages &lt;br&gt;
Select your page (Cloudio Chatbot) and then save changes. &lt;br&gt;
You can see the below screen after performing the above steps. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzb8yw0ktsibwko6skrn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzb8yw0ktsibwko6skrn.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click on the generate token and copy the page access tokens from popup. &lt;/p&gt;

&lt;p&gt;Paste page access token in you dialogflow messenger bot connect popup. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify token: 
Add verify token as a random string which will help us in the next step for the webhook verification.(I have added as a dhruv123.) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now click on the start button so you'll see the below screen on the same popup window. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bwtpqfudgn0eggaxr3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bwtpqfudgn0eggaxr3e.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the Webhook URL and go to the Developer Console -&amp;gt; Messenger -&amp;gt; Settings -&amp;gt; Webhooks section. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fye0bakrpgtghtni2gd0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fye0bakrpgtghtni2gd0q.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste Webhook URL as a Callback URL value and along with that add the verification token that we have added in the previous step. (dhruv123). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4zv8n57sajjvqts8edl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4zv8n57sajjvqts8edl.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the verify and save. &lt;/p&gt;

&lt;p&gt;After that Click on the Add Subscriptions option and checkmark messages and messaging_postbacks options. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpfq5kq3h032wsvdctlph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpfq5kq3h032wsvdctlph.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgna69xhpa9mibm12bd7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgna69xhpa9mibm12bd7.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. Now your Facebook Messenger bot is up and running. Go to the messenger and search for your page (Claudio-ChatBot) and start conversation by sending hi message. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lgqga6b3az0j89b1ecd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lgqga6b3az0j89b1ecd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see the bot will send you welcome message and conversation is started as per expectation. &lt;/p&gt;

&lt;p&gt;Thanks for reading this blog and Hope🤞 you liked it.&lt;/p&gt;

&lt;p&gt;Please &lt;a href="https://twitter.com/dhruv_rajkotia" rel="noopener noreferrer"&gt;FOLLOW&lt;/a&gt; me on twitter to get notify for my upcoming blogs regarding Deeper Dive into Dialogflow CX.&lt;/p&gt;

</description>
      <category>chatbot</category>
      <category>dialogflowcx</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Difference between Dialogflow CX vs Dialogflow ES</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Sat, 09 Oct 2021 14:37:16 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/difference-between-dialogflow-cx-vs-dialogflow-es-3n1k</link>
      <guid>https://dev.to/dhruv_rajkotia/difference-between-dialogflow-cx-vs-dialogflow-es-3n1k</guid>
      <description>&lt;p&gt;Google Dialogflow has introduced Dialogflow CX in December 2020. It is a powerful tool to build virtual agents. So Now Dialogflow has 2 versions one is Dialogflow ES(Older Version) and New is Dialogflow CX. So Now we have basic question arises what is a difference between Dialogflow versions(CX vs ES).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dialogflow ES&lt;/strong&gt; supported a flat structure of intents and implicit controls for conversation flows, mainly using contexts. This approach didn't scale well for building, understanding, and maintaining large agents with complex conversation flows. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dialogflow CX&lt;/strong&gt; addresses these issues by providing conversation flow controls in a more explicit and structured way. CX follows graphical structure which allows designing of complex conversation flows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Notable Features of Dialogflow CX
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Visual Flow Builder
&lt;/h4&gt;

&lt;p&gt;A new visual builder makes building and maintaining agents easier. Conversation paths are graphed as a state machine model, which makes conversations easier to design, enhance, and maintain. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdm62ylw4zd5we4ee2ot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdm62ylw4zd5we4ee2ot.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Console overview: &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/console" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow/cx/docs/concept/console&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Reusable Intents
&lt;/h4&gt;

&lt;p&gt;One of the main features of the CX is the Reusable Intents. Fulfillment is decoupled from intents, making intents a truly reusable component for multiple different conversational flows.&lt;/p&gt;

&lt;p&gt;In Dialogflow ES intent is tightly coupled with the fulfillment so it's too difficult to reuse it. &lt;/p&gt;

&lt;h4&gt;
  
  
  Separate Flows for Easier Collaboration On Agents
&lt;/h4&gt;

&lt;p&gt;Separate flows let multiple teams work simultaneously. With Flows, you can partition your agent into smaller conversation topics. Different team members can work on different flows, which make Virtual Agent development very easy for the more complex conversation flow. Also It has versioning support at the flow level so you can run multiple versions based on your environments. In short, It allows modularization of bot for ease of management.&lt;/p&gt;

&lt;p&gt;For example, If you are creating an Agent for the Restaurants booking then it may create flows like order confirmation, order booking, Get Customer Details etc. So Here you can give the individual flows to different teams and speed up the development of the virtual agent. &lt;/p&gt;

&lt;p&gt;For more information regarding Flows: &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/console" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow/cx/docs/concept/console&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  State Based Data Model:
&lt;/h4&gt;

&lt;p&gt;A state-based data model allows us to reuse intents, intuitively define transitions and data conditions, and handle supplemental questions.&lt;/p&gt;

&lt;p&gt;You can set conditions for each flow. A conditional trigger determines how the route will occur. For example, if a parameter equals a specific value, or if all parameters have been filled then route to the specific page or flow. I'll cover this topics in details for upcoming blog with some examples. &lt;/p&gt;

&lt;h4&gt;
  
  
  Parameters feature enhancement
&lt;/h4&gt;

&lt;p&gt;In Dialogflow CX thwy have come up with mainly 3 types of parameters. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Session Parameters&lt;br&gt;
Dialogflow Stores all the captured parameter through out the session so you can use the specific parameters in further flow. This feature in not available in the Dialogflow ES but you can do it via setting the long output context in Welcome intent. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intent Parameters&lt;br&gt;
Intents use parameters to extract data provided by end-users when intents are matched. The following data is used to define an intent parameter. Due to the short-lived life span of intent parameters, Dialogflow recommended to use the session parameters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Form Parameters&lt;br&gt;
For each page, you can define a form, which is a list of parameters that should be collected from the end-user for the page. It's kind of similar to the ES Slot fillings. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more information regarding parameters: &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/parameter" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow/cx/docs/concept/parameter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: I'll create a separate blog to explain the dialogflow parameters with examples.&lt;/p&gt;

&lt;p&gt;Now that we have explored the newest features of Dialogflow CX, let’s look into the comparison between Dialogflow CX vs ES.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;ES Agent&lt;/th&gt;
&lt;th&gt;CX Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Editions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dialogflow Essentials Edition&lt;/td&gt;
&lt;td&gt;Dialogflow CX Edition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Definition&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;This is the standard agent type that is suitable for small to medium and simple to moderately complex agents. &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/parameter" rel="noopener noreferrer"&gt;Intents&lt;/a&gt; are the building blocks of conversation design, and &lt;a href="https://cloud.google.com/dialogflow/es/docs/contexts-overview" rel="noopener noreferrer"&gt;contexts&lt;/a&gt; are used to control conversation paths. The ES agent type is summarized in &lt;a href="https://cloud.google.com/dialogflow/es/docs/basics" rel="noopener noreferrer"&gt;Dialogflow ES basics&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;This is an advanced agent type that is suitable for large or very complex agents. &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/flow" rel="noopener noreferrer"&gt;Flows&lt;/a&gt; and &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/page" rel="noopener noreferrer"&gt;pages&lt;/a&gt; are the building blocks of conversation design, and &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/handler" rel="noopener noreferrer"&gt;state handlers&lt;/a&gt; are used to control conversation paths. The CX agent type is summarized in &lt;a href="https://cloud.google.com/dialogflow/cx/docs/basics" rel="noopener noreferrer"&gt;Dialogflow CX basics&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agents per project&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recommended agent size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to medium size agents&lt;/td&gt;
&lt;td&gt;Up to very large&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recommended agent complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to moderately complex agents&lt;/td&gt;
&lt;td&gt;Up to highly complex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integrations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Many different telephony as well as text based integrations are available. Dialogflow ES supports telephony &lt;a href="https://cloud.google.com/dialogflow/es/docs/integrations" rel="noopener noreferrer"&gt;integrations&lt;/a&gt; with Genesys, Avaya, etc. Also possible to integrate with many popular conversation platforms like Google Assistant, Slack, Facebook Messenger, Kommunicate, and Google-contributed open-source integrations.&lt;/td&gt;
&lt;td&gt;Telephony &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/integration" rel="noopener noreferrer"&gt;integrations&lt;/a&gt; are available only for Avaya, Voximplant, Audio Codes and text based integrations are available for Dialogflow Messenger, Facebook Messenger and Line. The support for the rest of the platforms is not available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://cloud.google.com/dialogflow/es/docs/reference/language" rel="noopener noreferrer"&gt;Language support&lt;/a&gt; available for multiple languages.&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://cloud.google.com/dialogflow/cx/docs/reference/language" rel="noopener noreferrer"&gt;Language support&lt;/a&gt; available for fewer languages than DF ES.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;History feature&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The History page shows a simplified version of the conversations your agent has engaged in. These logs are chronological and intended to be an overview of how users interact with your agent.&lt;/td&gt;
&lt;td&gt;Not available in DF-CX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent building blocks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flat structure of intents&lt;/td&gt;
&lt;td&gt;Graph structure of flows and pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conversation control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Linear conversation paths that simulate nonlinear paths using intents as nodes and contexts to control paths&lt;/td&gt;
&lt;td&gt;State machine model with explicit conversation control using pages as nodes and state handlers to control paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Console user experience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mostly text forms&lt;/td&gt;
&lt;td&gt;Visual graphs showing conversation paths and text forms for configurations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent reusability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intents are coupled with fulfillment, events, and responses; specific to a conversation state, so difficult to reuse&lt;/td&gt;
&lt;td&gt;Intents are simplified to remove this coupling and made highly reusable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Webhook Error handling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Errors quietly ignored by agent, passed to API caller if present&lt;/td&gt;
&lt;td&gt;Explicit &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/handler#event-built-in" rel="noopener noreferrer"&gt;error event handling&lt;/a&gt; built-in to your agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parameter scope&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can be scoped to &lt;a href="https://cloud.google.com/dialogflow/es/docs/intents-actions-parameters" rel="noopener noreferrer"&gt;intent&lt;/a&gt;, &lt;a href="https://cloud.google.com/dialogflow/es/docs/contexts-input-output#param" rel="noopener noreferrer"&gt;context&lt;/a&gt;, or &lt;a href="https://cloud.google.com/dialogflow/es/docs/events-overview#param" rel="noopener noreferrer"&gt;event&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Can be scoped to &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/parameter#intent" rel="noopener noreferrer"&gt;intent&lt;/a&gt;, &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/parameter#form" rel="noopener noreferrer"&gt;form&lt;/a&gt;, or &lt;a href="https://cloud.google.com/dialogflow/cx/docs/concept/parameter#session" rel="noopener noreferrer"&gt;session&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pricing is more granular More economical. For  &lt;strong&gt;Text:&lt;/strong&gt; Production-ready quota $0.002 per request, For &lt;strong&gt;Audio input:&lt;/strong&gt; Production-ready quota $0.0065 per 15 seconds of audio, For &lt;strong&gt;Audio output:&lt;/strong&gt; Production-ready quota $4 to $16 per million characters&lt;/td&gt;
&lt;td&gt;Pricing is simplified 2.5 - 3 times higher than DF-ES For &lt;strong&gt;Text:&lt;/strong&gt; 1200 requests per minute $20 per 100 chat sessions, For &lt;strong&gt;Audio input/output:&lt;/strong&gt; 600 requests per minute $45 per 100 voice sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;In conclusion, DialogFlow CX is an improved version of the Dialgoflow ES. CX has resolved all major drawbacks of the Dialogflow ES like improvement in slot filling, event handlers, parameters etc. But still it come up with the very high pricing rate as compare to ES. Based on my opinion both version has it's prons and cons. If you have very complex conversation flow then I suggest to go with the Dialogflow CX otherwise for simple flows Dialogflow ES is good enough. &lt;/p&gt;

&lt;p&gt;Thanks for reading this blog and Hope🤞 you liked it. I'm planning to create a series of blogs for Dialogflow CX concepts(Deeper Dive into Dialogflow CX). &lt;/p&gt;

&lt;p&gt;Please &lt;a href="https://twitter.com/dhruv_rajkotia" rel="noopener noreferrer"&gt;FOLLOW&lt;/a&gt; me on twitter to get notify for my upcoming blogs regarding &lt;strong&gt;Deeper Dive into Dialogflow CX&lt;/strong&gt;.  &lt;/p&gt;

&lt;h4&gt;
  
  
  References:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/dialogflow#section-9" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow#section-9&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cloud.google.com/dialogflow/cx/docs" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow/cx/docs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cloud.google.com/dialogflow/es/docs" rel="noopener noreferrer"&gt;https://cloud.google.com/dialogflow/es/docs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dialogflow</category>
      <category>nlp</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What is a difference between git pull and git fetch?</title>
      <dc:creator>Dhruv Rajkotia</dc:creator>
      <pubDate>Sat, 02 Oct 2021 06:18:57 +0000</pubDate>
      <link>https://dev.to/dhruv_rajkotia/what-is-a-difference-between-git-pull-and-git-fetch-4iop</link>
      <guid>https://dev.to/dhruv_rajkotia/what-is-a-difference-between-git-pull-and-git-fetch-4iop</guid>
      <description>&lt;p&gt;As we all know that git commands become mandatory if you are software developer. So here today I wanted to share basic understanding of the git two commands. &lt;strong&gt;Git pull vs fetch.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Situation:
&lt;/h3&gt;

&lt;p&gt;If there were some changes recently made to your remote repository and you want to incorporate them into your local copy. then you have basically a 2 options one is git pull and another one is git fetch. &lt;/p&gt;

&lt;p&gt;So, Now question arise what’s the difference between Git pull vs fetch.&lt;/p&gt;

&lt;p&gt;Now let’s understand with some diagram so probably you will never forgot the difference :) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uwwl60idrpjm4zruse4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uwwl60idrpjm4zruse4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As per the above diagram The &lt;code&gt;git fetch&lt;/code&gt; command downloads commits, files, and refs from a remote repository into your local repo but not update your local repo's working state. Fetching is what you do when you want to see what everybody else has been working on.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git pull&lt;/code&gt; is the more aggressive alternative; it will download the remote content for the active local branch and immediately execute &lt;code&gt;git merge&lt;/code&gt; to create a merge commit for the new remote content. If you have pending changes in progress this will cause conflicts and kick-off the merge conflict resolution flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  When we should use git fetch?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If you only want to see all of the current branches and changes in your remote repository without affecting your current local copy then Git fetch can get you all of the information you need.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When we should use git pull?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;when you are ready to get latest updates from your remote repository and adding to your local copy. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's all folks, Hope you got the idea regarding Git pull vs fetch. Please like the post if you loved it and please let me know if you have any question in comments. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>git</category>
    </item>
  </channel>
</rss>
