<?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: Riza Farheen</title>
    <description>The latest articles on DEV Community by Riza Farheen (@rizafarheen).</description>
    <link>https://dev.to/rizafarheen</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%2F1046512%2Fe944f178-4c24-4c3b-bb5b-1c1c28116e23.jpg</url>
      <title>DEV Community: Riza Farheen</title>
      <link>https://dev.to/rizafarheen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rizafarheen"/>
    <language>en</language>
    <item>
      <title>Building an Agentic Workflow: Orchestrating a Multi-Step Software Engineering Interview</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Mon, 21 Apr 2025 10:46:26 +0000</pubDate>
      <link>https://dev.to/orkes/building-an-agentic-workflow-orchestrating-a-multi-step-software-engineering-interview-57h2</link>
      <guid>https://dev.to/orkes/building-an-agentic-workflow-orchestrating-a-multi-step-software-engineering-interview-57h2</guid>
      <description>&lt;p&gt;As language models evolve, so does the way we build intelligent systems. One emerging pattern is the &lt;a href="https://orkes.io/blog/what-are-agentic-workflows/" rel="noopener noreferrer"&gt;agentic workflow&lt;/a&gt;—a coordinated sequence of tasks in which an AI agent interacts with external tools and APIs, makes decisions, and executes complex flows autonomously.&lt;/p&gt;

&lt;p&gt;But intelligence alone isn’t enough. Large language models excel at reasoning and response generation, yet they fall short when it comes to real-world execution. Managing &lt;strong&gt;state&lt;/strong&gt;, coordinating &lt;strong&gt;asynchronous tasks&lt;/strong&gt;, handling &lt;strong&gt;tool invocation&lt;/strong&gt;, and ensuring &lt;strong&gt;reliability&lt;/strong&gt; across multiple steps remain key challenges. That’s where orchestration comes in.&lt;/p&gt;

&lt;p&gt;By combining LLMs with a robust &lt;a href="https://orkes.io/blog/what-is-a-workflow-engine/" rel="noopener noreferrer"&gt;workflow engine&lt;/a&gt;, we can design resilient, multi-step systems that bridge reasoning with action. In this guide, we’ll walk through an &lt;strong&gt;agentic workflow that automates a full software engineering technical interview&lt;/strong&gt;—from candidate intake to interview questions, evaluation, and report delivery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Agentic interview app
&lt;/h2&gt;

&lt;p&gt;Let’s build an application that mimics a human-led coding interview, where:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The candidate enters their details.&lt;/li&gt;
&lt;li&gt;An LLM agent conducts the interview by generating a series of leetcode-style programming questions, which the candidate responds to in a sequence.&lt;/li&gt;
&lt;li&gt;The agent scores answers and provides feedback.&lt;/li&gt;
&lt;li&gt;A formatted transcript of the interview is generated.&lt;/li&gt;
&lt;li&gt;A final report is emailed to the candidate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This multi-step process involves &lt;strong&gt;reasoning (via OpenAI)&lt;/strong&gt;, &lt;strong&gt;external tools (Google Docs and SendGrid)&lt;/strong&gt;, and &lt;strong&gt;orchestration (Orkes Conductor)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;To build it, we’ll use the following components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdulcdcy4efdoxtiltffc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdulcdcy4efdoxtiltffc.jpg" alt="Agentic Interview App flow"&gt;&lt;/a&gt;&lt;/p&gt;
Agentic Interview App flow



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend (Next.js)&lt;/strong&gt;–Provides the user interface for candidate interaction. It captures user input (name, language, email) and streamlines the interview conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend (Python)&lt;/strong&gt;–Acts as the trigger point for the workflow. It starts the Conductor workflow and serves as middleware to process frontend user input to the backend. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI&lt;/strong&gt;–Provides the reasoning layer. Generates questions, interprets responses, and guides the flow through hints and feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud (Docs API)&lt;/strong&gt;–Generates and formats the interview transcript as a sharable document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SendGrid&lt;/strong&gt;–Send the final report and feedback to the candidate via email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orkes Conductor&lt;/strong&gt;–Orchestrates the entire workflow: managing state, coordinating tasks, handling API integrations and logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let’s walk through how these tools come together to form the agentic interview application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building an agentic interview app
&lt;/h2&gt;

&lt;p&gt;You can follow this tutorial using the free &lt;a href="https://developer.orkescloud.com/?utm_campaign=agentic-interview-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;. Create an account to get started. &lt;/p&gt;

&lt;p&gt;We’ll build an interview app powered by the following Conductor workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqpnk71fxb4trslemwfif.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqpnk71fxb4trslemwfif.jpeg" alt="Interview Agentic Workflow"&gt;&lt;/a&gt;&lt;/p&gt;
Interview Agentic Workflow in Orkes Conductor



&lt;p&gt;After gathering the candidate details, the interview will begin. Conductor’s &lt;a href="https://orkes.io/content/reference-docs/operators/start-workflow" rel="noopener noreferrer"&gt;Start Workflow task&lt;/a&gt; then starts the Core Interview Loop workflow and generates a coding question using OpenAI. It then enters a loop to collect and evaluate the candidate’s responses (with support for hints or simplifications), finally scoring the answer and storing a structured evaluation as a scorecard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkznuzurz1wfznx8ozyes.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkznuzurz1wfznx8ozyes.jpeg" alt="Core Interview Loop Workflow"&gt;&lt;/a&gt;&lt;/p&gt;
Core Interview Loop Workflow in Orkes Conductor



&lt;p&gt;Now, here’s how you can create an agentic interview application on your own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Clone the repository
&lt;/h3&gt;

&lt;p&gt;The source code for this example project is available in this &lt;a href="https://github.com/conductor-oss/awesome-conductor-apps/tree/main/python/interview_agentic_app" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. Clone it to your local machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/conductor-oss/awesome-conductor-apps/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the project and navigate to the interview app folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd python/interview_agentic_app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Get credentials and set up environment variables
&lt;/h3&gt;

&lt;p&gt;This application interacts with multiple tools and APIs. You’ll need to configure a few credentials before running it locally.&lt;/p&gt;

&lt;h4&gt;
  
  
  Access key and secret from Conductor
&lt;/h4&gt;

&lt;p&gt;Get the access key and secret from Developer Playground by creating a new application from &lt;strong&gt;&lt;a href="https://developer.orkescloud.com/applicationManagement/applications" rel="noopener noreferrer"&gt;Access Control &amp;gt; Applications&lt;/a&gt;&lt;/strong&gt;. Set the &lt;em&gt;Application role&lt;/em&gt; to &lt;em&gt;Worker&lt;/em&gt; and &lt;em&gt;Metadata API&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Generate the access key and secret.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fobgz402rypyu8cfou3nv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fobgz402rypyu8cfou3nv.jpg" alt="Generating access key and secret from Conductor"&gt;&lt;/a&gt;&lt;/p&gt;
Generating access key and secret from Orkes Conductor



&lt;p&gt;Open your project in the IDE of your choice and set the following environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export CONDUCTOR_SERVER_URL=https://developer.orkescloud.com/api
export CONDUCTOR_AUTH_KEY=&amp;lt;YOUR_CONDUCTOR_AUTH_KEY&amp;gt;
export CONDUCTOR_AUTH_SECRET=&amp;lt;YOUR_CONDUCTOR_AUTH_SECRET&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  OpenAI API key
&lt;/h4&gt;

&lt;p&gt;Generate your &lt;a href="https://platform.openai.com/api-keys" rel="noopener noreferrer"&gt;API key&lt;/a&gt; from the OpenAI platform, then set the environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export OPENAI_API_KEY=&amp;lt;YOUR_OPENAI_KEY&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Google authentication credentials
&lt;/h4&gt;

&lt;p&gt;Google authentication credentials are required to access Google APIs. Ensure Google Docs API is enabled on your GCP project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/iam/docs/service-accounts-create#iam-service-accounts-create-console" rel="noopener noreferrer"&gt;Create a service account&lt;/a&gt; in your Google Cloud console and download the JSON key file. It will be named something like &lt;strong&gt;project-name.json&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5fn4s8u9z3eh86lgg3ar.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5fn4s8u9z3eh86lgg3ar.jpg" alt="Creating service account key from GCP project"&gt;&lt;/a&gt;&lt;/p&gt;
Creating service account key from GCP console



&lt;p&gt;Next, we need to stringify the contents of the JSON file using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -c 'import json; print(json.dumps(json.load(open("&amp;lt;PATH-TO-JSON-FILE&amp;gt;/project-name.json"))))'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the output (the stringified JSON), then set the environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export GOOGLE_SERVICE_ACCOUNT_JSON='&amp;lt;PASTE_THE_STRING_HERE&amp;gt;'
export ENV=prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  SendGrid API key
&lt;/h4&gt;

&lt;p&gt;SendGrid automatically sends the final interview summary and feedback to the candidate via email.&lt;/p&gt;

&lt;p&gt;Start by creating an account on SendGrid, then &lt;a href="https://www.twilio.com/docs/sendgrid/ui/sending-email/sender-verification" rel="noopener noreferrer"&gt;create and verify the sender email address&lt;/a&gt;. Next, generate an &lt;a href="https://app.sendgrid.com/settings/api_keys" rel="noopener noreferrer"&gt;API key&lt;/a&gt; from SendGrid.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5pg4f77weinrxs368gm3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5pg4f77weinrxs368gm3.jpg" alt="Generating API key from SendGrid"&gt;&lt;/a&gt;&lt;/p&gt;
Generating API key from SendGrid



&lt;p&gt;Now, set the environment variable for your API Key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export SEND_GRID_API_KEY=&amp;lt;YOUR_SEND_GRID_API_KEY&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, set the environment variable for your verified sender email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export SEND_GRID_EMAIL_ADDRESS=&amp;lt;YOUR_SEND_GRID_VERIFIED_EMAIL_ADDRESS&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, update your workflow JSON to use this sender email. Navigate to &lt;strong&gt;python/interview_agentic_app/resources/interviewAgenticWorkflow.json&lt;/strong&gt; file. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to line 878 and replace the &lt;strong&gt;from.email&lt;/strong&gt; value:
&lt;/li&gt;
&lt;/ul&gt;

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

 "from": {
                  "email": "&amp;lt;SENDGRID_VERIFIED_SENDER_EMAIL&amp;gt;" //Line 878
                },
                "subject": "Thank you ${workflow.variables.name} for interviewing with Orkes",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Go to line 996 and replace the from.email value:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//workflow JSON 
                "from": {
                  "email": "&amp;lt;SENDGRID_VERIFIED_SENDER_EMAIL&amp;gt;" //Line 996
                },
                "subject": "Thank you ${workflow.variables.name} for interviewing with Orkes",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Start the backend server
&lt;/h3&gt;

&lt;p&gt;This step launches the Python-based backend that listens for incoming requests and triggers the Conductor workflow.&lt;/p&gt;

&lt;p&gt;Set the Python path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export PYTHONPATH=/[PATH_TO_REPO]/awesome-conductor-apps/python/interview_agentic_app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create and activate a virtual environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m venv venv
source venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install required dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip3 install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the backend server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd workflow
python app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Start the frontend server
&lt;/h3&gt;

&lt;p&gt;This starts the Next.js frontend, where candidates can enter their details and take the interview in an interactive chat UI.&lt;/p&gt;

&lt;p&gt;Open a new terminal and navigate to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd python/interview_agentic_app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, navigate to the frontend directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd interview-chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --legacy-peer-deps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the frontend server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The app should now be running locally. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: View the interview app in action
&lt;/h3&gt;

&lt;p&gt;To start the interview, open it in your browser at &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;, this launches the interview experience locally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgpqnxwubpi8citjutq5y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgpqnxwubpi8citjutq5y.jpg" alt="Agentic Interview App in Action"&gt;&lt;/a&gt;&lt;/p&gt;
Agentic Interview App UI



&lt;p&gt;In your Developer Playground, you’ll notice that the required OpenAI integrations, AI prompts, and workflow definitions are automatically created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcjrddicv1rxq3ttsaqyn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcjrddicv1rxq3ttsaqyn.jpg" alt="Resources created in Developer Playground"&gt;&lt;/a&gt;&lt;/p&gt;
Resources created in Developer Playground



&lt;p&gt;As the candidate proceeds, the &lt;strong&gt;Interview Agentic Workflow&lt;/strong&gt; is triggered. Each interview question is handled by a separate workflow, &lt;strong&gt;Core Interview Loop&lt;/strong&gt;. So, for a three-question interview, three workflows run in sequence using Conductor’s &lt;a href="https://orkes.io/content/reference-docs/operators/start-workflow" rel="noopener noreferrer"&gt;Start Workflow&lt;/a&gt; task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1z489gvjyh3cr63h6vqb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1z489gvjyh3cr63h6vqb.jpg" alt="Workflows triggered in Developer Playground"&gt;&lt;/a&gt;&lt;/p&gt;
Triggered workflows in Developer Playground



&lt;p&gt;Once the interview is complete, a thank you email with personalized feedback and scores is instantly sent to the candidate via SendGrid API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnx19hqpfmj3h8oe3py3s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnx19hqpfmj3h8oe3py3s.jpg" alt="Thank you email triggered on completing interview"&gt;&lt;/a&gt;&lt;/p&gt;
Thank you email triggered via SendGrid on interview completion



&lt;p&gt;In parallel, a fully formatted Google Docs transcript is generated and stored in Google Drive. The interviewer and candidate are granted access, and a link is shared in another email.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fys0omcwnj7bwtaql8gh0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fys0omcwnj7bwtaql8gh0.jpg" alt="Interview transcript generated"&gt;&lt;/a&gt;&lt;/p&gt;
Interview transcript generated and stored in Google Docs



&lt;p&gt;That’s it—you’ve now built a fully automated coding interview for a Software Engineer, from candidate intake to evaluation and reporting.&lt;/p&gt;

&lt;p&gt;With the core workflow in place, you can easily tailor it to your own needs: customize the prompts, add more questions, or plug it into tools of your choice. &lt;/p&gt;

&lt;p&gt;This agentic interview app isn’t just for demos—it’s built for production. You can deploy the backend on platforms like &lt;strong&gt;Render&lt;/strong&gt; and the frontend on &lt;strong&gt;Vercel&lt;/strong&gt;, with your Conductor workflows running in the &lt;a href="https://orkes.io/cloud" rel="noopener noreferrer"&gt;Orkes Cloud&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  What next?
&lt;/h2&gt;

&lt;p&gt;Now that you’ve built and tested your agentic interview workflow, here are a few ways you can take it further:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add a progress tracker&lt;/strong&gt;–Show candidates how they’re doing after each question to make the experience more engaging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plug into ATS or HRIS&lt;/strong&gt;–Send the final report straight to your ATS or HR dashboard for easier review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extend beyond coding&lt;/strong&gt;–Replace coding questions with behavioral prompts or design discussions to adapt the workflow for non-technical interviews.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;This tutorial walked you through building a complete agentic workflow—one that goes beyond single-shot prompts to orchestrate a real-world, multi-step interview process. Using OpenAI for reasoning, Google Docs for formatting, SendGrid for communication, a modern frontend and backend stack, and &lt;strong&gt;&lt;em&gt;Orkes Conductor at the core, you now have a robust foundation for deploying agentic workflows in production.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you’re building technical assessments, onboarding flows, or multi-agent decision systems, Conductor gives you the structure to scale—with full control over inputs, logic, and integrations.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/yEZ1hF8FJhY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore more AI-powered workflows built with Conductor&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://orkes.io/blog/build-agentic-workflows-with-conductor/" rel="noopener noreferrer"&gt;Agentic cybersecurity monitoring system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://orkes.io/blog/build-ai-app-with-conductor/" rel="noopener noreferrer"&gt;Article summarizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.toAI-powered%20document%20classification%20system"&gt;AI-powered document classification system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://orkes.io/blog/rag-explained-building-semantic-search/" rel="noopener noreferrer"&gt;Retrieval augmented generation (RAG) system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://orkes.io/content/developer-guides/quickstart-ai-orchestration" rel="noopener noreferrer"&gt;Multilingual translation with LLMs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try building and running your first agentic workflow using the free &lt;a href="https://developer.orkescloud.com/?utm_campaign=agentic-interview-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;. Drop by our &lt;a href="https://orkes-conductor.slack.com/join/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA#/shared-invite/email" rel="noopener noreferrer"&gt;Slack community&lt;/a&gt; and show us what you’ve built.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agenticworkflow</category>
      <category>interviewapp</category>
      <category>distributedapp</category>
    </item>
    <item>
      <title>SendGrid Webhooks for Email Nurturing Workflows: A Step-by-Step Guide</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Mon, 17 Mar 2025 09:17:41 +0000</pubDate>
      <link>https://dev.to/orkes/sendgrid-webhooks-for-email-nurturing-workflows-a-step-by-step-guide-1l8e</link>
      <guid>https://dev.to/orkes/sendgrid-webhooks-for-email-nurturing-workflows-a-step-by-step-guide-1l8e</guid>
      <description>&lt;p&gt;Did you know the average person receives around &lt;a href="https://www.campaignmonitor.com/resources/knowledge-base/how-many-emails-does-the-average-person-receive-per-day/#:~:text=Keeping%20all%20this%20in%20mind%2C%20experts%20generally%20agree%20that%20121%20business%20emails%20are%20sent%20and%20received%20each%20day" rel="noopener noreferrer"&gt;121 emails&lt;/a&gt; per day? With inboxes constantly flooded, how can your email stand out and earn that crucial click? The key lies in personalization and timing–&lt;strong&gt;sending the right email at the right moment based on user engagement.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Email nurturing is a powerful B2B strategy to build relationships with potential clients by guiding them through time-based campaigns. Whether it’s encouraging them to take an offer, sign up for a demo, or schedule a consultation, well-timed follow-ups can significantly improve lead conversion.&lt;/p&gt;

&lt;p&gt;SendGrid’s webhooks help automate this process by tracking real-time email events such as opens, clicks, bounces, and more. When integrated with a platform like Orkes Conductor, the Unified Application Platform, these events can trigger automated and personalized responses.&lt;/p&gt;

&lt;p&gt;This guide demonstrates how to leverage SendGrid webhooks to create an automated email nurturing workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building an email nurturing flow
&lt;/h2&gt;

&lt;p&gt;To illustrate how email nurturing works, let’s use the example of a product launch email campaign. &lt;/p&gt;

&lt;p&gt;When the campaign is sent, we consider two key scenarios: subscribers who open the email and those who click a link. To further nurture interest, follow-up emails are customized based on subscriber engagement.&lt;/p&gt;

&lt;p&gt;Here’s the workflow to achieve this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpflaqqxki8vakqb7nrzm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpflaqqxki8vakqb7nrzm.jpg" alt="Email Nurturing workflow created in Orkes Conductor" width="800" height="927"&gt;&lt;/a&gt;&lt;/p&gt;
emailNurturing workflow in Orkes Conductor



&lt;p&gt;The &lt;a href="https://orkes.io/content/reference-docs/system-tasks/wait-for-webhook" rel="noopener noreferrer"&gt;Wait for Webhook task&lt;/a&gt; listens for incoming event payloads from SendGrid webhooks, while the &lt;a href="https://orkes.io/content/reference-docs/operators/switch" rel="noopener noreferrer"&gt;Switch task&lt;/a&gt; determines the follow-up action based on whether the event is an open or a click.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://orkes.io/content/reference-docs/operators/wait" rel="noopener noreferrer"&gt;Wait task&lt;/a&gt; introduces a grace period before follow-up emails are sent via an &lt;a href="https://orkes.io/content/reference-docs/system-tasks/http" rel="noopener noreferrer"&gt;HTTP task&lt;/a&gt; using SendGrid’s API.&lt;/p&gt;

&lt;p&gt;Here’s an overview of the system we are going to build:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an email nurturing workflow in Conductor.&lt;/li&gt;
&lt;li&gt;Get the API key from the SendGrid account.&lt;/li&gt;
&lt;li&gt;Store the SendGrid API key as a Secret in Conductor.&lt;/li&gt;
&lt;li&gt;Create a webhook in Conductor.&lt;/li&gt;
&lt;li&gt;Configure a webhook event in SendGrid.&lt;/li&gt;
&lt;li&gt;Modify and run Conductor workflow.&lt;/li&gt;
&lt;li&gt;Create a Single Send in SendGrid.&lt;/li&gt;
&lt;li&gt;Automate the flow using Conductor’s Workflow Scheduler.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Follow the tutorial using the free &lt;a href="https://developer.orkescloud.com/" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;. Sign up for an account to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create an email nurturing workflow
&lt;/h2&gt;

&lt;p&gt;In Orkes Conductor, application flows can be built as JSON workflows using SDKs, APIs, or Conductor UI. &lt;/p&gt;

&lt;p&gt;In this tutorial, let’s create the workflow using Conductor UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To create the workflow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://developer.orkescloud.com/workflowDef" rel="noopener noreferrer"&gt;&lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Workflows&lt;/strong&gt;&lt;/a&gt; from the left navigation menu on your Conductor cluster. &lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Define workflow&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Code&lt;/strong&gt; tab on the right and paste the following code:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
 "name": "emailNurturing",
 "description": "An email nurturing flow",
 "version": 1,
 "tasks": [
   {
     "name": "webhook",
     "taskReferenceName": "webhook_ref",
     "inputParameters": {
       "matches": {
         "request[0].event": "${workflow.input.input}"
       }
     },
     "type": "WAIT_FOR_WEBHOOK"
   },
   {
     "name": "switch_event",
     "taskReferenceName": "switch_ref",
     "inputParameters": {
       "switchCaseValue": "${webhook_ref.output.request[0].event}"
     },
     "type": "SWITCH",
     "decisionCases": {
       "click": [
         {
           "name": "wait_before_click_follow_up",
           "taskReferenceName": "wait_ref_1",
           "inputParameters": {
             "duration": "10 seconds"
           },
           "type": "WAIT"
         },
         {
           "name": "send_click_follow_up_email",
           "taskReferenceName": "http_1_ref",
           "inputParameters": {
             "uri": "https://api.sendgrid.com/v3/mail/send",
             "method": "POST",
             "accept": "application/json",
             "contentType": "application/json",
             "encode": true,
             "body": {
               "personalizations": [
                 {
                   "to": [
                     {
                       "email": "${webhook_ref.output.request[0].email}"
                     }
                   ],
                   "subject": "🌟 Ready to Unlock the Full Potential of AI Agent?"
                 }
               ],
               "from": {
                 "email": "&amp;lt;SENDGRID-VERIFIED-EMAIL&amp;gt;"
               },
               "content": [
                 {
                   "type": "text/plain",
                   "value": "Hi,\n\nThank you for checking out the AI Agent—we noticed you took a closer look, and we’re excited to help you take the next step! 🚀\n\nOur AI Agent is designed to make your life easier, with a variety of powerful features that will save you time and boost your productivity:\n\n- Automate Repetitive Tasks: Let AI handle the routine stuff so you can focus on the bigger picture.\n- Personalized Assistance: Get 24/7 support tailored to your needs.\n- Seamless Integration: Easily connect AI Agent with the tools and platforms you already use.\n\n🛍 Here’s Your Special Offer:\n- 10% off when you sign up in 7 days.\n- Exclusive Early Access to all features, before they’re made available to the public.\n\n👉 Ready to get started? https://example.com\n\nWe truly believe the AI Agent can transform the way you work and would love for you to experience its benefits firsthand. If you have any questions or need assistance, don’t hesitate to reach out—we’re here to help!"
                 }
               ]
             },
             "headers": {
               "Authorization": "Bearer ${workflow.secrets.SendGrid}"
             }
           },
           "type": "HTTP"
         }
       ],
       "open": [
         {
           "name": "wait_before_open_follow_up",
           "taskReferenceName": "wait_ref",
           "inputParameters": {
             "duration": "10 seconds"
           },
           "type": "WAIT"
         },
         {
           "name": "send_open_follow_up_email",
           "taskReferenceName": "http_ref",
           "inputParameters": {
             "uri": "https://api.sendgrid.com/v3/mail/send",
             "method": "POST",
             "accept": "application/json",
             "contentType": "application/json",
             "encode": true,
             "body": {
               "personalizations": [
                 {
                   "to": [
                     {
                       "email": "${webhook_ref.output.request[0].email}"
                     }
                   ],
                   "subject": "Still Thinking About AI Agent? Here's What You Need to Know!"
                 }
               ],
               "from": {
                 "email": "&amp;lt;SENDGRID-VERIFIED-EMAIL&amp;gt;"
               },
               "content": [
                 {
                   "type": "text/plain",
                   "value": "Hi,\n\nWe noticed that you opened our email about the AI Agent—but haven’t had a chance to explore it fully yet. We wanted to make sure you don’t miss out on how this AI-powered tool can transform the way you work!\n\nHere’s a quick reminder of what AI Agent can do for you:\n\n- Automate Time-Consuming Tasks: Let the AI take over repetitive processes so you can focus on more important things.\n- 24/7 Personal Assistant: Get support whenever you need it—no matter the time of day.\n- Integrate with Your Workflow: Effortlessly connect AI Agent to your favorite tools for a seamless experience.\n\n💡 Why Act Now?\n- 10% off if you sign up in 7 days.\n- Exclusive Early Access: Be one of the first to harness the power of our AI Agent before it’s available to everyone!\n\n👉 **Don’t miss out: https://example.com\n\nWe truly believe that AI Agent will be a game-changer for you, and we'd love for you to experience it firsthand. If you have any questions or need more details, just reply to this email!\n\nLooking forward to hearing from you!\n\nBest regards,"
                 }
               ]
             },
             "headers": {
               "Authorization": "Bearer ${workflow.secrets.SendGrid}"
             }
           },
           "type": "HTTP"
         }
       ]
     },
     "defaultCase": [],
     "evaluatorType": "value-param",
     "expression": "switchCaseValue"
   }
 ],
 "inputParameters": [
   "input"
 ],
 "schemaVersion": 2
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Rename the workflow &lt;strong&gt;Name&lt;/strong&gt; to something unique.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; &amp;gt; &lt;strong&gt;Confirm&lt;/strong&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that the workflow is set up, the next step is to get the API keys from your SendGrid account.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2: Get the API key from the SendGrid account
&lt;/h2&gt;

&lt;p&gt;To send follow-up emails, Conductor’s HTTP task calls SendGrid's Send Message API. This API request is authenticated using the SendGrid API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To get the API key:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F403wrq9nwp2ci6gb2fyt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F403wrq9nwp2ci6gb2fyt.jpg" alt="Getting API keys from SendGrid" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;
Steps to generate and secure your SendGrid API key



&lt;ol&gt;
&lt;li&gt;Sign in to &lt;a href="https://mc.sendgrid.com/" rel="noopener noreferrer"&gt;SendGrid&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;API Keys&lt;/strong&gt; from the left navigation menu.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create API Key&lt;/strong&gt;, and generate the key with &lt;strong&gt;Full Access&lt;/strong&gt; permission.&lt;/li&gt;
&lt;li&gt;Copy and store the key.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that you have the API key, the next step is to store it as a secret in Conductor.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Store the SendGrid API key as a Secret in Conductor
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://orkes.io/content/developer-guides/secrets-in-conductor" rel="noopener noreferrer"&gt;Conductor’s Secrets&lt;/a&gt; feature provides a secure way to store sensitive information that workflow definitions should not expose. By storing these values as secrets, you can reference them within workflows without revealing the actual values. This ensures better security and helps maintain the confidentiality of critical data.&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://developer.orkescloud.com/secrets" rel="noopener noreferrer"&gt;&lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Secret&lt;/strong&gt;&lt;/a&gt; on your Conductor cluster to create a secret. Ensure that the &lt;strong&gt;Secret name&lt;/strong&gt; is &lt;strong&gt;SendGrid&lt;/strong&gt;, matching the secret name used in the workflow definition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdg7kps4mjvs0izmmtfr7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdg7kps4mjvs0izmmtfr7.jpg" alt="Creating a new secret in Orkes Conductor" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;
Storing the SendGrid API key as a secret in Orkes Conductor



&lt;p&gt;Your API key is now securely stored with Conductor. &lt;/p&gt;

&lt;p&gt;Returning to your workflow, you can verify that this secret authorizes the SendGrid API request within the HTTP task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fr6cs4h4e4xj6rhge8u3o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fr6cs4h4e4xj6rhge8u3o.jpg" alt="Using secret in Orkes Conductor workflows" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;
Authenticating API requests without exposing keys


&lt;h2&gt;
  
  
  Step 4: Create a webhook in Conductor
&lt;/h2&gt;

&lt;p&gt;The next step is to create a webhook in Conductor that will listen for events coming from SendGrid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To create a webhook:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://developer.orkescloud.com/configure-webhooks" rel="noopener noreferrer"&gt;&lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Webhook&lt;/strong&gt;&lt;/a&gt; from the left navigation menu on your Conductor cluster.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ New webhook&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure the following parameters:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Webhook name&lt;/strong&gt;, enter a unique name for the webhook.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Workflows to receive Webhook event&lt;/strong&gt;, select the workflow created in Step 1.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Source platform&lt;/strong&gt; as &lt;strong&gt;SendGrid&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9liqe0sch0r9n5bjso8v.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9liqe0sch0r9n5bjso8v.jpg" alt="Creating a new webhook in Orkes Conductor" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;
Creating a webhook in Orkes Conductor



&lt;p&gt;An unverified webhook URL will be generated, which is to be copied to the SendGrid webhook.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 5: Configure an event webhook in SendGrid
&lt;/h2&gt;

&lt;p&gt;Next, you must set up an event webhook in SendGrid to send events to your Conductor webhook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To create an event webhook in SendGrid:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;&lt;a href="https://app.sendgrid.com/settings/mail_settings" rel="noopener noreferrer"&gt;Mail Settings&lt;/a&gt;&lt;/strong&gt; from the left menu on your SendGrid Console.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Webhook Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Event Webhooks&lt;/strong&gt;, select &lt;strong&gt;Create new Webhook&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure the following parameters:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Provide a &lt;strong&gt;Friendly Name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Post URL&lt;/strong&gt;, enter the unverified webhook URL generated in Conductor &lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Actions to be posted&lt;/strong&gt;, select &lt;strong&gt;Opened&lt;/strong&gt; and &lt;strong&gt;Clicked&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Signature verification&lt;/strong&gt;, toggle on &lt;strong&gt;Enable Signed Event Webhook&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fu0zq1lnhrv6yuqysqwzb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fu0zq1lnhrv6yuqysqwzb.jpg" alt="Configuring an event webhook in SendGrid" width="800" height="1070"&gt;&lt;/a&gt;&lt;/p&gt;
Setting up a SendGrid Event Webhook to track email opens and clicks



&lt;p&gt;Next, copy the &lt;strong&gt;Verification key&lt;/strong&gt; from SendGrid and paste it into the Conductor webhook.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2ig62k4arjfmghlj7l9u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2ig62k4arjfmghlj7l9u.jpg" alt="Copying verification key from SendGrid webhook to Orkes Conductor webhook" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;
Copying SendGrid verification key to Orkes Conductor webhook



&lt;p&gt;To verify the webhook URL, go back to SendGrid and select &lt;strong&gt;Test Integration&lt;/strong&gt;. This sends a test event to the Conductor webhook, verifying the URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fq7bq0wc1kcyt9t0a7kuu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fq7bq0wc1kcyt9t0a7kuu.jpg" alt="Webhook verification" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;
Webhook verification in Conductor


&lt;h2&gt;
  
  
  Step 6: Modify and run Conductor workflow
&lt;/h2&gt;

&lt;p&gt;Before running the workflow, you need to modify it to include the verified SendGrid sender email, which will be used when sending the campaigns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To modify the workflow definition:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your workflow definition, and select &lt;strong&gt;send_open_follow_up_email&lt;/strong&gt; task.&lt;/li&gt;
&lt;li&gt;Update the &lt;strong&gt;From&lt;/strong&gt; email address to your SendGrid account’s verified sender email.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhdvdtsxfcbwi1lxei9s3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhdvdtsxfcbwi1lxei9s3.jpg" alt="Modifying workflow to update the email address" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;
Modifying workflow 



&lt;ol&gt;
&lt;li&gt;Repeat Step 2 for the &lt;strong&gt;send_click_follow_up_email&lt;/strong&gt; task.&lt;/li&gt;
&lt;li&gt;Save the workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Now, let's run the workflow.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://orkes.io/content/reference-docs/system-tasks/wait-for-webhook#writing-custom-matches" rel="noopener noreferrer"&gt;Wait for Webhook’s task input matches&lt;/a&gt; are wired to the workflow input:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   "inputParameters": {
       "matches": {
         "request[0].event": "${workflow.input.input}"
       }
     }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Since the workflow is designed to send follow-up emails on "opened" or "clicked" events, the &lt;a href="https://www.twilio.com/docs/sendgrid/for-developers/tracking-events/event#engagement-events" rel="noopener noreferrer"&gt;SendGrid webhook event payloads&lt;/a&gt; are &lt;strong&gt;open&lt;/strong&gt; and &lt;strong&gt;click&lt;/strong&gt;, respectively.&lt;/p&gt;

&lt;p&gt;For testing purposes, we’ll start with an &lt;strong&gt;open&lt;/strong&gt; event. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Run&lt;/strong&gt; tab and provide the input parameter.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
 "input": "open"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Run workflow&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workflow is now running and waiting for events from SendGrid.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 7: Create a Single Send in SendGrid
&lt;/h2&gt;

&lt;p&gt;Next, let's send the SendGrid campaign. Campaigns are scheduled in production, but here, we’ll create a Single Send to test the workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.twilio.com/docs/sendgrid/ui/sending-email/sender-verification" rel="noopener noreferrer"&gt;The sender email should be verified&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twilio.com/docs/sendgrid/ui/managing-contacts/create-and-manage-contacts" rel="noopener noreferrer"&gt;A contact list must be created&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;To create a single send:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Marketing&lt;/strong&gt; &amp;gt; &lt;strong&gt;Single Send&lt;/strong&gt; from the left menu on your SendGrid console.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create a Single Send&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Draft your email content.&lt;/li&gt;
&lt;li&gt;Configure the Single Send settings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4oo25rd2lm9bz53w8ck6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4oo25rd2lm9bz53w8ck6.jpg" alt="Creating a single send in SendGrid" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;
Creating a single send in SendGrid



&lt;ol&gt;
&lt;li&gt;Ensure the &lt;strong&gt;From&lt;/strong&gt; Sender email matches the one used in the HTTP task.&lt;/li&gt;
&lt;li&gt;Review the email content and select &lt;strong&gt;Review Details and Send&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This schedules the email to be sent immediately, typically within 2 minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffvi5flrgu5kovj2wzr4x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffvi5flrgu5kovj2wzr4x.jpg" alt="Initial campaign received" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;
An end user's first touchpoint in the nurture journey



&lt;p&gt;When the recipient opens the email (one of the events configured in the SendGrid webhook), the event triggers and is sent to the Conductor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F22spk4dnokzunhglqvyt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F22spk4dnokzunhglqvyt.jpg" alt="Webhook event triggered and received in Conductor" width="800" height="748"&gt;&lt;/a&gt;&lt;/p&gt;
SendGrid logs an interaction, triggering the webhook event to Conductor



&lt;p&gt;Checking the workflow execution, you can verify that the Wait for Webhook task is completed and the workflow proceeds with the “open” case.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F89kej9k7hv4p8h7qlfw9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F89kej9k7hv4p8h7qlfw9.jpg" alt="Workflow triggered based on event payload received via Webhook" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;
Workflow triggered by Webhook event



&lt;p&gt;The wait task is configured for 10 seconds for testing purposes. In a production environment, the follow up emails are ideally sent after 3-4 days, so the Wait task must be adjusted accordingly.&lt;/p&gt;

&lt;p&gt;After 10 seconds, a follow-up email is sent via the SendGrid API, and the workflow completes successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2qql5rgx9j4xo3lvau0s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2qql5rgx9j4xo3lvau0s.jpg" alt="Follow-up email received for the open event" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;
A personalized response triggered by user behavior



&lt;p&gt;Similarly, you can trigger the workflow for a “click” event.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 8: Automate using Workflow Scheduler
&lt;/h2&gt;

&lt;p&gt;The final step is automating the workflow to run in sync with your SendGrid campaigns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Before automation, update the workflow's wait period to 3 or 4 days, depending on when you want to send the follow-up email.&lt;/p&gt;

&lt;p&gt;For example, let’s say your product launch email is scheduled on the last day of the month.&lt;/p&gt;

&lt;p&gt;Now, we need to create a workflow schedule that will trigger the workflow simultaneously with both inputs (“open” and “click”), automating the entire process.&lt;/p&gt;

&lt;p&gt;To trigger the workflow simultaneously for an “open” event, create a &lt;a href="https://orkes.io/content/developer-guides/scheduling-workflows" rel="noopener noreferrer"&gt;Workflow Schedule&lt;/a&gt; and use cron expressions to run it on the last day of the month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmfdkdafwwclcnq8cq0qg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmfdkdafwwclcnq8cq0qg.jpg" alt="Workflow scheduled to run at specified time" width="800" height="1194"&gt;&lt;/a&gt;&lt;/p&gt;
Workflow scheduled for the last day of the month for “open” event



&lt;p&gt;Similarly, another schedule can be created for the “click” event using Conductor's clone functionality. You can clone the schedule and update the workflow input accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F39jxf06n1eg405hinpib.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F39jxf06n1eg405hinpib.jpg" alt="Cloning workflow scheduler in Orkes Conductor" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;
Clone and tweak schedules for flexible automation



&lt;p&gt;Here’s the cloned schedule for the “click” event:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fik69yzrp3rcm2t44ltfc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fik69yzrp3rcm2t44ltfc.jpg" alt="Workflow scheduled to run at specified time" width="800" height="1194"&gt;&lt;/a&gt;&lt;/p&gt;
Workflow scheduled for the last day of the month for “click” event



&lt;p&gt;With the workflow schedulers in place, both the "open" and "click" workflows will be triggered along with the corresponding email campaigns from SendGrid.&lt;/p&gt;

&lt;p&gt;Congratulations! You've successfully created an automated email nurturing flow for a product launch campaign. This workflow can now be reused for future product launches, ensuring a streamlined process. You can also leverage features like &lt;a href="https://orkes.io/content/faqs/workflow-versioning" rel="noopener noreferrer"&gt;Workflow Versioning&lt;/a&gt; to manage different email content for A/B testing.&lt;/p&gt;

&lt;p&gt;Feel free to modify the workflow further to suit your needs—whether by adding more follow-up emails or customizing actions based on user behavior.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/watch?si=1E8g1NKQo3JreAun&amp;amp;v=MlWeNnWW-FY&amp;amp;feature=youtu.be" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;



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

&lt;p&gt;Using SendGrid webhooks in Conductor, you’ve created an automated email nurturing workflow that responds to user interactions. This reusable flow streamlines future product launches and campaigns, enabling you to focus on optimizing strategies instead of managing responses manually.&lt;/p&gt;

&lt;p&gt;–&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/?utm_campaign=sendgrid-webhook-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>tutorial</category>
      <category>learning</category>
      <category>development</category>
    </item>
    <item>
      <title>Ensuring 99.999% Uptime: Why Service Uptime Monitoring is Crucial</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Tue, 25 Feb 2025 11:13:25 +0000</pubDate>
      <link>https://dev.to/orkes/ensuring-99999-uptime-why-service-uptime-monitoring-is-crucial-49al</link>
      <guid>https://dev.to/orkes/ensuring-99999-uptime-why-service-uptime-monitoring-is-crucial-49al</guid>
      <description>&lt;p&gt;How often have you been frustrated by a website that’s down, taking forever to return online? If it happens too frequently, would you trust that platform again? Probably not.&lt;/p&gt;

&lt;p&gt;With businesses running 24/7, downtime is more than just an inconvenience–it’s a direct hit to customer trust and revenue. Studies reveal that businesses can lose thousands of dollars for every hour of downtime. This is why businesses strive for “five-nines” (99.999%) uptime, with an average of less than &lt;strong&gt;&lt;em&gt;6 minutes of downtime annually&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Major outages can bring businesses to a standstill, leading to frustrated customers. This is where uptime monitoring becomes crucial to minimize potential losses. By proactively detecting downtime, businesses can prevent significant disruptions, keep things running smoothly, and build reliable services.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore why service uptime monitoring is essential for modern businesses and how Orkes Conductor can help implement application flows to monitor HTTP endpoint availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is service uptime monitoring?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Service uptime monitoring is a process of monitoring and managing critical services, such as a website or application, to ensure they remain accessible 24/7.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz6joctzp3ug9gguxqdqn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz6joctzp3ug9gguxqdqn.jpg" alt="Service uptime monitoring is a process of monitoring and managing critical services" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With continuous monitoring, businesses can receive automated alerts when disruptions occur, allowing them to take immediate action. A robust system can notify relevant team members about any detected downtimes via multiple communication channels, ensuring the right team members can respond promptly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use service uptime monitoring?
&lt;/h3&gt;

&lt;p&gt;The demand for fast and reliable online services has always been higher, especially with the growing shift toward digital services. For instance, the increasing trend of digital payments is rapidly replacing traditional cash transactions. &lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://corporate.visa.com/en/sites/visa-perspectives/trends-insights/top-trends-shaping-2025-payments.html" rel="noopener noreferrer"&gt;Visa Perspective’s Top trends shaping 2025 payments&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpbxbsl0jwrk6jyrd3hpb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpbxbsl0jwrk6jyrd3hpb.jpg" alt="Digital payment quote from Visa Perspective" width="800" height="418"&gt;&lt;/a&gt;Source: Visa Perspective&lt;/p&gt;

&lt;p&gt;The payment industry is just one example of the growing shift toward online services. Industries like e-commerce and others are also witnessing increased consumer demand for digital platforms. As more businesses move toward online services, ensuring uptime monitoring becomes vital. By keeping track of service status, you can identify potential issues—such as outages, performance slowdowns, or errors—before they escalate into major problems.&lt;/p&gt;

&lt;p&gt;Here are a few reasons why uptime monitoring is a must for businesses today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Prevent reputation damage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outages can severely damage your organization’s reputation. Frustrated users experiencing downtime may leave negative reviews, vent on social media, or decide to switch to a competitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Meet Service Level Agreements (SLAs)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many businesses establish Service Level Agreements (SLAs) to meet specific performance standards. Failure to detect an outage can lead to missed SLAs, potentially resulting in contract violations and penalties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Minimize loss of revenue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Downtime can directly impact revenue for businesses that rely on online sales and transactions. Customers may be unable to access services or complete purchases, leading to missed sales opportunities.&lt;/p&gt;

&lt;p&gt;Consistent service uptime monitoring is essential to overcome these challenges. It ensures your services are quickly restored, minimizing disruptions and enhancing the user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a service uptime monitoring with Orkes Conductor
&lt;/h2&gt;

&lt;p&gt;Orkes Conductor, the leading workflow orchestration platform, can be leveraged to build a service uptime monitoring system that fits your business operations. Unlike off-the-shelf monitoring tools, Orkes Conductor gives you full control over uptime checks, allowing you to customize logic to fit your exact business needs. Let’s walk through building the service uptime monitoring flow.&lt;/p&gt;

&lt;p&gt;To get started, simply create a free account in &lt;a href="https://developer.orkescloud.com/?utm_campaign=service-uptime-monitoring-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt; and follow along with the tutorial. This example is available as a ready-to-use template. For more details, check out the &lt;a href="https://orkes.io/content/templates/availability-monitoring-for-http-endpoints" rel="noopener noreferrer"&gt;Availability Monitoring for HTTP Endpoints&lt;/a&gt; documentation to learn how to import and use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Service uptime monitoring flow
&lt;/h3&gt;

&lt;p&gt;Let’s break down the logic for the service uptime monitoring system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The system checks the service endpoint for availability.&lt;/li&gt;
&lt;li&gt;It retrieves the server’s timestamp and status code.&lt;/li&gt;
&lt;li&gt;If downtime is detected, a notification is sent via the preferred channel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's build the workflows that will orchestrate this monitoring system. Here’s an overview of the service uptime monitoring system we are going to build:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a workflow to monitor the endpoints.&lt;/li&gt;
&lt;li&gt;Create a separate workflow for sending downtime notifications and call it as a sub-workflow.&lt;/li&gt;
&lt;li&gt;Automate the monitoring workflow to run every 2 minutes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Part 1: Availability monitoring
&lt;/h4&gt;

&lt;p&gt;The first part of the service uptime monitoring system checks the endpoint’s availability. This process can be accomplished by creating a &lt;em&gt;Monitor-HTTP-Endpoint-Availability&lt;/em&gt; workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Check the endpoint availability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step is to check if the HTTP(s) endpoints are available. To check the availability, create an &lt;a href="https://orkes.io/content/reference-docs/system-tasks/http" rel="noopener noreferrer"&gt;HTTP task&lt;/a&gt; in your Conductor workflow. Configure the endpoint method, URL, and other parameters. When the workflow is executed, it will call the endpoint and retrieve the response. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvrb2ii3bf9shyqu0nfwg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvrb2ii3bf9shyqu0nfwg.jpg" alt="HTTP task making a call to an endpoint for receiving the response" width="800" height="454"&gt;&lt;/a&gt;Use an HTTP task in Orkes Conductor to call an endpoint&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Retrieve the timestamp&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the server is down, it’s essential to know when the downtime was detected. To achieve this, use an &lt;a href="https://orkes.io/content/reference-docs/system-tasks/inline" rel="noopener noreferrer"&gt;Inline task&lt;/a&gt; that extracts the timestamp when the response was received. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fswtk9ordfrnqso50amrf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fswtk9ordfrnqso50amrf.jpg" alt="Inline task extracting the timestamp when the response was received" width="800" height="454"&gt;&lt;/a&gt;Use an Inline task in Orkes Conductor to extract the timestamp&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Evaluate the server’s status code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use the &lt;a href="https://orkes.io/content/reference-docs/operators/switch" rel="noopener noreferrer"&gt;Switch task&lt;/a&gt; in your Conductor workflow to evaluate the response from the HTTP task. If the response indicates success, the workflow will terminate. If failure is detected, the workflow will proceed to the next part, which involves notifying the appropriate team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fn7g581o9wjlj88n5p4we.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fn7g581o9wjlj88n5p4we.jpg" alt="Switch task evaluating the response from the HTTP task" width="800" height="418"&gt;&lt;/a&gt;Use the Switch task in Orkes Conductor to evaluate the response from the previous HTTP task&lt;/p&gt;

&lt;p&gt;The sample workflow input includes the notification method (e.g., SMS), the endpoint URL to be monitored, and the sender/receiver information for notifications.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"notification_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SMS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"endpoint_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"notification_from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"14XXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"notification_to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"12XXXXXXXX"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the full &lt;em&gt;Monitor-HTTP-Endpoint-Availability&lt;/em&gt; workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1sqofa8671yx0014fywh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1sqofa8671yx0014fywh.jpg" alt="Conductor workflow for monitoring HTTP endpoint availability" width="800" height="1175"&gt;&lt;/a&gt;Monitor-HTTP-Endpoint-Availability workflow in Orkes Conductor&lt;/p&gt;

&lt;p&gt;The notification step is incorporated as a &lt;a href="https://orkes.io/content/reference-docs/operators/sub-workflow" rel="noopener noreferrer"&gt;Sub Workflow&lt;/a&gt;, which facilitates best practices in modularization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fclg502udkk5jbob8o1wq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fclg502udkk5jbob8o1wq.jpg" alt="Calling notification flow as a sub workflow " width="800" height="392"&gt;&lt;/a&gt;Using the Sub Workflow task to call the notification workflow&lt;/p&gt;

&lt;p&gt;Sub Workflows in Conductor simplifies workflow management, making it easy to reuse common workflows across multiple processes.&lt;/p&gt;

&lt;p&gt;The notification system is a typical flow within an organization when building applications. Creating a dedicated workflow for your organization’s payment system that integrates all notification methods allows you to easily adapt your notification flow to different application processes using the Sub Workflow functionality in Conductor.&lt;/p&gt;

&lt;h4&gt;
  
  
  Part 2: Notifying users
&lt;/h4&gt;

&lt;p&gt;Once the endpoint is monitored and downtime is detected, the next part is to notify the corresponding team members to take action. This is where the second part of the application flow is to be implemented. For this second part, let’s build a &lt;em&gt;Notify-Channels&lt;/em&gt; workflow that sends notifications via the preferred channel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Check the preferred notification method&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's add a &lt;a href="https://orkes.io/content/reference-docs/operators/switch" rel="noopener noreferrer"&gt;Switch task&lt;/a&gt; to a new workflow to assess the input and determine the preferred notification method.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fn8x0oa4gerayu5x5qo6f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fn8x0oa4gerayu5x5qo6f.jpg" alt="Switch case evaluation on input parameters" width="800" height="454"&gt;&lt;/a&gt;Using the Switch task to evaluate the switch condition based on workflow inputs&lt;/p&gt;

&lt;p&gt;The Switch task evaluates the workflow input and proceeds along the appropriate path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Send notification via the preferred channel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the chosen notification type, the next step is to send the service downtime alert through the selected channel. In this workflow, we’ve defined four cases: SMS, email, Slack, and PagerDuty.&lt;/p&gt;

&lt;p&gt;Here’s an example of a flow that sends notifications via SMS using Twilio as the provider.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6q4j72u1baavxwbaf11x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6q4j72u1baavxwbaf11x.jpg" alt="Sample SMS notification flow via Twilio" width="800" height="586"&gt;&lt;/a&gt;The notification flow for alerting through SMS via Twilio in Orkes Conductor&lt;/p&gt;

&lt;p&gt;The workflow is set up to send notifications via SMS using Twilio, emails through SendGrid, Slack channel alerts, and PagerDuty notifications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fse0cgsboldpgmzuz5m7y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fse0cgsboldpgmzuz5m7y.jpg" alt="Sample notification flow " width="800" height="408"&gt;&lt;/a&gt;The notification flow for alerting through multiple channels&lt;/p&gt;

&lt;p&gt;The notification method here is not restricted to just four channels. Adding more switch cases allows you to incorporate other notification systems to accommodate the organization’s preferences. &lt;/p&gt;

&lt;p&gt;Here is the full &lt;em&gt;Notify-Channels&lt;/em&gt; workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6tqas45xk0urjlkip0ie.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6tqas45xk0urjlkip0ie.jpg" alt="Conductor workflow for notifying users via multiple channels" width="800" height="586"&gt;&lt;/a&gt;Notify-Channels workflow in Orkes Conductor&lt;/p&gt;

&lt;h4&gt;
  
  
  Part 3: Automating the monitoring process
&lt;/h4&gt;

&lt;p&gt;The final part is automating the monitoring process to check the endpoint availability every 2 minutes to achieve 99.999% uptime.&lt;/p&gt;

&lt;p&gt;For this, create a &lt;a href="https://orkes.io/content/developer-guides/scheduling-workflows" rel="noopener noreferrer"&gt;Workflow Scheduler&lt;/a&gt; in Conductor, using cron expressions to set the workflow to run every 2 minutes. Once configured, Conductor will automatically trigger the workflow every 2 minutes without requiring any further action from the user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3or7148d5nq9kdlgjsoe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3or7148d5nq9kdlgjsoe.jpg" alt="Workflow scheduler for running every 2 mins" width="800" height="1206"&gt;&lt;/a&gt;Monitor HTTP Endpoints Availability workflow scheduled to run every 2 mins&lt;/p&gt;

&lt;p&gt;The ability to schedule workflows using cron expression greatly streamlines the automation of your workflows. Conductor further enhances this experience by supporting different time zones, avoiding the need for manual time conversions. Yet another outstanding feature of Scheduler is its user-friendly interface, which displays upcoming scheduled runs, allowing you to verify and confirm your schedules easily.&lt;/p&gt;

&lt;p&gt;While this uptime monitoring system is a simple version, you can use Orkes Conductor to extend the flow further to suit your specific application needs.&lt;/p&gt;

&lt;p&gt;This workflow is available as an out-of-box template, allowing you to receive alerts via PagerDuty, Slack, SMS, and email. For more details, check out the &lt;a href="https://orkes.io/content/templates/availability-monitoring-for-http-endpoints" rel="noopener noreferrer"&gt;Availability Monitoring for HTTP Endpoints&lt;/a&gt; documentation to learn how to import and use the template.&lt;/p&gt;

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

&lt;p&gt;Uptime monitoring of services is crucial for a business to thrive, as it directly impacts revenue. By leveraging tools like &lt;a href="https://www.orkes.io/platform" rel="noopener noreferrer"&gt;Orkes Conductor&lt;/a&gt;, you can build an automated monitoring system to track your services 24/7 to achieve 99.999% uptime. This, in turn, can decrease the customer churn rate and ultimately enhance customer satisfaction and loyalty.&lt;br&gt;
–&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/?utm_campaign=service-uptime-monitoring-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>uptime</category>
      <category>microservices</category>
      <category>monitoring</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Build an AI Application for Document Classification: A Step-by-Step Guide</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Thu, 06 Feb 2025 06:43:08 +0000</pubDate>
      <link>https://dev.to/orkes/build-an-ai-application-for-document-classification-a-step-by-step-guide-3fcg</link>
      <guid>https://dev.to/orkes/build-an-ai-application-for-document-classification-a-step-by-step-guide-3fcg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is Part 2 of the AI App Development series, which will demonstrate how to build an application that uses LLMs to automate document classification. Check out Part 1 for a use case on &lt;a href="https://dev.to/orkes/how-to-develop-an-ai-application-step-by-step-using-orkes-conductor-106d"&gt;summarizing an article&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a modern data-driven world, organizations handle an ever-growing volume of documents, ranging from invoices and contracts to reports and records. Manually sorting and categorizing these documents is now a thing of the past—a daunting task that is time-consuming, resource-intensive, and prone to human error. Misclassifications can lead to operational inefficiencies, compliance risks, and increased costs.&lt;/p&gt;

&lt;p&gt;AI-powered document classification automates this process, enabling organizations to handle large volumes of documents quickly and accurately.&lt;/p&gt;

&lt;p&gt;This blog will demonstrate how to build an AI application that classifies your documents using Orkes Conductor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a document classifier application flow
&lt;/h2&gt;

&lt;p&gt;Document classification is the process of classifying documents into predefined categories based on their content. It is widely used across industries to streamline the sorting, categorizing, and processing of large volumes of documents. &lt;/p&gt;

&lt;p&gt;In this tutorial, we’ll create an AI application flow that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identifies PDF documents from a given URL.&lt;/li&gt;
&lt;li&gt;Classifies them into predefined categories such as W2 forms, driving licenses, pay stubs, employment verification letters, or mortgage applications. &lt;/li&gt;
&lt;li&gt;Handles errors for unsupported file types.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s break down the workflow logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fae74j6f1gsqacfjmd7eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fae74j6f1gsqacfjmd7eu.png" alt="AI-powered document classification workflow" width="784" height="1800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The workflow begins with a &lt;a href="https://orkes.io/content/reference-docs/operators/switch" rel="noopener noreferrer"&gt;Switch task&lt;/a&gt; that evaluates whether the input document URL points to a PDF file (i.e., has a .pdf extension). Based on the evaluation, it then follows one of the two cases: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmsjyvh62ig5l1j3u5c1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmsjyvh62ig5l1j3u5c1a.png" alt="Switch case evaluating if the input file is a PDF or not" width="800" height="926"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;defaultCase&lt;/strong&gt;–Triggered if the input file is not a PDF. The workflow proceeds to an &lt;a href="https://orkes.io/content/reference-docs/system-tasks/inline" rel="noopener noreferrer"&gt;Inline task&lt;/a&gt; that generates an error message indicating the unsupported file type, followed by a &lt;a href="https://orkes.io/content/reference-docs/operators/terminate" rel="noopener noreferrer"&gt;Terminate task&lt;/a&gt; that halts the workflow and displays the error message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF&lt;/strong&gt;–Triggered if the input file is a PDF. The workflow then moves to a &lt;a href="https://orkes.io/content/reference-docs/ai-tasks/llm-get-document" rel="noopener noreferrer"&gt;Get Document task&lt;/a&gt; that retrieves the PDF content. If the file is text-based, this task extracts the text from the document.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next step involves another &lt;a href="https://orkes.io/content/reference-docs/operators/switch" rel="noopener noreferrer"&gt;Switch task&lt;/a&gt; that evaluates the output from the Get Document task. If the document is text-based, the &lt;strong&gt;defaultCase&lt;/strong&gt; is executed. If the document is non-text-based, the workflow routes to the &lt;strong&gt;ocr_processing&lt;/strong&gt; case, which uses Optical Character Recognition (OCR) to process the image content in the PDF.&lt;/p&gt;

&lt;p&gt;An OCR-based &lt;a href="https://orkes.io/content/reference-docs/worker-task" rel="noopener noreferrer"&gt;Worker task&lt;/a&gt; (Simple) then extracts the image content from the PDF. This task requires an external worker, set up outside the Conductor, to poll for the task.&lt;/p&gt;

&lt;p&gt;Following that, an &lt;a href="https://orkes.io/content/reference-docs/system-tasks/inline" rel="noopener noreferrer"&gt;Inline task&lt;/a&gt; formats the extracted text, preparing it for the document classification process. The classification step involves an &lt;a href="https://orkes.io/content/reference-docs/ai-tasks/llm-text-complete" rel="noopener noreferrer"&gt;LLM Text Complete task&lt;/a&gt; that uses a prompt to categorize the document into different categories. The task leverages a &lt;a href="https://orkes.io/content/reference-docs/ai-tasks/prompt-template" rel="noopener noreferrer"&gt;prompt template&lt;/a&gt; created within Conductor to determine the file’s type,&lt;/p&gt;

&lt;p&gt;Finally, the workflow concludes with an Inline task that extracts, formats, and publishes the classification results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create a document classifier workflow
&lt;/h2&gt;

&lt;p&gt;To follow the tutorial, let’s use the free &lt;a href="https://developer.orkescloud.com/?utm_campaign=ai-app-doc-classifier-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;. Create an account to get started.&lt;/p&gt;

&lt;p&gt;You can create application flows as JSON workflows in Conductor using SDKs, APIs, or Conductor UI. For easier testing, let’s create a workflow in the Conductor UI.&lt;/p&gt;

&lt;p&gt;First, let's define the worker task that will be part of the workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To create a task definition:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://developer.orkescloud.com/?utm_campaign=ai-app-doc-classifier-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In the left navigation menu, select &lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Task&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Define task&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Name&lt;/strong&gt;, enter &lt;em&gt;extractTextFromPDF&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Description&lt;/strong&gt;, enter a brief explanation of the task’s purpose.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; &amp;gt; &lt;strong&gt;Confirm Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, let's create a workflow that includes this task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To create the workflow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Workflow&lt;/strong&gt; from the left navigation menu.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Define workflow&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Code&lt;/strong&gt; tab on the right and paste the following JSON code:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
 "name": "document_classifier_workflow",
 "description": "LLM Powered PDF Document Classification Workflow",
 "version": 1,
 "tasks": [
   {
     "name": "check_for_pdf",
     "taskReferenceName": "check_for_pdf_ref",
     "inputParameters": {
       "url": "${workflow.input.document_url}"
     },
     "type": "SWITCH",
     "decisionCases": {
       "PDF": [
         {
           "name": "get_document_task",
           "taskReferenceName": "get_document_task_ref",
           "inputParameters": {
             "url": "${workflow.input.document_url}",
             "mediaType": "application/pdf"
           },
           "type": "GET_DOCUMENT"
         },
         {
           "name": "check_for_output",
           "taskReferenceName": "check_for_output_ref",
           "inputParameters": {
             "textOutput": "${get_document_task_ref.output.result}"
           },
           "type": "SWITCH",
           "decisionCases": {
             "ocr_processing": [
               {
                 "name": "extractTextFromPDF",
                 "taskReferenceName": "extractTextFromPDF_ref",
                 "inputParameters": {
                   "pdfUrl": "${workflow.input.document_url}"
                 },
                 "type": "SIMPLE"
               }
             ]
           },
           "evaluatorType": "graaljs",
           "expression": "(function () {\n   if($.textOutput === \"\\n\"){\n    return \"ocr_processing\"\n   }\n   return \"defaultCase\"\n  }())"
         },
         {
           "name": "evaluate_text",
           "taskReferenceName": "evaluate_text_ref",
           "inputParameters": {
             "expression": "(function () {\n  if($.getDocumentText === \"\\n\"){\n    const output = $.ocrText.results.map((item) =&amp;gt; \n    \"PageNumber: \"+item.page+\"\\nContent: \"+item.text\n  ).join('\\n\\n');\n  \n    return output\n  }\n  return $.getDocumentText;\n})();",
             "evaluatorType": "graaljs",
             "getDocumentText": "${get_document_task_ref.output.result}",
             "ocrText": "${extractTextFromPDF_ref.output}"
           },
           "type": "INLINE"
         },
         {
           "name": "classify_using_llm",
           "taskReferenceName": "classify_using_llm",
           "inputParameters": {
             "promptName": "your-prompt-template",
             "promptVariables": {
               "text": "${evaluate_text_ref.output.result}"
             },
             "llmProvider": "your-llm-provider",
             "model": "your-llm-model"
           },
           "type": "LLM_TEXT_COMPLETE"
         },
         {
           "name": "extract_classification",
           "taskReferenceName": "extract_classification",
           "inputParameters": {
             "expression": "(function(){ \n  let llmResult = new String($.llmResult).trim();\n  if(llmResult === 'NO_MATCH') {\n    return \"This document couldn't be classified by the LLM\";\n  }\n  return \"LLM classified this document as: \" + llmResult;\n})();",
             "evaluatorType": "graaljs",
             "llmResult": "${classify_using_llm.output.result}"
           },
           "type": "INLINE"
         }
       ]
     },
     "defaultCase": [
       {
         "name": "generate_error",
         "taskReferenceName": "generate_error_ref",
         "inputParameters": {
           "expression": "(function(){ \n\n  return \"The filename supplied: \" + $.filename + \" is an unsupported file type. Please try again with a .pdf file\";\n})();",
           "evaluatorType": "graaljs",
           "filename": "${workflow.input.document_url}"
         },
         "type": "INLINE"
       },
       {
         "name": "terminate_task",
         "taskReferenceName": "terminate_task_ref",
         "inputParameters": {
           "terminationStatus": "TERMINATED",
           "terminationReason": "Unsupported file type",
           "workflowOutput": {
             "result": "${generate_error_ref.output}"
           }
         },
         "type": "TERMINATE"
       }
     ],
     "evaluatorType": "graaljs",
     "expression": "$.url.toLowerCase().trim().endsWith(\"pdf\") ? \"PDF\" : \"NOT_SUPPORTED\";"
   }
 ],
 "inputParameters": [
   "document_url"
 ],
 "schemaVersion": 2
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Change the workflow &lt;strong&gt;Name&lt;/strong&gt; to something unique.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; &amp;gt; &lt;strong&gt;Confirm&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that your workflow is set up, the next step is configuring an OCR worker to extract content from non-text-based PDFs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Set up OCR worker
&lt;/h2&gt;

&lt;p&gt;In this example, we will set up the OCR worker project using Node.js. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js version 20.18.2 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To connect your Node.js worker with Conductor, you need access keys from an application in Orkes Conductor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To generate the access keys:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://developer.orkescloud.com/?utm_campaign=ai-app-doc-classifier-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In the left navigation menu, select &lt;strong&gt;Access Control&lt;/strong&gt; &amp;gt; &lt;strong&gt;Applications&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Create application&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;Name&lt;/strong&gt; for the application, and select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Application roles&lt;/strong&gt;, enable the &lt;strong&gt;Worker&lt;/strong&gt; role.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Access Keys&lt;/strong&gt;, select &lt;strong&gt;+ Create access key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;Key Id&lt;/strong&gt; and &lt;strong&gt;Key Secret&lt;/strong&gt; and store them securely. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: If you're following this tutorial with &lt;a href="https://developer.orkescloud.com/?utm_campaign=ai-app-doc-classifier-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;, you can skip the steps below. However, if you're using your own Conductor cluster, you must enable additional permissions for tasks and workflows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In your application’s &lt;strong&gt;Permission&lt;/strong&gt; section, select &lt;strong&gt;+ Add permission&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Workflow&lt;/strong&gt; tab, search for your workflow and turn on READ and EXECUTE permissions.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Task&lt;/strong&gt; tab, search for the task &lt;em&gt;extractTextFromPDF&lt;/em&gt; and turn on READ and EXECUTE permissions.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add permissions&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fy14xrjasqucnclp5o2wo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fy14xrjasqucnclp5o2wo.png" alt="Granting app permissions for tasks and workflows" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To set up a Node.js worker:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder for your project.&lt;/li&gt;
&lt;li&gt;Open a terminal and navigate to the folder. Then, run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the following command to install the required dependencies:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @io-orkes/conductor-javascript @napi-rs/canvas pdfjs-dist tesseract.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add an index.js file in the project root and paste the following worker code:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Tesseract from "tesseract.js";
import https from "https";
import { createCanvas } from "@napi-rs/canvas";
import { getDocument } from "pdfjs-dist/legacy/build/pdf.mjs";
import {
  orkesConductorClient,
  TaskManager,
} from "@io-orkes/conductor-javascript";

async function extractTextFromPDF(pdfUrl) {
  try {
    const pdfBuffer = await new Promise((resolve, reject) =&amp;gt; {
      https
        .get(pdfUrl, (response) =&amp;gt; {
          if (response.statusCode !== 200) {
            reject(new Error(`HTTP ${response.statusCode}`));
            return;
          }

          if (!response.headers["content-type"]?.includes("application/pdf")) {
            reject(new Error("Not a PDF file"));
            return;
          }

          const chunks = [];
          response.on("data", (chunk) =&amp;gt; chunks.push(chunk));
          response.on("end", () =&amp;gt; resolve(Buffer.concat(chunks)));
        })
        .on("error", reject);
    });

    const pdfDoc = await getDocument(new Uint8Array(pdfBuffer)).promise;
    const results = [];

    for (let pageNum = 1; pageNum &amp;lt;= pdfDoc.numPages; pageNum++) {
      const page = await pdfDoc.getPage(pageNum);
      const viewport = page.getViewport({ scale: 2.0 });
      const canvas = createCanvas(viewport.width, viewport.height);

      await page.render({
        canvasContext: canvas.getContext("2d"),
        viewport: viewport,
      }).promise;

      const {
        data: { text },
      } = await Tesseract.recognize(canvas.toBuffer("image/png"), "eng");

      results.push({ page: pageNum, text: text.trim() });
    }

    return results;
  } catch (error) {
    throw new Error(`PDF processing failed: ${error.message}`);
  }
}

// Conductor worker configuration

async function startWorker() {
  const clientPromise = orkesConductorClient({
    keyId: "YOUR-KEY-ID",
    keySecret: "YOUR-KEY-SECRET",
    serverUrl: "YOUR-CONDUCTOR-CLUSTER-URL/api",
  });

  const client = await clientPromise;

  const pdfWorker = {
    taskDefName: "extractTextFromPDF",
    execute: async ({ inputData: { pdfUrl }, taskId }) =&amp;gt; {
      try {
        if (!pdfUrl) {
          return {
            status: "FAILED",
            outputData: { error: "PDF URL is required" },
          };
        }

        const results = await extractTextFromPDF(pdfUrl);

        return {
          status: "COMPLETED",
          outputData: {
            results,
            processedPages: results.length,
          },
        };
      } catch (error) {
        return {
          status: "FAILED",
          outputData: { error: error.message },
        };
      }
    },
  };

  const manager = new TaskManager(client, [pdfWorker], {
    options: { pollInterval: 100, concurrency: 1 },
  });

  console.log("Starting PDF extraction worker...");
  manager.startPolling();

  // Handle graceful shutdown
  process.on("SIGINT", () =&amp;gt; {
    console.log("Stopping worker...");
    manager.stopPolling();
    process.exit(0);
  });
}
startWorker();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;In the worker code, replace &lt;em&gt;YOUR-SECRET-ID&lt;/em&gt; and _YOUR-SECRET-KEY _ with previously copied Key Id and Key Secret.&lt;/li&gt;
&lt;li&gt;Replace “&lt;em&gt;YOUR-CONDUCTOR-CLUSTER-URL/api&lt;/em&gt;” with your cluster URL. For Developer Playground, use &lt;a href="https://developer.orkescloud.com/api" rel="noopener noreferrer"&gt;https://developer.orkescloud.com/api&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Run the worker:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that your workflow and worker are ready, it’s time to get it up and running by adding your LLM integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add your preferred LLM integration
&lt;/h2&gt;

&lt;p&gt;Orkes Conductor offers integration with many LLM providers. The next step is to add an integration in the Conductor cluster with your preferred LLM provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To add an integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Integrations&lt;/strong&gt; from the left navigation menu on your Conductor cluster.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ New integration&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9j7pkjxp7e2vmyzgc4up.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9j7pkjxp7e2vmyzgc4up.png" alt="Adding new integration" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;strong&gt;AI/LLM&lt;/strong&gt; section, choose your preferred LLM provider and select &lt;strong&gt;+ Add&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The configuration parameters vary depending on the AI/LLM platform being integrated. Refer to the respective &lt;a href="https://orkes.io/content/category/integrations/ai-llm" rel="noopener noreferrer"&gt;integration guides&lt;/a&gt; to obtain the parameters.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter the API keys and other parameters based on the chosen LLM provider.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The LLM integration has been added. The next step is to add a specific model. It's important to choose a model that aligns with your use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To add a model to your integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the &lt;strong&gt;Integrations&lt;/strong&gt; page, select the &lt;strong&gt;+&lt;/strong&gt; button next to your newly-added integration.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ New model&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the &lt;strong&gt;Model name&lt;/strong&gt; and &lt;strong&gt;Description&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Ensure that the &lt;strong&gt;Active&lt;/strong&gt; toggle is switched on and select Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The integrations are now set up and ready to use. Let's create an AI prompt that will utilize this integration to classify the documents into appropriate categories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Create a prompt template using Orkes’s AI prompt builder
&lt;/h2&gt;

&lt;p&gt;A prompt plays a crucial role in guiding the LLM model to act in a specific manner. For our document classification workflow, the &lt;a href="https://orkes.io/blog/guide-to-prompt-engineering/" rel="noopener noreferrer"&gt;prompt should be carefully crafted&lt;/a&gt; to enable the model to identify and categorize the document into appropriate groups.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6g7l8qvy7i7cz9uws9th.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6g7l8qvy7i7cz9uws9th.png" alt="Prompt template for document classification" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To create an AI prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;AI Prompts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Add AI prompt&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Prompt Name&lt;/strong&gt;, enter a unique name for your prompt, such as “doc_classifier_prompt_yourname”.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Model(s)&lt;/strong&gt;, select the integration you added in the previous step. The UI drop-down lists the integration along with the model names. Make sure to choose the right one.&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;Description&lt;/strong&gt; of what the prompt does.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Prompt Template&lt;/strong&gt;, enter your prompt, which will classify the document into appropriate categories. For example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We have a document that was scanned using OCR. The content is ${text}. You need to classify the document based on the provided OCR content. The document could be one of these: W2, Drivers License, Pay stub, Employment Verification Letter, or Mortgage Application. Suppose the provided content does not match with any of those documents. In that case, you must reply NO_MATCH, and in the following line, you must give a human-understandable message about the result and why that determination was made in under three sentences. If the provided content matches, return the values found, including the document type. If the social security number is part of the values, obfuscate the first five digits.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the prompt, we have defined &lt;code&gt;${text}&lt;/code&gt; as a variable that will be derived from the output of the previous task. This will become clearer once we incorporate this prompt into the workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; &amp;gt; &lt;strong&gt;Confirm save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This saves your prompt template. Orkes Conductor provides a built-in testing interface to test and validate your prompt before adding it to the workflow. In our example, we have defined the &lt;code&gt;${text}&lt;/code&gt; variable to be derived from the output of the preceding text extraction task. For example, here’s what a test run looks like with sample data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fs9dzpl22mqhhnk88maf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fs9dzpl22mqhhnk88maf7.png" alt="Sample test results for the prompt template" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Edit workflow with your LLM integration and AI prompt
&lt;/h2&gt;

&lt;p&gt;Now that everything is in place, let’s bring it all together and get the workflow running.&lt;/p&gt;

&lt;p&gt;Let’s go back to the workflow created:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Developer Playground, go to &lt;strong&gt;Definitions&lt;/strong&gt; &amp;gt; &lt;strong&gt;Workflow&lt;/strong&gt; and select the workflow created previously.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;classify_using_llm&lt;/strong&gt; task, replace the following values:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpn92toc8rvkg8sy90fga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpn92toc8rvkg8sy90fga.png" alt="Modifying workflow with integration models" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;your-llm-provider&lt;/code&gt; with your integrated LLM provider.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;your-llm-model&lt;/code&gt; with your chosen model.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;your-prompt-template&lt;/code&gt; with your prompt.&lt;/li&gt;
&lt;li&gt;Add the promptVariable `text’ parameter as ‘${evaluate_text_ref.output.result}’.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see that the &lt;code&gt;text&lt;/code&gt; variable is set to&lt;code&gt; ${evaluate_text_ref.output.result}&lt;/code&gt;, which is the output result of the &lt;strong&gt;evaluate_text&lt;/strong&gt; task that retrieves the content of the PDF document. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; &amp;gt; &lt;strong&gt;Confirm&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, let's test run your workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Run&lt;/strong&gt; tab and provide the document URL to be classified as the input parameter.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Run Workflow&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
// example input params&lt;br&gt;
{&lt;br&gt;
 "document_url": "https://image-processing-orkes.s3.amazonaws.com/test-w2-form-full-text.pdf"&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Upon running the workflow, you will be directed to the workflow execution page. If you select the &lt;strong&gt;Workflow Input/Output&lt;/strong&gt; tab, you will see the category in which the document has been classified.&lt;/p&gt;

&lt;p&gt;Here is a sample test run results with a W2 document passed as the input:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F10763uxzstotj5l76ghr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F10763uxzstotj5l76ghr.png" alt="Sample test run with a W2 document" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a sample test run results with a pay stub passed as the input:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fadyfrl7mmjez9j81hntq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fadyfrl7mmjez9j81hntq.png" alt="Sample test run with a pay stub document" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ta-da! You have successfully created an application flow that accurately classifies your documents. &lt;/p&gt;

&lt;p&gt;You can either develop your application from the ground up using Conductor or wire the necessary application flow into your existing applications through &lt;a href="https://orkes.io/content/category/sdks" rel="noopener noreferrer"&gt;Conductor SDKs&lt;/a&gt; or &lt;a href="https://orkes.io/content/category/ref-docs/api" rel="noopener noreferrer"&gt;APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s see what happens when an image file with a .jpg extension is passed as input. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpaqz516dfayjcnoi2piv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpaqz516dfayjcnoi2piv.png" alt="Sample test run with an image document" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The workflow will terminate, and you’ll receive an output message indicating that the file type is unsupported.&lt;/p&gt;

&lt;p&gt;This workflow is currently designed to work with input URLs with a .pdf extension. But what if your input is an image file or the document falls into a category not listed, requiring manual verification without disrupting the workflow?&lt;/p&gt;

&lt;p&gt;No worries—Orkes Conductor has got you covered! We have developed an advanced version of this workflow to handle these scenarios seamlessly. Ready to explore it? Stay tuned for the upcoming tutorials. &lt;/p&gt;

&lt;p&gt;In the meantime, if you have any ideas for improving this workflow to support additional file types, feel free to join our &lt;a href="https://orkes-conductor.slack.com/join/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA#/shared-invite/email" rel="noopener noreferrer"&gt;community on Slack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ibs-jKsMNE4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In summary, &lt;strong&gt;&lt;em&gt;Orkes Conductor stands out as the best choice for creating application flows. It offers flexibility in prompt customization and prioritizes data privacy, ensuring your data stays secure while allowing private LLM configurations with Conductor.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>genai</category>
      <category>aiapp</category>
      <category>automation</category>
    </item>
    <item>
      <title>Change Data Capture (CDC) in Event-Driven Microservices</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Wed, 23 Oct 2024 08:38:55 +0000</pubDate>
      <link>https://dev.to/orkes/change-data-capture-cdc-in-event-driven-microservices-13m3</link>
      <guid>https://dev.to/orkes/change-data-capture-cdc-in-event-driven-microservices-13m3</guid>
      <description>&lt;p&gt;Change Data Capture (CDC) is a technique for identifying and capturing changes in a database and replicating them in real time to other systems. In an event-driven architecture, CDC captures changes from a source database and transforms them for easy use by target systems. This process is crucial for maintaining consistency and functionality across all data-dependent systems.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore CDC in event-driven microservices and how to send workflow state changes to a stream from Orkes Conductor, the leading orchestration platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Change Data Capture (CDC)?
&lt;/h2&gt;

&lt;p&gt;Traditional data movement typically uses an ETL (Extract, Transform, Load) tool to extract source data, transform it, and load it into a target database. This process often operates within a defined cache window, which limits how frequently data is moved. &lt;/p&gt;

&lt;p&gt;On the other hand, a CDC system captures and moves data changes in real time. This keeps systems in sync and provides a reliable method for data replication, allowing for zero-downtime cloud migrations, making CDC well-suited for modern cloud architecture.&lt;/p&gt;

&lt;p&gt;To understand the concept of CDC, let’s consider a traditional ETL (Extract, Transform, Load) pipeline as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1qnquc8lhxwt9l8ozprw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1qnquc8lhxwt9l8ozprw.jpg" alt="Extract Transform Load (ETL) Pipeline" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A key challenge here is managing continuous updates in the source data, which can lead to inconsistencies between the source and target systems. These challenges make maintaining data accuracy and timely updates difficult across the entire ETL pipeline.&lt;/p&gt;

&lt;p&gt;CDC addresses these challenges by capturing real-time changes in the source database, allowing only the changed data to be replicated in the target system. &lt;strong&gt;&lt;em&gt;When combined with an event-driven architecture, CDC enables changes to be propagated as events, which can trigger real-time processing and synchronization in the target system&lt;/em&gt;&lt;/strong&gt;. This reduces latency and ensures the target system remains up-to-date without needing complete data extractions.&lt;/p&gt;

&lt;h2&gt;
  
  
  CDC in Event-driven Microservices
&lt;/h2&gt;

&lt;p&gt;CDC has become an essential strategy in event-driven microservices architecture, bridging traditional databases and modern cloud-native systems. &lt;/p&gt;

&lt;p&gt;While CDC captures data modifications (such as inserts, updates, and deletes) at the database level, it needs a messaging system to propagate those changes to relevant microservices. The most efficient way to accomplish this is to treat the changes as events within an event-driven architecture and send them asynchronously.&lt;/p&gt;

&lt;p&gt;Here’s an overview of the CDC process with an event bus:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp2ffuq6bhj3ogfohw3t7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp2ffuq6bhj3ogfohw3t7.jpg" alt="CDC system with an event bus" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The process can be split into three phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Change Detection and Event Generation&lt;/li&gt;
&lt;li&gt;Change Event Ingestion&lt;/li&gt;
&lt;li&gt;Change Event Propagation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Change Detection and Event Generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2wcz574vb6sfie8ahexb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2wcz574vb6sfie8ahexb.jpg" alt="Change data and event generation phase" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this phase, a log-mining component monitors the database’s transaction logs for changes whenever a microservice interacts with the database (e.g., creating a new order or updating customer data). Detected changes are formatted as individual events (e.g., "OrderCreated" or "CustomerUpdated"), timestamped, and published to the event bus. Each database operation results in a corresponding change event, ensuring that downstream consumers receive the necessary data updates. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change Event Ingestion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fx1ny1gw4ruvm7wyxncyc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx1ny1gw4ruvm7wyxncyc.jpg" alt="Change event ingestion phase" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this phase, the event bus receives and stores the change events. Events are typically organized into topics/queues, each mapped to a unique table in the source database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change Event Propagation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fj4679dt5hgmf9rghs91d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fj4679dt5hgmf9rghs91d.jpg" alt="Change event propagation phase" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The generated event is published to a messaging platform using a publish/subscribe (pub/sub) model. This allows downstream systems or microservices to subscribe to specific topics based on their needs. This ensures that the events are transmitted to required consumers without tight coupling or direct dependencies.&lt;/p&gt;

&lt;p&gt;Let's now look into how to send change data capture streams from Orkes Conductor to external systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  CDC with Orkes Conductor
&lt;/h2&gt;

&lt;p&gt;Orkes Conductor is a powerful tool for developers to build distributed applications or manage orchestration. You can easily stream workflow state changes to external systems with CDC-enabled workflows.&lt;/p&gt;

&lt;p&gt;Enabling the workflow status listener in a Conductor workflow allows you to detect and capture workflow state changes in real time. These changes are ingested into the integrated message brokers in Conductor, which propagate them to the configured topics or queues in the eventing systems.&lt;/p&gt;

&lt;p&gt;Steps to enable CDC in Conductor workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set Up Eventing Integration in Orkes Conductor&lt;/li&gt;
&lt;li&gt;Configure CDC Settings in Conductor Workflow&lt;/li&gt;
&lt;li&gt;Run Workflow&lt;/li&gt;
&lt;li&gt;Verify Changes in the Eventing System&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To test this functionality, you can use &lt;a href="https://play.orkes.io/?utm_campaign=cdc-blog&amp;amp;utm_source=devto-blog&amp;amp;utm_medium=web" rel="noopener noreferrer"&gt;Orkes Playground&lt;/a&gt;, a free developer sandbox.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Set Up Eventing Integration in Orkes Conductor
&lt;/h3&gt;

&lt;p&gt;The first step is to integrate with the supported eventing systems in Orkes Conductor. Supported integration includes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpefqlof4i2wfletpa07o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpefqlof4i2wfletpa07o.jpg" alt="Message broker integration in Orkes Conductor" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuration parameters vary depending on the message broker you’re integrating with. Customize these parameters accordingly, and &lt;a href="https://orkes.io/content/category/integrations/message-broker" rel="noopener noreferrer"&gt;set up the integration based on the specific message broker you’re using&lt;/a&gt;. [&lt;strong&gt;Note&lt;/strong&gt;: You only need to add the integration; no event handler setup is required.]&lt;/p&gt;

&lt;p&gt;Once the integration is added, note the sink name, which will be in the format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Integration Type:Config Name:Queue Name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if using AMQP with a test config called &lt;code&gt;amqp-test&lt;/code&gt; and a queue named &lt;code&gt;queue-a&lt;/code&gt;, the sink would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;amqp:amqp-test:queue-a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure CDC Settings in Conductor Workflow
&lt;/h3&gt;

&lt;p&gt;Once the eventing integration is ready, configure your workflow to capture CDC events. Conductor workflows can be created &lt;a href="https://orkes.io/content/reference-docs/api/metadata/creating-workflow-definition" rel="noopener noreferrer"&gt;using APIs&lt;/a&gt; or from Conductor UI. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5yih9oz2cqfkwxwp9ucu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5yih9oz2cqfkwxwp9ucu.jpg" alt="Create workflow in Orkes Conductor" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create workflows using Conductor UI, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Definitions &amp;gt; Workflows&lt;/strong&gt; from the left menu on the Conductor cluster.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Define Workflow&lt;/strong&gt; and &lt;a href="https://orkes.io/content/category/reference-docs" rel="noopener noreferrer"&gt;create your workflow with the necessary tasks&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the workflow JSON, set the following fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set "workflowStatusListenerEnabled" to true.&lt;/li&gt;
&lt;li&gt;Set "workflowStatusListenerSink" to the integration sink added in the previous step.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"workflowStatusListenerEnabled": true,
"workflowStatusListenerSink": "amqp:amqp-test:queue-a"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also enable it directly in the Conductor UI by switching on the "Workflow Status Listener" in the Workflow tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvp20gpjlxu4pjwpld222.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvp20gpjlxu4pjwpld222.jpg" alt="Enable workflow status listener from Conductor UI" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When adding the sink from the UI, the “Workflow listener sink” drop-down field lists only the integrations added to the cluster. The topic or queue name must be added manually. For example, if an AMQP integration is added with the name “amqp-test” the drop-down shows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fv4j30bzys0fpbxg50tqf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fv4j30bzys0fpbxg50tqf.jpg" alt="Updating workflow listener sink from Conductor UI" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose the integration and add the queue name to ensure the workflow listener sink is updated as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"workflowStatusListenerSink":"amqp:amqp-test:add-queue-name-here"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, save the workflow definition. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Run Workflow
&lt;/h3&gt;

&lt;p&gt;After the CDC settings are configured, you're ready to run the workflow. Workflows can be executed in different ways—&lt;a href="https://orkes.io/content/reference-docs/api/workflow/start-workflow-execution" rel="noopener noreferrer"&gt;using SDKs, APIs&lt;/a&gt;, or Conductor UI.&lt;/p&gt;

&lt;p&gt;To test it out, you can quickly run it from Conductor UI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the &lt;strong&gt;Run Workflow&lt;/strong&gt; button from the left menu.&lt;/li&gt;
&lt;li&gt;Choose the workflow name and version.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Run Workflow&lt;/strong&gt; at the top-right corner.&lt;/li&gt;
&lt;li&gt;Click the workflow execution ID generated to view the execution details.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxug0m2fa4pulylekentl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxug0m2fa4pulylekentl.jpg" alt="Run CDC workflow from Conductor UI" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the execution begins, the details are captured and sent to the configured eventing system upon any workflow state change. To be more precise, an event is triggered when the workflow state transitions from ‘Running’ to any other state. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fafreyx998bh0vhw010fj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fafreyx998bh0vhw010fj.jpg" alt="CDC workflow in running state" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Verify Changes in the Eventing System​
&lt;/h3&gt;

&lt;p&gt;The final step is verifying that the configured eventing system reflects the workflow status changes. The settings for each eventing system vary, so ensure that the message is received under the configured topic or queue.&lt;/p&gt;

&lt;p&gt;That's it! You've now enabled CDC in Conductor workflow to stream workflow state changes to external systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, CDC is crucial for maintaining real-time data consistency across microservices by capturing and propagating changes as events. This ensures that &lt;strong&gt;&lt;em&gt;all services are synchronized with up-to-date information, enabling low-latency and reducing the need for batch data transfers&lt;/em&gt;&lt;/strong&gt;. CDC is essential for modern event-driven architectures, providing a foundation for scalable, reliable, and efficient data replication.&lt;/p&gt;

&lt;p&gt;Orkes Conductor further aids in optimizing event-driven systems by seamlessly enabling CDC on workflows. By allowing real-time workflow state change detection and event propagation, Conductor ensures smooth orchestration between services. This allows developers to leverage the power of CDC for efficient performance in their microservice-based applications. The enterprise-grade Orkes Conductor offering is available as Orkes Cloud.&lt;/p&gt;

&lt;p&gt;–&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>eventdriven</category>
      <category>changedatacapture</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>Guide to Prompt Engineering</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Thu, 27 Jun 2024 10:23:01 +0000</pubDate>
      <link>https://dev.to/orkes/guide-to-prompt-engineering-pof</link>
      <guid>https://dev.to/orkes/guide-to-prompt-engineering-pof</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part one of a series exploring prompt engineering, what it is, its significance in app development, and how to build LLM-powered applications effectively.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5ovvho39uw3kplhi8mh7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5ovvho39uw3kplhi8mh7.jpg" alt="Guide to Prompt Engineering" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The AI landscape underwent a transformative change with the public release of OpenAI’s GPT-3 model in late 2022, opening up a world of possibilities and sparking widespread experimentation. &lt;/p&gt;

&lt;p&gt;One of the most critical aspects of leveraging GPT-3 and similar models lies in the art of creating prompts. Crafting precise and well-defined prompts is essential; a sloppy prompt can lead to irrelevant or meaningless outputs, limiting AI applications' potential. As users navigated the early days of GPT-3 experimentation, they quickly recognized that the key to unlocking the full capabilities of these models lies in writing well-crafted prompts.&lt;/p&gt;

&lt;p&gt;This blog explores the fundamentals of prompt engineering and its crucial role in application development and provides insights into interacting with and building LLM-based applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Prompt Engineering?
&lt;/h2&gt;

&lt;p&gt;Prompt engineering is an emerging engineering discipline defined as the practice of writing inputs for AI tools to produce desirable outputs.&lt;/p&gt;

&lt;p&gt;Before delving into the fundamentals of prompt engineering, let’s take a look at what prompts are.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Prompt?
&lt;/h3&gt;

&lt;p&gt;A prompt is an input or question you provide to an AI model like ChatGPT. For example, when you initially used ChatGPT, the questions you asked were your prompts. Sometimes, the initial prompt might not yield the desired result, so you refine it by providing clearer instructions and setting specific expectations. This improved prompt might have helped in getting a better response.&lt;/p&gt;

&lt;p&gt;In this context, better inputs to a model can produce better results. Therefore, &lt;strong&gt;&lt;em&gt;prompts are the inputs provided to AI models, and prompt engineering is the practice of crafting these prompts effectively.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While prompt engineering is relatively new, its origins can be traced back to the history of Natural Language Processing (NLP). NLPs are subcategories of Artificial Intelligence (AI) that specifically address how computers interact with human language. Within NLP, large language models (LLMs) represent a significant advancement in Generative AI (GenAI). These models are trained on millions and trillions of data, enabling them to generate something new based on given inputs.&lt;/p&gt;

&lt;p&gt;Effective prompts are vital in prompt engineering. The prompts guide the GenAI models in creating relevant and accurate responses that align with the user's expectations. This helps users interact with GenAI models more intuitively, creating a smoother experience. &lt;/p&gt;

&lt;h3&gt;
  
  
  Significance of Prompt Engineering in App Development
&lt;/h3&gt;

&lt;p&gt;AI-based applications are increasingly dominating the market compared to conventional applications as businesses evolve by incorporating AI-powered components into their applications. A critical aspect of these AI-powered applications is their ability to communicate effectively with large language models (LLMs). This communication is facilitated through the creation of effective prompts. &lt;/p&gt;

&lt;p&gt;Prompt engineering can be integrated into AI-powered applications for better user interactions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt engineers design and refine prompts to elicit the best possible outputs from LLMs, minimizing errors and enhancing the reliability of the application.&lt;/li&gt;
&lt;li&gt;Acting as a vital link between end users and LLMs, prompt engineers craft prompts that accurately interpret user inputs and generate appropriate responses. This ensures seamless interaction between the application and its users.&lt;/li&gt;
&lt;li&gt;Prompt engineers conduct experiments using diverse inputs to construct a prompt library that application developers can utilize in different situations. This library becomes an invaluable resource, providing out-of-box solutions and reducing developers' time on prompt creation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next, let's explore how these prompt engineering techniques can be implemented in AI app development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing Prompt Engineering in App Development
&lt;/h2&gt;

&lt;p&gt;During prompt design, the outputs generated can vary significantly depending on the specific parameters configured for the LLM.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM Parameters
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7atgm1byonrzq7bkr2r6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7atgm1byonrzq7bkr2r6.jpg" alt="LLM Parameters: Temperature, TopP, Max Tokens, Context Window, Stop Sequences, Frequency Penalty, Presence Penalty" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are the common LLM parameters you may encounter while using different providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temperature&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Temperature indicates the randomness of the model’s output. A higher temperature makes the output more random and creative, whereas a lower temperature makes the output more stable and focused. Higher temperatures can be used for generating creative content, such as social media posts or drafting emails. Lower temperatures are better suited for use cases like text classification, which require a more focused output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TopP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TopP, also known as nucleus sampling, allows the prompt engineer to control the randomness of the model’s output. It defines a probability threshold and selects tokens whose cumulative probability exceeds this threshold. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Max Tokens&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Max token determines the maximum number of tokens to be generated by the LLM and returned as a result. This parameter helps prevent long or irrelevant responses and controls costs. In contrast, the Temperature and TopP parameters help define the output's randomness, while they don’t limit its size. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context Window&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Content window determines the number of tokens the model can process as inputs when generating responses. Increasing the context window size enhances the performance of LLMs. For example, GPT-3 handles up to 2,000 tokens, while GPT-4 Turbo extends this to 128,000 tokens, and Llama manages 32,000 tokens. As of the latest update, Google's Gemini 1.5 Pro ships with a default context window size of 128,000 tokens, with plans to allow a selected group of developers and enterprise customers to experiment with a context window of up to 1 million tokens through AI Studio and Vertex AI in a private preview phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop Sequences or Stop Words&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stop sequences (also known as stop words) help prevent the model from generating content containing specific sequences, such as profanity or sensitive information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequency Penalty and Presence Penalty&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frequency penalty is a parameter used to discourage LLM models from generating frequent words, thereby helping to prevent repetitive text. On the other hand, the presence penalty encourages LLM models from generating words that have not been recently used. &lt;/p&gt;

&lt;p&gt;LLM parameters are crucial in creating effective prompts, which are integral to developing AI-based applications. Adjusting these parameters ensures that the LLMs produce the desired outcomes. Therefore, understanding and carefully configuring these parameters is essential for prompt creation.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Create Effective Prompts
&lt;/h3&gt;

&lt;p&gt;We have covered some basic LLM parameters. Now, let's look into key considerations for crafting effective prompts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9fruwwlvv4tc3pqrd9pk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9fruwwlvv4tc3pqrd9pk.jpg" alt="Key considerations for creating effective prompts" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding context&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before crafting the prompt, it's crucial to clearly understand its purpose. &lt;em&gt;Are you seeking information, encouraging creativity, or solving a specific problem?&lt;/em&gt; Understanding this ensures the prompt aligns with your goals.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Writing clear instructions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Clear and precise instructions are key to eliciting useful responses. When creating a prompt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provide sufficient context&lt;/strong&gt; or background information to help the model comprehend the scenario or issue accurately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid ambiguity&lt;/strong&gt; by clearly specifying the desired outcome from the response. For example, explicitly state if creativity is preferred.&lt;/li&gt;
&lt;li&gt;If applicable, &lt;strong&gt;define a persona&lt;/strong&gt; for the model, outlining character traits or roles for the response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outline any necessary steps or criteria&lt;/strong&gt; the model should follow to complete the task. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offer examples&lt;/strong&gt; of the desired outputs whenever possible. This gives the model a concrete reference point, helping produce relevant responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specify the expected length or format of the response&lt;/strong&gt;, whether it's a brief summary, a detailed analysis, or a specific word count.&lt;/li&gt;
&lt;li&gt;Ensure prompts are &lt;strong&gt;framed neutrally&lt;/strong&gt; to avoid suggesting biased answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Testing or fine-tuning prompts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before finalizing, it's important to test the prompt to ensure it effectively guides the models toward the desired outcome. Fine-tuning may be necessary based on initial responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good Prompts Vs. Bad Prompts
&lt;/h3&gt;

&lt;p&gt;Let’s contrast generic examples of good and bad prompts in real-life scenarios:&lt;/p&gt;

&lt;h4&gt;
  
  
  Example 1 - Recipe Recommendation
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fd3mpiw6buv4kfkqx81nw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fd3mpiw6buv4kfkqx81nw.jpg" alt="Example illustrating a good and bad prompt for a recipe recommendation" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first prompt generated generic breakfast ideas without specific details on ingredients and preparation steps. In contrast, the second prompt included clear instructions, such as preferring Lebanese food, noting an egg allergy, and requesting easy preparation within 30 minutes. As a result, the responses were well crafted to suit these requirements.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example 2 - Vacation Planning
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fj0w4a3jb6cf1rju4q4nd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fj0w4a3jb6cf1rju4q4nd.jpg" alt="Example illustrating a good and bad prompt for vacation booking" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first prompt provided a generic plan, while the second offered a detailed itinerary tailored to the specific requirements.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example 3 - Generating Code
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpwyf021kj0kkwso83z0a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpwyf021kj0kkwso83z0a.jpg" alt="Example illustrating a good and bad prompt for building a website" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first prompt is a generic request for CSS code to align elements when building an HTML-based website. In contrast, the second prompt provides specific context, outlines the issues encountered, and requests a resolution.&lt;/p&gt;

&lt;p&gt;A good prompt provides clear context, issues, and expectations:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ff6184za3c3gw9pgtw5ga.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ff6184za3c3gw9pgtw5ga.jpg" alt="Breakdown of a good prompt" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Orchestration Tools for Building LLM-powered Applications
&lt;/h2&gt;

&lt;p&gt;Having explored the fundamentals of prompts and best practices for creating them, it's time to dig deeper into how orchestration tools like Orkes Conductor streamline the process of building LLM-powered applications by orchestrating the interaction between distributed components.&lt;/p&gt;

&lt;p&gt;Let’s say we have an existing application and want to plug in AI features. This can be achieved using Orkes Conductor through the following steps:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fryp8ylzksjdzsql2scnr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fryp8ylzksjdzsql2scnr.jpg" alt="Steps for building a LLM powered application" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The initial step involves integrating LLM models with Orkes Conductor. Orkes Conductor facilitates integration with various LLM providers and their hosted models, such as OpenAI, Azure Open AI, Vertex AI, Gemini AI, AWS Bedrock, etc. Furthermore, the integration also includes Vector Databases such as Pinecone, Weaviate, MongoDB, etc. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvj47m6hxu7r78ijtoxkw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvj47m6hxu7r78ijtoxkw.jpg" alt="List of AI/LL and Vector Database integration in Orkes Conductor" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The subsequent step involves creating AI prompts within Orkes Conductor. These prompts can be created and stored directly within the Conductor console. They include an interface for real-time testing, allowing for iterative refinement of prompts before integrating into workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fbct3757sut31paps8vd6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbct3757sut31paps8vd6.jpg" alt="Testing Interface for prompts in Orkes Conductor" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The AI prompts can also be stored as a prompt library in Orkes Conductor, which developers can later leverage when building AI-powered applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fs8vg45vrnbhnszn372lk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fs8vg45vrnbhnszn372lk.jpg" alt="Prompt Library in Orkes Conductor" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the LLM model integration and prompts are set up, the subsequent step involves creating a workflow using &lt;a href="https://orkes.io/content/category/reference-docs/ai-tasks" rel="noopener noreferrer"&gt;AI agents in Orkes Conductor&lt;/a&gt;. These AI agents currently support tasks like text or chat completion, generating embeddings, retrieving embeddings, indexing text/documents, conducting searches within indexes, etc. Depending on the application's specific needs, LLM tasks can be incorporated into the workflow.&lt;/p&gt;

&lt;p&gt;The final step is to execute the workflow. This can be initiated through various methods such as code execution, APIs, Conductor UI, schedulers, or Webhook events. Additionally, workflows can be triggered in response to events from external systems like Kafka, SQS, and others.&lt;/p&gt;

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

&lt;p&gt;In this guide, we've explored the essentials of prompt engineering and its significance in app development. Prompt engineering, as an emerging discipline, plays a critical role in ensuring effective communication between users and AI models. By understanding the basics of prompts, their parameters, and best practices for crafting them, &lt;strong&gt;&lt;em&gt;developers can easily create more intuitive and responsive AI-driven applications with Orkes Conductor&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;As AI continues to evolve, mastering prompt engineering will become increasingly vital for developers aiming to integrate AI capabilities into their applications. Check out Part 2 of this series, where we dive into &lt;a href="https://dev.to/orkes/experimenting-and-putting-prompt-engineering-tactics-into-practice-2aii"&gt;experimenting and putting prompt engineering tactics into practice&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;–&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>promptengineering</category>
      <category>genai</category>
      <category>ai</category>
      <category>orchestration</category>
    </item>
    <item>
      <title>AI Orchestration Meetup [April 2024] - Recap</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Mon, 13 May 2024 10:28:21 +0000</pubDate>
      <link>https://dev.to/orkes/ai-orchestration-meetup-april-2024-recap-inb</link>
      <guid>https://dev.to/orkes/ai-orchestration-meetup-april-2024-recap-inb</guid>
      <description>&lt;p&gt;With the emergence and fast-growing pace of Generative Artificial Intelligence (GenAI) technologies impacting industries from entertainment to healthcare, recent research suggests that the AI orchestration market size is projected to reach approximately $35 billion by 2031. This growth highlights the increasing need for advanced AI systems capable of effectively handling various AI algorithms, data streams, and workflows. This, in turn, is driving significant progress in different sectors worldwide, marking a transformative shift in the global economy.&lt;/p&gt;

&lt;p&gt;So, what exactly is AI orchestration? AI orchestration is the process of managing the interaction, deployment, and integration of various AI models within a workflow or system. These AI models add a human touch to the system when it comes to making complicated decisions. It can help rebalance IT/LOB (Line of business) in decision-making roles, reorganize operational systems, redefine customer acquisition and sales processes, and more.&lt;/p&gt;

&lt;p&gt;Yet, with so many AI models entering the market, how can we effectively utilize these models in our applications? Integrating the LLM models and prompts into the application as code by conventional methods eventually creates new monolithic modules that are difficult to deploy, debug, and maintain. However, AI orchestration decouples models, prompts, and vector databases to bring a customized RAG (Retrieval Augmented Generation) framework that can be set up in minutes. &lt;/p&gt;

&lt;p&gt;How do you seamlessly integrate AI orchestration into your application? That’s where Orkes, the leading workflow orchestration platform, comes into play. Recently, we organized a developer meet-up to share more about AI orchestration and how to leverage it while building distributed applications. This blog recaps the key takeaways from the meetup and then covers some basic concepts on GenAI, AI orchestration, and its implementation with Orkes Conductor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recap from AI Orchestration Bengaluru Meetup
&lt;/h2&gt;

&lt;p&gt;In collaboration with Google for Developers, the Orkes DevRel team hosted the meetup in Bengaluru, India. The event attracted attendees from diverse backgrounds, including software engineering, system administrators, AI research, backend engineering, data science, and more. They represented companies like ANZ, Accenture, HP, IBM, Dell, Wipro, Amazon, Slice, and Gojek.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F071ydqv26hbw2lska6jj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F071ydqv26hbw2lska6jj.png" alt="AI Orchestration Meetup at Bengaluru" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The meetup featured 3 sessions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/mananbbhatt/" rel="noopener noreferrer"&gt;Manan Bhatt&lt;/a&gt; (Founding Engineer at Orkes) delivered a session on seamlessly integrating Google Vertex AI with Orkes Conductor to build RAG frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/riza-farheen-89022b146/" rel="noopener noreferrer"&gt;Riza Farheen&lt;/a&gt; (Developer Advocate at Orkes) demonstrated the power of Orkes Conductor's GenAI capabilities through a demo on automating document classification. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/nikhilrana9/" rel="noopener noreferrer"&gt;Nikhil Rana&lt;/a&gt; (Cloud Consultant at Google Cloud) explored the latest updates from Google Gemini, emphasizing its powerful models and features.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F59kb33dquo8ugzrqeza3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F59kb33dquo8ugzrqeza3.jpg" alt="Speakers at AI Orchestration Meetup" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A big thank you to &lt;a href="https://www.linkedin.com/in/sangee-gupta/" rel="noopener noreferrer"&gt;Sangeeta Gupta&lt;/a&gt;, Community Programs Manager at Orkes, and &lt;a href="https://www.linkedin.com/in/sri-vidhya-s/" rel="noopener noreferrer"&gt;Srividhya S Subramanian&lt;/a&gt;, Solution Architect at Orkes, for their efforts in hosting and networking with attendees.&lt;/p&gt;

&lt;p&gt;One of the attendees from the meetup, &lt;a href="https://www.linkedin.com/in/prasoonk/" rel="noopener noreferrer"&gt;Prasoon Kumar&lt;/a&gt;, quoted:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6o8rk0j8azluoxrjliai.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6o8rk0j8azluoxrjliai.jpg" alt="Bengaluru Meetup Quote" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here’s what our community shared about the meetup:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.linkedin.com/posts/riya-negi-6152721b3_ai-orchestration-distributedapplications-activity-7187411697651875840-0gRC?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5622AQH7FhO8PgEmPw%2Ffeedshare-shrink_2048_1536%2Ffeedshare-shrink_2048_1536%2F0%2F1713612296792%3Fe%3D2147483647%26v%3Dbeta%26t%3DWfnfGBi699XgGmCeFNieiu7J4jgx40n9EU30XgnZrXo" height="810" class="m-0" width="1080"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.linkedin.com/posts/riya-negi-6152721b3_ai-orchestration-distributedapplications-activity-7187411697651875840-0gRC?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop" rel="noopener noreferrer" class="c-link"&gt;
          #ai #orchestration #distributedapplications #bengaluru #meetup #geminiai… | Riya Negi
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          ✨Exciting Update!✨

I recently had the privilege of attending an enlightening meetup organized by Orkes, focusing on AI Orchestration &amp;amp;amp; Distributed…
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
        linkedin.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Now, let’s look into some of the basic GenAI and AI Orchestration concepts covered in the meetup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding AI Orchestration
&lt;/h2&gt;

&lt;p&gt;Before delving into the specifics, let's grasp the significance of AI. &lt;/p&gt;

&lt;p&gt;Do you recall the internet buzzing with excitement when ChatGPT was announced in November 2022? During that period, we experimented with &lt;a href="https://orkes.io/blog/using-chatgpt-to-create-conductor-workflows/" rel="noopener noreferrer"&gt;creating Conductor workflows using ChatGPT&lt;/a&gt;, and the results were amazing.&lt;/p&gt;

&lt;p&gt;And now, in May 2024, how often do you use tools like ChatGPT? For instance, finance professionals rely on AI tools to aggregate and summarize financial news, providing timely insights and market trends. Similarly, travelers utilize them to generate personalized travel ideas and itineraries based on their preferences, helping them plan trips efficiently. &lt;/p&gt;

&lt;p&gt;Whether it's assisting with research, generating creative content, or aiding decision-making processes, tools like ChatGPT are increasingly integrated into daily processes  across diverse sectors. The technology behind tools like ChatGPT is called Generative AI (GenAI).&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Generative AI (GenAI)?
&lt;/h3&gt;

&lt;p&gt;Generative AI, or GenAI for short, is a type of artificial intelligence capable of producing human-like content from pre-trained models in response to prompts. It can generate content such as text, images, audio, videos, and more. &lt;/p&gt;

&lt;p&gt;Given the vast array of AI technologies emerging, why should we specifically focus on GenAI? To understand this, let's examine the key differences between traditional/conventional AI and GenAI.&lt;/p&gt;

&lt;p&gt;In conventional AI systems, algorithms are designed to follow a set of predefined rules. In contrast, GenAI is the next generation of artificial intelligence, capable of creating something new from the inputs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F252og9mu1tits2arm636.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F252og9mu1tits2arm636.jpg" alt="Examples of Traditional AI and Generative AI" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Consider the example of traditional AI, where you play chess with a computer. The computer knows the rules; it can predict the moves and make its own based on a predefined strategy. However, it doesn’t invent new ways to play chess; it chooses from strategies it was programmed with.&lt;/p&gt;

&lt;p&gt;With GenAI, you can provide the input, and the AI model generates something new with similar characteristics, surpassing the capabilities of traditional AI models.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is AI Orchestration &amp;amp; its Benefits?
&lt;/h3&gt;

&lt;p&gt;Do you recall Kevin Scott’s (Microsoft's CTO) keynote at MSBuild 2023? (&lt;a href="https://orkes.io/blog/microsoft-build-and-gartner-summit-recap/" rel="noopener noreferrer"&gt;The Orkes team were also at MSBuild 2023&lt;/a&gt;—check out the highlights if interested.) In his keynote, Scott shared the importance of orchestration in building GenAI apps. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://news.microsoft.com/wp-content/uploads/prod/2023/05/KEY02-Build-Kevin-Scott-Keynote.pdf" rel="noopener noreferrer"&gt;Scott remarked&lt;/a&gt;: “&lt;em&gt;&lt;strong&gt;We really are setting the pace of innovation in the field of AI right now. And I think even for us, it’s been surprising to see how much of the zeitgeist is being captured by things like ChatGPT and applications that people are building on top of these large foundation models.&lt;/strong&gt;&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;Integrating AI models and prompts into the applications by code can result in monolithic modules that are difficult to deploy, debug, and maintain. However, AI orchestration allows easy management of such interaction, deployment, and integration. AI orchestration can decouple models, prompts, and vector databases to create a framework that can be integrated into the application in minutes.&lt;/p&gt;

&lt;p&gt;AI orchestration offers a multitude of benefits, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;- Makes it easier to scale applications to handle increasing user demands. This is useful in scenarios where AI models need to process a lot of data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency&lt;/strong&gt; - Streamlines the deployment and management of AI components, increasing efficiency in development and operation processes. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt; - Enables the integration of diverse AI models and components, allowing developers to leverage the best tools and algorithms for specific tasks. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt; - Provides standardized processes for deploying and managing AI models, helping maintain consistency across different projects and teams. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization&lt;/strong&gt; - AI orchestration tools often include features for monitoring performance metrics and optimizing resource utilization, which helps identify improvement opportunities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Savings&lt;/strong&gt; - Reduce operational costs associated with AI development and deployment by efficiently utilizing resources and automating repetitive tasks. This can he
lp companies achieve higher ROI on their AI investments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s look at &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2023-10-03-gartner-poll-finds-55-percent-of-organizations-are-in-piloting-or-production-mode-with-generative-ai" rel="noopener noreferrer"&gt;a recent Gartner poll from Oct 2023&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flav6bdmv0l7467g81tt9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flav6bdmv0l7467g81tt9.jpg" alt="Gartner Poll from October 2023 on GenAI" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One notable highlight from the survey is that software development stands out as the area with the highest adoption or investment rate in GenAI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Now, the question arises: How can you integrate GenAI capabilities into your application development strategy?&lt;/em&gt;&lt;/strong&gt;That’s where a tool like Orkes Conductor can be leveraged. Orkes is the leading workflow orchestration platform built over the popular open-source &lt;a href="https://github.com/conductor-oss/conductor" rel="noopener noreferrer"&gt;Conductor OSS&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;With &lt;a href="https://orkes.io/blog/introducing-ai-orchestration-and-human-task-in-orkes-conductor/" rel="noopener noreferrer"&gt;Orkes Conductor introducing AI agents&lt;/a&gt; in Nov 2023, it’s now easier to bridge the gap between AI models and distributed applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Orchestration with Orkes Conductor
&lt;/h2&gt;

&lt;p&gt;Let’s say you've got an existing application and want to add AI capabilities to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fky0m7bcj0xry4da0alrc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fky0m7bcj0xry4da0alrc.jpg" alt="Bridging applications with LLM models using Orkes Conductor" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Orkes Conductor, it's easy to build a workflow using AI agents and seamlessly integrate it as a new feature into your application.&lt;/p&gt;

&lt;p&gt;If you're starting from scratch, Orkes Conductor can be your go-to tool for building the entire application while leveraging its GenAI capabilities.&lt;/p&gt;

&lt;p&gt;Now, let’s look at the major steps involved in creating a workflow with AI agents in Orkes Conductor:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Integrate LLM models with Orkes Conductor&lt;/li&gt;
&lt;li&gt;Create AI Prompts&lt;/li&gt;
&lt;li&gt;Create Workflow including AI Agents&lt;/li&gt;
&lt;li&gt;Execute Workflow&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 1 - Integrating LLM Models with Orkes Conductor
&lt;/h3&gt;

&lt;p&gt;The advancements in GenAI shed new prominence on large language models (LLMs), now equipped with billions and trillions of parameters, opening up a new era in the GenAI landscape. &lt;/p&gt;

&lt;p&gt;Orkes Conductor supports integration with the following LLM providers and their hosted models:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fimgcjvt4xrg011b0a303.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fimgcjvt4xrg011b0a303.jpg" alt="Supported LLM models and vector databases in Orkes Conductor" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Retrieval Augmented Generation (RAG), you need to integrate Orkes Conductor with vector database providers as well.&lt;/p&gt;

&lt;p&gt;Vector databases play a crucial role in RAG by indexing and storing large amounts of data in vector form, enabling efficient retrieval at the required flow within the application. Whether it's answering user queries, providing personalized recommendations, or generating content, the integration of Orkes Conductor with vector database providers enhances the capabilities of AI-powered applications, delivering more accurate and engaging results to users. We currently support integration with providers such as &lt;strong&gt;&lt;em&gt;Pinecone&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Weaviate&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The added integrations can be shared widely with the required team through &lt;a href="https://orkes.io/content/category/access-control-and-security" rel="noopener noreferrer"&gt;role-based access control (RBAC) functionality within Orkes Conductor&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 - Creating AI Prompts
&lt;/h3&gt;

&lt;p&gt;The next step is to create AI prompts in Orkes Conductor that interact with the integrated LLM models.&lt;/p&gt;

&lt;p&gt;Prompts are the instructions provided to the LLM models, and a Prompt Engineer creates them to elicit the most optimal response. With Orkes Conductor, prompt engineers can design prompts, which app developers can utilize while creating their application flows. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 - Creating Workflows with AI Agents
&lt;/h3&gt;

&lt;p&gt;With LLM model integration and prompts in place, the next step is to create a workflow with the AI agents.&lt;/p&gt;

&lt;p&gt;In Orkes Conductor, the workflows can be built using code in your preferred language, JSON, or the Conductor UI. The AI Agents currently supported are:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdf882ec8mw96wcda0bxx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdf882ec8mw96wcda0bxx.jpg" alt="LLM tasks in Orkes Conductor - Text Complete, Generate Embeddings, Store Embeddings, Get Embeddings, Index Document, Get Document, Index Text, Search Index, Chat Complete" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depending on the application requirements, the LLM tasks can be added to build our GenAI-powered application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 - Executing Workflows
&lt;/h3&gt;

&lt;p&gt;The final step is to execute the workflow. The workflow can be invoked using different methods such as code, APIs, UI, scheduler, and Webhook events or in response to events from external eventing systems such as Kafka, SQS, and more.&lt;/p&gt;

&lt;p&gt;And voila! Your GenAI-powered application is up and running. Check our documentation if you are curious about a basic &lt;a href="https://orkes.io/content/developer-guides/using-llms-in-your-orkes-conductor-workflows#example" rel="noopener noreferrer"&gt;example of a translation workflow&lt;/a&gt; covering all these steps.&lt;/p&gt;

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

&lt;p&gt;We wrapped up a fantastic developer meetup in India on AI Orchestration &amp;amp; Distributed Applications. To check out Orkes Conductor’s GenAI functionality and capabilities, explore our free trial today.&lt;/p&gt;

&lt;p&gt;Stay updated on our &lt;a href="https://orkes.io/events/" rel="noopener noreferrer"&gt;upcoming events&lt;/a&gt;, and if you'd like to participate as a speaker, sponsor, or collaborator at Orkes events, contact us at &lt;a href="mailto:devrel@orkes.io"&gt;devrel@orkes.io&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>orchestration</category>
      <category>microservices</category>
      <category>ai</category>
      <category>genai</category>
    </item>
    <item>
      <title>Automating Slack Greetings to Community with Orkes Conductor</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Wed, 17 Apr 2024 07:36:56 +0000</pubDate>
      <link>https://dev.to/orkes/automating-slack-greetings-to-community-with-orkes-conductor-5gap</link>
      <guid>https://dev.to/orkes/automating-slack-greetings-to-community-with-orkes-conductor-5gap</guid>
      <description>&lt;p&gt;Imagine a situation where you joined a community channel and felt lonely, not knowing where to start—has it ever happened to you? &lt;/p&gt;

&lt;p&gt;What if your community members, too, feel the same about joining your community platforms? It’s a make-or-break moment when it comes to community engagement.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore how Orkes Conductor, the leading workflow orchestration platform built on the popular open-source Conductor, can help you automate the process of welcoming new community members to your dedicated Slack channel. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Community Welcome Bot
&lt;/h2&gt;

&lt;p&gt;Before beginning with the bot creation process, you need to ensure that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have a Slack workspace.&lt;/li&gt;
&lt;li&gt;You have signed up for &lt;a href="https://play.orkes.io/" rel="noopener noreferrer"&gt;Orkes Playground&lt;/a&gt;, a free developer sandbox from Orkes, to test Conductor in real-time. We’ll be using Playground to test the welcome bot in this blog. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, here’s a quick overview of how our Conductor community welcome bot will work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A webhook event is sent to Orkes Conductor whenever a new member joins the community. &lt;/li&gt;
&lt;li&gt;On receiving the event, the application flow begins, and the new member gets a message from the designated person (for example, the Head Of Community) welcoming them to the community with relevant greetings.&lt;/li&gt;
&lt;li&gt;The workflow waits a few minutes, and a message is sent to help them get started.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And Boom! You’ve automated the welcome greetings to all the newly joining community members. Sounds simple, doesn't it?    &lt;/p&gt;

&lt;p&gt;As a result, when your community keeps growing, you don’t have to worry about sending personalized messages to every new member. &lt;/p&gt;

&lt;p&gt;All you need to do is create an application flow in Orkes Conductor, and Conductor automates this process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Workflows
&lt;/h2&gt;

&lt;p&gt;Let’s look at the application flow {workflow} now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3p1xnz4780y4reaqsmzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3p1xnz4780y4reaqsmzw.png" alt="Community welcome workflow in Orkes Conductor" width="800" height="1256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.orkes.io/workflowDef/community-welcome-workflow" rel="noopener noreferrer"&gt;View in Playground&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can get the &lt;a href="https://github.com/conductor-sdk/conductor-examples/blob/main/community-welcome-workflow/community-welcome-workflow.json" rel="noopener noreferrer"&gt;JSON file&lt;/a&gt; for the workflow in our GitHub repository.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The workflow begins with a &lt;a href="https://orkes.io/content/reference-docs/operators/switch" rel="noopener noreferrer"&gt;switch task&lt;/a&gt;, an operator in Orkes Conductor. In Orkes Conductor, operators are tasks equivalent to common programming language constructs.&lt;/li&gt;
&lt;li&gt;In our example, we have added two switch cases evaluating an input parameter named &lt;em&gt;switchCaseValue&lt;/em&gt;; one gets executed whenever a new community member joins (the value equals &lt;em&gt;team_join&lt;/em&gt;). For all other cases, the default case will be executed. This is a good example of how to validate elementary input data from the workflow executor and logically branch to an error management flow.&lt;/li&gt;
&lt;li&gt;The workflow then moves to an &lt;a href="https://orkes.io/content/reference-docs/system-tasks/http-poll" rel="noopener noreferrer"&gt;HTTP task&lt;/a&gt;, yet another operator in Orkes Conductor. It sends a POST request to the Slack Webhook with the user information. Through this task, a message would be posted to the required channel on new members joining.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;           "name": "http_task_1",
           "taskReferenceName": "http_task_ref_1",
           "inputParameters": {
             "uri": "https://hooks.slack.com/services/XXXXXX",
             "method": "POST",
             "connectionTimeOut": 3000,
             "readTimeOut": "3000",
             "accept": "application/json",
             "contentType": "application/json",
             "body": {
               "text": "A new user has joined our community slack - ${workflow.input.event.user.profile.display_name}."
             }
           },
           "type": "HTTP",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;It is followed by another HTTP task, which is used to welcome the new user to the community.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     "name": "http_task_2",
           "taskReferenceName": "http_task_ref_2",
           "inputParameters": {
             "http_request": {
               "uri": "https://slack.com/api/chat.postMessage",
               "method": "POST",
               "connectionTimeOut": 3000,
               "readTimeOut": "3000",
               "accept": "application/json",
               "contentType": "application/json",
               "headers": {
                 "Authorization": "Bearer ${workflow.secrets.slack_welcome_token}"
               },
               "body": {
                 "channel": "${workflow.input.event.user.id}",
                 "text": ":wave: Hi there!  I would like to welcome you to our DevRel community on Slack.  We're thrilled to have you join our vibrant community! :blush: Whether you're here to collaborate, share knowledge, or simply connect with like-minded individuals, you're in the right place. Take a moment to introduce yourself in the #introduce-yourself channel. Share your interests, what brought you here, or anything else you'd like the community to know! ",
                 "as_user": true
               }
             }
           },
           "type": "HTTP",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Then, the workflow pauses for a specific period and sends another message with tips to get started. The wait period can be configured using a &lt;a href="https://orkes.io/content/reference-docs/operators/wait" rel="noopener noreferrer"&gt;Wait task&lt;/a&gt;. Adding a Wait task can be useful to make the flow less “robotic” and give users a natural perception of things happening behind the scenes.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          "name": "wait_for_sometime",
           "taskReferenceName": "wait_for_sometime",
           "inputParameters": {
             "duration": "2 minutes"
           },
           "type": "WAIT",
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;The final task in the workflow is an HTTP task that sends messages to the user with utility links to help them get started.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Creating Webhook
&lt;/h2&gt;

&lt;p&gt;New user sign-up information is received as an event within Orkes Conductor through Webhooks. Webhooks are used to trigger workflows.&lt;/p&gt;

&lt;p&gt;Therefore, create a Webhook by navigating to &lt;strong&gt;Definitions &amp;gt; Webhook&lt;/strong&gt; from the left menu on your Conductor cluster, and set the webhook parameters as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3guxqwwcsanu34j65jnz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3guxqwwcsanu34j65jnz.png" alt="Webhook for receiving events" width="800" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provide a &lt;strong&gt;&lt;em&gt;Webhook name&lt;/em&gt;&lt;/strong&gt; and choose the &lt;strong&gt;&lt;em&gt;Source platform&lt;/em&gt;&lt;/strong&gt; as Slack. &lt;/li&gt;
&lt;li&gt;Under the field “Start workflow when webhook event comes”, choose the workflow we’ve created in the previous step. &lt;/li&gt;
&lt;li&gt;When saving the webhook, an unverified URL will be generated. It gets verified when this URL is copied to your Slack app.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You might wonder why we did not add the workflow under the field “Workflow to receive webhook event”. In this case, the workflow must be started only after the webhook event is received, i.e., whenever a new community member joins.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating Slack App
&lt;/h2&gt;

&lt;p&gt;The next step is to create a Slack app.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Navigate to &lt;a href="https://api.slack.com/apps" rel="noopener noreferrer"&gt;Slack Apps API&lt;/a&gt; and click &lt;strong&gt;Create an App&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5wbo7gf8xh6ycw0mlf8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5wbo7gf8xh6ycw0mlf8s.png" alt="Creating Slack Bot" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose the option &lt;strong&gt;From scratch&lt;/strong&gt; and provide an app name and the Slack workspace to which the application will be integrated. Click &lt;strong&gt;Create App&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxjoqsfzi7n5zz79ts74k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxjoqsfzi7n5zz79ts74k.png" alt="Creating Slack Bot - Name &amp;amp; workspace creation" width="800" height="770"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Next, activate the incoming webhooks by navigating to &lt;strong&gt;Features &amp;gt; Incoming Webhooks&lt;/strong&gt;. Turn on the option &lt;strong&gt;Activate Incoming Webhooks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fif1iksa1t3iixtalrllg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fif1iksa1t3iixtalrllg.png" alt="Activate Incoming Webhooks" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Then, from &lt;strong&gt;Features &amp;gt; Event Subscriptions&lt;/strong&gt;, turn on &lt;strong&gt;Enable Events&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ft9x0fas2dwqlne5tgjou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ft9x0fas2dwqlne5tgjou.png" alt="Enable Events" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under the field &lt;strong&gt;Request URL&lt;/strong&gt;, provide the webhook URL created previously. At this step, the URL becomes verified in your Conductor cluster.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;&lt;strong&gt;Subscribe to bot events&lt;/strong&gt;&lt;/em&gt;, click &lt;strong&gt;&lt;em&gt;Add Bot User Event&lt;/em&gt;&lt;/strong&gt; &amp;amp; add &lt;em&gt;&lt;strong&gt;team_join&lt;/strong&gt;&lt;/em&gt; (remember, this is the value evaluated by our switch in our workflow).&lt;/li&gt;
&lt;li&gt;Save the changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Features &amp;gt; App Home&lt;/strong&gt;, and under the Messages tab, enable the option &lt;em&gt;Allow users to send slash commands and messages from the messages tab&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F79c7gn2sjpwdwljv8rd9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F79c7gn2sjpwdwljv8rd9.png" alt="messages-tab-community.png" width="800" height="1121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Then, you need to enable permissions for your Slack app by navigating to &lt;strong&gt;Features &amp;gt; OAuth &amp;amp; Permissions&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Scopes &amp;gt; Bot Token Scopes&lt;/strong&gt;, add the following permissions to those added by default.&lt;/li&gt;
&lt;li&gt;channels:read&lt;/li&gt;
&lt;li&gt;chat:write&lt;/li&gt;
&lt;li&gt;chat:write.public&lt;/li&gt;
&lt;li&gt;groups:history&lt;/li&gt;
&lt;li&gt;groups:read&lt;/li&gt;
&lt;li&gt;im:history&lt;/li&gt;
&lt;li&gt;mpim:history&lt;/li&gt;
&lt;li&gt;&lt;p&gt;mpim:read&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Scopes &amp;gt; User Token Scopes&lt;/strong&gt;, add the following permissions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;channels:history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;channels:read&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;chat:write&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;groups:history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;groups:read&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;im:history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;mpim:read&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;users:read&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Install App to Slack Workspace
&lt;/h3&gt;

&lt;p&gt;Now that you have created your Slack app let’s install the app:&lt;/p&gt;

&lt;p&gt;For this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Settings &amp;gt; Install App&lt;/strong&gt;, and click &lt;strong&gt;Install to Workspace&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under “&lt;em&gt;Community Welcome App for Slack requires a channel to post to as an app&lt;/em&gt;”, choose the channel you want to notify when a member joins the workspace.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhle6edvmn2cc9a4wyaq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhle6edvmn2cc9a4wyaq0.png" alt="Installing Slack App to Workspace" width="800" height="1081"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the app is installed, OAuth tokens will be generated. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxfhcuvnr45jh1mxqor5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxfhcuvnr45jh1mxqor5l.png" alt="OAuth tokens &amp;amp; webhook URL" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To try this workflow in your Slack workspace, you need to make some changes to the following configurations in the sample workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://orkes.io/content/developer-guides/secrets-in-conductor" rel="noopener noreferrer"&gt;Create a secret in Orkes Conductor&lt;/a&gt; from the left menu. &lt;/li&gt;
&lt;li&gt;Provide a name for your secret and save the &lt;strong&gt;User OAuth token&lt;/strong&gt; generated (see above image) when the app was installed in your workspace. In this example, we have saved the secret as &lt;strong&gt;slack_welcome_token&lt;/strong&gt; and used it in the workflow definition, as shown below:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"headers": {
                 "Authorization": "Bearer ${workflow.secrets.slack_welcome_token}"
               },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Note: Ensure you replace the &lt;strong&gt;slack_welcome_token&lt;/strong&gt; in your workflow definition with the secret name you created. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From your Slack APIs, copy the Webhook URL (refer to the above image) and replace the POST URL in the first HTTP task as shown below:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fuocvmqmdb02oxfs3v9ef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fuocvmqmdb02oxfs3v9ef.png" alt="Updating Slack URL in HTTP post request" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now save the workflow definition.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Executing Community Bot App
&lt;/h2&gt;

&lt;p&gt;Whenever a person joins your Slack community, the webhook event will be received, and the workflow will be triggered. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ff9uvp1xvu8pbaq3lx9fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ff9uvp1xvu8pbaq3lx9fq.png" alt="Welcome workflow triggered when a user joined" width="800" height="822"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  From the newly-joined Community User perspective:
&lt;/h3&gt;

&lt;p&gt;The user will receive a welcome message from the Workspace admin (the one who created the Slack app). &lt;/p&gt;

&lt;p&gt;You can customize the message according to your needs. These messages are sent using the HTTP task. &lt;/p&gt;

&lt;p&gt;Here’s the welcome message received by the user. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fds1epcaobx0b9r8wjfko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fds1epcaobx0b9r8wjfko.png" alt="Initial welcome message received by the community user" width="800" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it can be changed as needed by updating the “text”  in &lt;strong&gt;http_task_2&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;               "body": {
                 "channel": "${workflow.input.event.user.id}",
                 "text": ":wave: Hi there!  I would like to welcome you to our DevRel community on Slack.  We're thrilled to have you join our vibrant community! :blush: Whether you're here to collaborate, share knowledge, or simply connect with like-minded individuals, you're in the right place. Take a moment to introduce yourself in the #introduce-yourself channel. Share your interests, what brought you here, or anything else you'd like the community to know! ",
                 "as_user": true
               }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After this, we have added a wait period of 2 minutes using the wait task. So, the user will receive the second message after the wait period like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frp6qmfxsm37pyewvnpdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frp6qmfxsm37pyewvnpdr.png" alt="Second welcome message received by the user to get started" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can be updated as needed by changing the “text” in &lt;strong&gt;http_task_3&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"body": {
                 "channel": "${workflow.input.event.user.id}",
                 "text": "Welcome aboard! Here's a link to get started: [https://orkes.io/content/getting-started/first-workflow-application]. These will help you get the most out of your experience here. Feel free to ping us for any help. ",
                 "as_user": true
               }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  From the Slack Admin perspective:
&lt;/h3&gt;

&lt;p&gt;Once a new community user has joined, a message will be posted on the &lt;strong&gt;&lt;em&gt;slack-community-join-updates&lt;/em&gt;&lt;/strong&gt; channel (which is the channel we chose to install the application on). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhuqfz9lc3aid6pzxbala.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhuqfz9lc3aid6pzxbala.png" alt="Slack channel where user joining updates are posted by the Bot" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The message can be configured via the &lt;strong&gt;http_task_1,&lt;/strong&gt; where you can update the “text” like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"body": {
               "text": "A new user has joined our community slack - ${workflow.input.event.user.profile.display_name}."
             }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This ensures that the admins are notified when someone joins. &lt;/p&gt;

&lt;p&gt;Tip: Consider posting these updates in a private channel, as they contain details other community members may not need to know.&lt;/p&gt;

&lt;p&gt;Now, you can check on Orkes Conductor to see that the workflow has been completed successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Finxzqm1bytuyariu7ydd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Finxzqm1bytuyariu7ydd.png" alt="Completed workflow" width="800" height="1140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;“That’s how we welcome new members to our community Slack channel at Orkes. &lt;a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA" rel="noopener noreferrer"&gt;Join and witness the magic for yourself now.&lt;/a&gt;”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a simple example with just a few tasks. Of course, you can customize this app to fit your needs, adding additional tasks and changing the flow as per your requirements. &lt;/p&gt;

&lt;p&gt;Here’s a video guide summarizing the example we’ve discussed:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/watch?si=PEGE8Un3OaQY6nw4&amp;amp;v=OpTFPeeCjGA&amp;amp;feature=youtu.be" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  Summing Up
&lt;/h2&gt;

&lt;p&gt;We have used our own platform for welcoming our community members &amp;amp; many other use cases like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://orkes.io/blog/create-standup-bot-using-conductor-slack-integration/" rel="noopener noreferrer"&gt;Running our daily engineering standup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://orkes.io/blog/orchestrating-infrastructure-upgrades-with-conductor/" rel="noopener noreferrer"&gt;Orchestrating infrastructure updates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://orkes.io/blog/wildcard-certificate-management-across-multiple-kubernetes-clusters-with-orkes-conductor/" rel="noopener noreferrer"&gt;Automating Wildcard Certificate Management Across Multiple Kubernetes Clusters  &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, don’t forget to give us a 🌟on our &lt;a href="https://github.com/conductor-oss/conductor" rel="noopener noreferrer"&gt;Conductor OSS repo&lt;/a&gt;! &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://orkes.io/platform" rel="noopener noreferrer"&gt;Conductor&lt;/a&gt; is an enterprise-grade Unified Application Platform for process automation, API and microservices orchestration, agentic workflows, and more. Check out the &lt;a href="https://orkes.io/pricing" rel="noopener noreferrer"&gt;full set of features&lt;/a&gt;, or try it yourself using our free &lt;a href="https://developer.orkescloud.com/" rel="noopener noreferrer"&gt;Developer Playground&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>microservices</category>
      <category>orchestration</category>
      <category>automation</category>
      <category>workflow</category>
    </item>
    <item>
      <title>What’s new in Conductor Python SDK?</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Mon, 12 Feb 2024 06:20:36 +0000</pubDate>
      <link>https://dev.to/orkes/whats-new-in-conductor-python-sdk-1fip</link>
      <guid>https://dev.to/orkes/whats-new-in-conductor-python-sdk-1fip</guid>
      <description>&lt;p&gt;The Conductor Python SDK has undergone a major update, including new feature additions. 🎉&lt;/p&gt;

&lt;p&gt;If you want to try it out quickly, pip install with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m pip install conductor-python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK needs Python 3.9+ to work with.&lt;/p&gt;

&lt;p&gt;Here’s the quick link to Python SDK - &lt;a href="https://github.com/conductor-sdk/conductor-python" rel="noopener noreferrer"&gt;https://github.com/conductor-sdk/conductor-python&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;If you are curious to explore the new enhancements in the Python SDK, read on!&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Support for AI Orchestration with language models, prompt templates and vector databases
&lt;/h3&gt;

&lt;p&gt;Recently, we introduced support for building Gen AI applications by integrating with popular AI/LLM models and vector databases, &amp;amp; prompt templates to work with Orkes AI Agents. These features are now available in Conductor Python SDK. &lt;/p&gt;

&lt;p&gt;Check out the AI SDKs &lt;a href="https://github.com/conductor-sdk/conductor-python/tree/main/src/conductor/client/ai" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;For example, here’s a snippet from an AI example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@worker_task(task_definition_name='get_friends_name')
def get_friend_name():
    name = os.getlogin()
    if name is None:
        return 'anonymous'
    else:
        return name


def start_workers(api_config):
    task_handler = TaskHandler(
        workers=[],
        configuration=api_config,
        scan_for_annotated_workers=True,
    )
    task_handler.start_processes()
    return task_handler
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get the &lt;a href="https://github.com/conductor-sdk/conductor-python/blob/d00e61bf85dc7edd01935cc379f37e1ff5c412a8/examples/orkes/open_ai_helloworld.py" rel="noopener noreferrer"&gt;complete code here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;We currently support integrations with LLM providers such as OpenAI, Azure OpenAI, Vertex AI &amp;amp; Hugging Face, and vector DB’s such as Pinecone &amp;amp; Weaviate.&lt;/p&gt;

&lt;p&gt;This is just the beginning. Orkes team is working on adding integrations with more LLM providers &amp;amp; vector DBs. So, keep an eye out for our &lt;a href="https://orkes.io/blog/" rel="noopener noreferrer"&gt;upcoming announcements&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Improved way to create dynamic workflows in Python
&lt;/h3&gt;

&lt;p&gt;By using the improved ConductorWorkflow class and its associated methods, you can easily create complex workflows for specific use cases, enhancing the scalability of Python-based automation projects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from conductor.client.worker.worker_task import worker_task


@worker_task(task_definition_name='get_user_email')
def get_user_email(userid: str) -&amp;gt; str:
    return f'{userid}@example.com'


@worker_task(task_definition_name='send_email')
def send_email(email: str, subject: str, body: str):
    print(f'sending email to {email} with subject {subject} and body {body}')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get the complete &lt;a href="https://github.com/conductor-sdk/conductor-python/blob/main/examples/dynamic_workflow.py" rel="noopener noreferrer"&gt;code here&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Support to Unit Test Workflows &amp;amp; Replay Workflows
&lt;/h3&gt;

&lt;p&gt;Introduced support for unit testing workflows, ensuring reliability and robustness throughout the development process and enhancing the SDK's quality and stability.&lt;/p&gt;

&lt;p&gt;Also, enabled the ability to replay workflows, facilitating debugging, analysis, and optimization, providing you with greater visibility and control over the workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/conductor-sdk/conductor-python/blob/main/docs/testing/README.md" rel="noopener noreferrer"&gt;Check out here.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quality of Life Improvements
&lt;/h3&gt;

&lt;p&gt;We have incorporated numerous quality-of-life improvements, such as dedicated clients for various resource types, worker configuration flexibility, enhanced documentation, performance optimizations, and out-of-box examples, enhancing the overall developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Out-of-Box Examples
&lt;/h2&gt;

&lt;p&gt;We have made it easier by adding many ready to use examples, which you can test here.👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/conductor-sdk/conductor-python/tree/main/examples" rel="noopener noreferrer"&gt;Python SDK Examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it out &amp;amp; feel free to contribute more to &lt;a href="https://github.com/conductor-oss/conductor" rel="noopener noreferrer"&gt;Conductor OSS&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started with Python SDK
&lt;/h2&gt;

&lt;p&gt;If you want to get started with Python SDK, check out these steps: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install SDK - Create a virtual environment to build your package:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;virtualenv conductor
source conductor/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Get Conductor Python SDK - If you want to try it out quickly, pip install with the following:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m pip install conductor-python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK needs Python 3.9+ to work with.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setup SDK - Point the SDK to the Conductor Server API endpoint.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export CONDUCTOR_SERVER_URL=http://localhost:8080/api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Optionally) If you are using a Conductor server that requires authentication. &lt;a href="https://orkes.io/content/access-control-and-security/applications" rel="noopener noreferrer"&gt;Obtain the key and secret from the conductor server.&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export CONDUCTOR_AUTH_KEY=your_key
export CONDUCTOR_AUTH_SECRET=your_key_secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Start Conductor Server
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --init -p 8080:8080 -p 5000:5000 conductoross/conductor-standalone:3.15.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After starting the server navigate to &lt;a href="http://localhost:5000" rel="noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt; to ensure the server has started successfully.&lt;/p&gt;

&lt;p&gt;Happy Coding! 🎉&lt;/p&gt;

&lt;p&gt;Meanwhile, don’t forget to follow the &lt;a href="https://github.com/conductor-oss/conductor" rel="noopener noreferrer"&gt;Conductor OSS - the open-source project&lt;/a&gt; &amp;amp; support us by giving a ⭐. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-2vdbx239s-Eacdyqya9giNLHfrCavfaA" rel="noopener noreferrer"&gt;Join our community Slack if you have any queries. &lt;/a&gt;&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>orchestration</category>
      <category>python</category>
      <category>distributedapps</category>
    </item>
    <item>
      <title>Orkes Monthly Highlights - January 2024</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Wed, 31 Jan 2024 11:22:42 +0000</pubDate>
      <link>https://dev.to/orkes/orkes-monthly-highlights-january-2024-1pg3</link>
      <guid>https://dev.to/orkes/orkes-monthly-highlights-january-2024-1pg3</guid>
      <description>&lt;p&gt;Welcome to the first edition of 2024 Orkes Monthly Highlights. &lt;/p&gt;

&lt;p&gt;We look forward to an exciting 2024 with more meetups, conferences, and major product updates. As we begin a new year, we thank our ever-growing community of developers for all your contributions and support. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Check out our Conductor OSS repository, &lt;a href="https://github.com/conductor-oss/conductor"&gt;give a star 🌟&lt;/a&gt;, fork &amp;amp; start contributing!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s have a look into the happenings of January 2024 and a deep dive into the exciting event updates for February 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Release of Conductor OSS
&lt;/h3&gt;

&lt;p&gt;After taking full stewardship of Conductor OSS, Orkes achieved a significant milestone with the initial release of Conductor OSS (version 3.16.0), marking a pivotal moment in our open-source strategy. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/blog/announcing-initial-release-of-new-conductor-oss-repository/"&gt;Read more.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Startups in Conversation: Building with AI - Microsoft for Startups
&lt;/h3&gt;

&lt;p&gt;Viren Baraiya joined as a panelist at “Startups in Conversation: Building with AI” at Microsoft for Startups, where he delved into the latest AI-based Orchestration launched in Orkes Conductor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Source Startup Podcast
&lt;/h3&gt;

&lt;p&gt;Jeu George (CEO, Orkes) was featured in the Open Source Startup Podcast - E122: How Orkes is Building a Great Company on Conductor. In this podcast, Jeu takes you behind the scenes of the Conductor's journey, from inception at Netflix to its journey to open-source and formation of Orkes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://podcasters.spotify.com/pod/show/ossstartuppodcast/episodes/E122-How-the-Conductor-Project-Found-New-Life-Outside-of-Netflix-e2esm3l"&gt;Tune In&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Join our Upcoming Events
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AWS &amp;amp; Orkes Developer Meetup | Bay Area
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 7, 2024: San Francisco, US&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our first Bay Area Meetup, in collaboration with &lt;a href="https://aws.amazon.com/"&gt;AWS&lt;/a&gt;, is happening on &lt;strong&gt;Feb 7, 2024&lt;/strong&gt;, from &lt;strong&gt;01:30 PM to 04:30 PM&lt;/strong&gt; at &lt;strong&gt;475 Sansome Street, 10th Floor, San Francisco, CA 94111&lt;/strong&gt;. We're thrilled to be surrounded by fellow developers, software architects, and tech enthusiasts. We’ll delve into modern distributed applications with Conductor, the leading open-source orchestration platform. We have an exciting lineup of speakers, including a few prominent industry experts. Don't miss out on this exciting opportunity!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/meetups/microservices-and-orkes-conductor-meetup-bay-area?utm_campaign=jan-24-highlight-blog&amp;amp;utm_source=blog&amp;amp;utm_medium=web"&gt;Reserve your spot&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS &amp;amp; Orkes Developer Meetup | Seattle
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 21, 2024: Seattle, US&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us for our first in-person meetup in Seattle, in collaboration with &lt;a href="https://aws.amazon.com/"&gt;AWS&lt;/a&gt;, on &lt;strong&gt;Feb 21, 2024&lt;/strong&gt;, from &lt;strong&gt;01:30 - 03:30 PM&lt;/strong&gt; at &lt;strong&gt;AWS, Seattle&lt;/strong&gt;. Dive into how Conductor powers contemporary distributed applications with informative sessions on implementing resilient application executions and creating GenAI-driven solutions using Conductor and AWS. Don't let this opportunity pass you by!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/meetups/microservices-and-orkes-conductor-meetup-seattle?utm_campaign=jan-24-highlight-blog&amp;amp;utm_source=blog&amp;amp;utm_medium=web"&gt;Block your slot now&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  AI Webcast | Build and Scale RAG Applications using Orkes Gen AI Orchestration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 8, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us for our first technical webinar of the year on &lt;strong&gt;Feb 8, 2024&lt;/strong&gt;, at &lt;strong&gt;09:00 AM PT&lt;/strong&gt;. Discover the potential of Gen AI Orchestration with Orkes Conductor as we explore application development. Learn directly from the Orkes CTO and the creator of Netflix Conductor on how to integrate Conductor with AI/LLM models, vector databases, and effective prompt engineering techniques. Secure your spot now for this invaluable opportunity!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/technical-webinar?utm_campaign=jan-24-highlight-blog&amp;amp;utm_source=blog&amp;amp;utm_medium=web"&gt;Register now&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conductor Virtual Meetup | Feb’24
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 13, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The February edition of the Conductor Virtual Meetup is scheduled for &lt;strong&gt;Feb 13, 2024&lt;/strong&gt;, from &lt;strong&gt;09:00 AM - 10:30 AM PT&lt;/strong&gt;. This meetup is an opportunity to dive deep into the potential of Conductor, uncover the strategies for scalable application development, get insights from industry experts leveraging Conductor, and engage in vibrant discussions with fellow tech enthusiasts. See you there!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/meetups/conductor-virtual-meetup-feb-2024?utm_campaign=jan-24-highlight-blog&amp;amp;utm_source=blog&amp;amp;utm_medium=web"&gt;Reserve your spot&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Vue.js Nation Workshop
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 15, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secure your spot for an exciting two-hour virtual workshop at &lt;a href="https://vuejsnation.com/workshops"&gt;Vue.js Nation Conference&lt;/a&gt; on &lt;strong&gt;Feb 15, 2024&lt;/strong&gt;, starting at &lt;strong&gt;10:00 AM ET&lt;/strong&gt;. Join Olivier Poupeney, Head of DevRel at Orkes, as he delves into the intricacies of building stateful BFF (Back-end for front-end) using Conductor, the leading open-source orchestration platform, and gain invaluable insights to enhance your front-end development journey with Conductor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vuejsnation.com/workshops/build-stateful-bff-using-conductor-a-leading-open-source-orchestration-platform"&gt;Count me in&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  dojo.live Tech Talk
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 6, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join Orkes CTO and co-founder Viren Baraiya at &lt;a href="https://dojo.live/"&gt;dojo.live&lt;/a&gt; on &lt;strong&gt;Feb 6, 2024&lt;/strong&gt;, at &lt;strong&gt;10:00 AM PT&lt;/strong&gt; for an exclusive session on the incredible potential of integrating Gen AI capabilities into your applications!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/events/7155611631085871104/comments/"&gt;Register now&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  FOSS Overflow
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dec 16, 2023 - Feb 10, 2024: Bhilai, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us at &lt;a href="https://fossoverflow.dev/"&gt;FOSS Overflow&lt;/a&gt;, a month-long hackathon from &lt;strong&gt;Dec 16, 2023 - Feb 10, 2024&lt;/strong&gt;, at &lt;strong&gt;IIT Bhilai, India&lt;/strong&gt;, organized by OpenLake and GDSC IIT Bhilai. This program aims to introduce students to the realm of open-source by guiding them through creating real-world open-source projects with the support of experienced mentors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fossoverflow.dev/apply"&gt;Register now &lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Hack This Fall Hackathon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 9-11, 2024: Gujarat, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This February 2024, we are excited to partner with H&lt;a href="https://hackthisfall.tech/"&gt;ack This Fall&lt;/a&gt; Hackathon Season 4 for a 36-hour in-person coding challenge from &lt;strong&gt;Feb 9-11, 2024&lt;/strong&gt;, at &lt;strong&gt;Karnavati University BBA New campus, Gandhinagar, Gujarat, India&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This hackathon aims to foster a beginner-friendly environment where people of diverse backgrounds can collaborate and create meaningful projects with Orkes Conductor. Orkes team will be there to help you kickstart and build exciting projects with Conductor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hackthisfall.tech/"&gt;Check out now&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Recap of January 2024 Events
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Virtual Conductor Meetup Jan’24
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 9, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We began 2024 with the Virtual Conductor Meetup on Jan 9, 2024. We were fortunate to have &lt;a href="https://www.linkedin.com/in/virenb/"&gt;Viren Baraiya&lt;/a&gt;, CTO &amp;amp; Co-Founder of Orkes &amp;amp; &lt;a href="https://www.linkedin.com/in/ACoAAAEuxoEB0UZPfT_wqj1bwTVf5psY2ARDZxc"&gt;Olivier Poupeney&lt;/a&gt;, Head of DevRel, as the speakers.&lt;/p&gt;

&lt;p&gt;The meetup began with Olivier’s talk on leveraging Conductor as an integration platform for building large-scale distributed applications. &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/watch?feature=shared&amp;amp;v=jBsa8HVXVT8" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y8NtMrCa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/jBsa8HVXVT8/maxresdefault.jpg" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/watch?feature=shared&amp;amp;v=jBsa8HVXVT8" rel="noopener noreferrer" class="c-link"&gt;
          Using Conductor as an Integration Platform | Virtual Conductor Meetup - Jan'24 - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          In this video, our Head of DevRel, Olivier Poupeney, shares his insights on how you can leverage Conductor as an integration platform for your large scale ap...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--LxIdwaWF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/53970d6d/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It was followed by Viren’s talk on the importance of application flows' durability for conquering modern distributed systems' development.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/watch?feature=shared&amp;amp;v=rpkwB25gw10" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--FPzhdmXt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/rpkwB25gw10/maxresdefault.jpg" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/watch?feature=shared&amp;amp;v=rpkwB25gw10" rel="noopener noreferrer" class="c-link"&gt;
          Durable Executions - Why Does it Matter for Applications | Virtual Conductor Meetup-Jan'24 - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          In this video, our CTO and creator of Netflix Conductor, Viren Baraiya shares insights on the importance of durability of application flows for distributed s...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--LxIdwaWF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/53970d6d/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  FOSS United Bangalore
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 13, 2024: Bengaluru, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had an incredible time at the &lt;a href="https://fossunited.org/"&gt;FOSS (Free and Open Source Software) United Bangalore&lt;/a&gt;, a gathering of free, open-source software developers, enthusiasts, and communities. &lt;a href="https://www.linkedin.com/in/mananbbhatt/"&gt;Manan Bhatt&lt;/a&gt;, Founding Engineer at Orkes, shared an insightful session on the fascinating realm of orchestration in Retrieval Augmented Generation (RAG) with Orkes Conductor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazrs2tnp83snaca7x7t5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazrs2tnp83snaca7x7t5.jpg" alt="Orkes at FOSS United Bangalore" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Orkes x TechHacks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 19-21, 2024: Punjab, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;January was an electrifying month with the &lt;a href="https://techacks.org/"&gt;TechHacks&lt;/a&gt; hackathon, held from Jan 19-21, 2024, in Punjab, India. This gathering united many innovative minds and witnessed terrific projects built over Conductor. Additionally, we had &lt;a href="https://www.linkedin.com/in/altafalam21/"&gt;Altaf Alam Ansari&lt;/a&gt;, Software Engineer at Orkes, as an in-person mentor at the event.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpa3dmf2633qlkoo1ae6d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpa3dmf2633qlkoo1ae6d.jpg" alt="Orkes x TechHacks Hackathon" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During workshops, mentorship sessions, and networking events, participants engaged in vibrant discussions, fostering an environment rich in creativity and innovation.&lt;br&gt;
Here's the feedback shared by our wonderful community about the event:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmesfxl07cjldarh3cx4x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmesfxl07cjldarh3cx4x.jpg" alt="Orkes x TechHacks Community Response" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vue.js Nation Conference 2024
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 24-25, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the &lt;a href="https://vuejsnation.com/"&gt;Vue.js Nation Conference 2024&lt;/a&gt;, we made a significant impression with our "Accelerating front-end development with stateful BFFs" session led by &lt;a href="https://www.linkedin.com/in/ACoAAAEuxoEB0UZPfT_wqj1bwTVf5psY2ARDZxc"&gt;Olivier Poupeney&lt;/a&gt;, Head of DevRel at Orkes. Featuring Conductor, the leading open-source orchestration platform, the talk showcased Conductor's transformative potential, encouraging attendees to reimagine their methodologies and cultivate a unified outlook for the future of front-end development with Conductor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microservices &amp;amp; Distributed Applications Meetup | Boston
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 30, 2024: Boston, US&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In partnership with &lt;a href="https://gdg.community.dev/gdg-cloud-boston/"&gt;GDG Boston&lt;/a&gt;, we organized the &lt;a href="https://gdg.community.dev/events/details/google-gdg-cloud-boston-presents-microservices-amp-distributed-applications-meetup-with-orkes/"&gt;Microservices &amp;amp; Distributed Applications Meetup&lt;/a&gt; in Boston, offering a valuable opportunity to dive into the practical aspects of building distributed applications using Conductor. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/abhiguptaca/"&gt;Abhishek Gupta&lt;/a&gt;, Software Engineering Lead at Orkes, delivered a comprehensive session on developing distributed applications with the Python SDK, catering to Python enthusiasts and opening doors for Conductor SDK exploration. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/ACoAAAEuxoEB0UZPfT_wqj1bwTVf5psY2ARDZxc"&gt;Olivier Poupeney&lt;/a&gt;, Head of DevRel at Orkes, shared insightful strategies for integrating orchestration capabilities into applications using Conductor.&lt;/p&gt;

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

</description>
      <category>microservices</category>
      <category>orchestration</category>
      <category>ai</category>
      <category>applicationdevelopment</category>
    </item>
    <item>
      <title>Announcing Initial Release of New Conductor OSS Repository</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Mon, 22 Jan 2024 09:16:46 +0000</pubDate>
      <link>https://dev.to/orkes/announcing-initial-release-of-new-conductor-oss-repository-195l</link>
      <guid>https://dev.to/orkes/announcing-initial-release-of-new-conductor-oss-repository-195l</guid>
      <description>&lt;p&gt;Authored by &lt;a href="https://www.linkedin.com/in/olivierpoupeney/"&gt;Olivier Poupeney&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This week, Orkes announced the availability of the initial release of Conductor OSS. This is the inaugural release since we took ownership of the future and direction of Conductor’s community version. &lt;/p&gt;

&lt;p&gt;This first release (tagged as v3.16.0) of Conductor OSS marks a significant milestone in Orkes’s Open Source strategy. Member of CNCF, Linux Foundation, and more recently FINOS, having a seat at the FINOS’s technical oversight committee, we aim to not only nurture and grow the Conductor community but also interconnect it with complementary communities in order to empower open source-based innovations where Conductor can be a key architectural component.&lt;/p&gt;

&lt;p&gt;The enthusiasm from developers around the world to contribute to this release and participate in the contribution effort demonstrates the strength of Conductor to become the leading Open-Source application orchestration platform.&lt;/p&gt;

&lt;p&gt;The takeaways of this release are detailed below:&lt;/p&gt;

&lt;h2&gt;
  
  
  Updates in v3.16.0
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Features &amp;amp; Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Spring boo3 upgrade by @&lt;a href="https://github.com/LuisLainez"&gt;LuisLainez&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/10"&gt;#10&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Permissive Task Capability by &lt;a href="https://github.com/ivakoleva"&gt;@ivakoleva&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/3"&gt;#3&lt;/a&gt;: Introduced permissive task capability.&lt;/li&gt;
&lt;li&gt;Added the task update API by reference name by &lt;a href="https://github.com/boney9"&gt;@boney9&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/15"&gt;#15&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bug fix by &lt;a href="https://github.com/math29"&gt;@math29&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/4"&gt;#4&lt;/a&gt;: Resolved an issue where the wrong unit was used in SetVariable error messages.&lt;/li&gt;
&lt;li&gt;Typo Fix by &lt;a href="https://github.com/Young-Zen"&gt;@Young-Zen&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/6"&gt;#6&lt;/a&gt;: Corrected a typo in WorkflowTaskTypeConstraint.&lt;/li&gt;
&lt;li&gt;Security Update by &lt;a href="https://github.com/scottcarter87"&gt;@scottcarter87&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/5"&gt;#5&lt;/a&gt;: Addressed and resolved open vulnerabilities in Conductor.&lt;/li&gt;
&lt;li&gt;Dependency Error Fix by &lt;a href="https://github.com/Young-Zen"&gt;@Young-Zen&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/11"&gt;#11&lt;/a&gt;: Fixed an Elasticsearch dependency error.&lt;/li&gt;
&lt;li&gt;Bug fix by &lt;a href="https://github.com/haricane8133"&gt;@haricane8133&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/issues/7"&gt;#7&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Build and Testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Classifier Update by &lt;a href="https://github.com/s50600822"&gt;@s50600822&lt;/a&gt; in &lt;a href="https://github.com/conductor-oss/conductor/pull/23"&gt;#23&lt;/a&gt;: Updated the classifier in alignment with Gradle 5.1 changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributors - Our Community Stars
&lt;/h2&gt;

&lt;p&gt;We extend a heartfelt thank you to our newest contributors, who have played a pivotal role in shaping this release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/LuisLainez"&gt;@LuisLainez&lt;/a&gt; -  &lt;a href="https://www.linkedin.com/in/luis-miguel-lainez-reche/"&gt;Luis Miguel Lainez Reche&lt;/a&gt;, Senior Software Engineer at Atlassian&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/math29"&gt;@math29&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/mathieu-allain-81481093/"&gt;Mathieu Allain&lt;/a&gt;, Software Engineer at Amadeus&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/s50600822"&gt;@s50600822&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/hoa-phan-s50600822/"&gt;Hoa Phan&lt;/a&gt;, Software Developer&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Young-Zen"&gt;@Young-Zen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/scottcarter87"&gt;@scottcarter87 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ivakoleva"&gt;@ivakoleva&lt;/a&gt; - Broadcom&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/haricane8133"&gt;@haricane8133&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/haricane8133/"&gt;Hari Rajesh&lt;/a&gt;, SDE at PayPal&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/boney9"&gt;@boney9&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/boneys/"&gt;Boney Sekh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/c4lm"&gt;@c4lm&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/vasiliy-pankov/"&gt;Vasily Pankov&lt;/a&gt;, Senior Software Engineer at Orkes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/saksham2105"&gt;@saksham2105&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/saksham-solanki-%F0%9F%87%AE%F0%9F%87%B3-248691174/"&gt;Saksham Solanki&lt;/a&gt;, Software Engineer at Orkes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your dedication and hard work are truly appreciated. 🙌 Together, let's continue to push the boundaries and shape the future of Conductor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show Your Support
&lt;/h2&gt;

&lt;p&gt;We invite you to express your support by starring our Conductor OSS repository on GitHub. Your stars fuel our motivation to innovate and grow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/conductor-oss/conductor"&gt;🌟Star, Fork &amp;amp; Start Contributing&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Happy Coding!
&lt;/h2&gt;

&lt;p&gt;As we celebrate this milestone, we're eager to see the incredible projects and innovations that will be powered by Conductor OSS. Happy coding to all our contributors, users, and the entire Conductor community!&lt;/p&gt;

&lt;p&gt;To preview what's coming in the subsequent releases, check out our &lt;a href="https://github.com/orgs/conductor-oss/projects/1/views/1"&gt;Conductor Roadmap&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>orchestration</category>
      <category>opensource</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>Orkes Monthly Highlights - December 2023</title>
      <dc:creator>Riza Farheen</dc:creator>
      <pubDate>Fri, 22 Dec 2023 11:58:48 +0000</pubDate>
      <link>https://dev.to/orkes/orkes-monthly-highlights-december-2023-290h</link>
      <guid>https://dev.to/orkes/orkes-monthly-highlights-december-2023-290h</guid>
      <description>&lt;p&gt;Welcome to the December edition of Orkes Monthly Highlights.&lt;/p&gt;

&lt;p&gt;December closes the 2023 chapter as a very intense year for the Conductor developer community. Contributions, hackathons, and participation in numerous developer conferences, we have been delighted to meet and exchange with developers throughout the year. As today Conductor starts a new era with its new home, the community is more active and engaged than ever.&lt;/p&gt;

&lt;p&gt;If not done yet, Star 🌟 the new repo and show your support to &lt;a href="https://github.com/conductor-oss/conductor" rel="noopener noreferrer"&gt;Conductor and Open Source&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Let's quickly dive into the events from December 2023 and get an exclusive glimpse of what January 2024 has in store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A New Home for Conductor OSS
&lt;/h3&gt;

&lt;p&gt;We have some exciting updates to our Conductor Community regarding the future of Conductor OSS. &lt;/p&gt;

&lt;p&gt;Starting December 13, 2023, Orkes assumed a more prominent role in stewarding the Conductor OSS project. This transition comes as Netflix refocuses its efforts on its internal Conductor fork. &lt;a href="https://orkes.io/blog/evolving-conductor-open-source-and-the-conductor-community/" rel="noopener noreferrer"&gt;Read our official announcement blog for more details&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Conductor OSS now has a new home, and Orkes will continue facilitating collaboration across the active open-source community. Send PRs directly to this repo and check &lt;a href="https://github.com/conductor-oss/conductor/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;the contribution guidelines&lt;/a&gt; of Conductor. &lt;/p&gt;

&lt;h2&gt;
  
  
  Recap of December 2023 Events
&lt;/h2&gt;

&lt;h3&gt;
  
  
  APIDays Paris
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dec 7, 2023: Paris, France&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had an incredible time at the APIDays Paris on Dec 7, 2023. Our Head of DevRel, &lt;a href="https://www.linkedin.com/in/ACoAAAEuxoEB0UZPfT_wqj1bwTVf5psY2ARDZxc" rel="noopener noreferrer"&gt;Olivier Poupeney&lt;/a&gt;, delivered an insightful session on the groundbreaking impact of Retrieval Augmented Generation (RAG) across diverse applications.&lt;/p&gt;

&lt;p&gt;The session delved into a practical demonstration showcasing the application of RAG in automating market data within the financial services industry. Olivier provided a live demo highlighting the latest advancements in Gen AI capabilities integrated into Orkes Conductor.&lt;/p&gt;

&lt;p&gt;In case you missed it, the recording is now available.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/jVQNJwH9tL4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Microservices and Orkes Conductor Meetup Paris
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dec 8, 2023: Paris, France&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The second edition of the Microservices and Orkes Conductor Meetup in Paris occurred on Dec 8, 2023. The event showcased insightful sessions by industry experts, offering attendees valuable opportunities to network and learn.&lt;/p&gt;

&lt;p&gt;Featured speakers included &lt;a href="https://www.linkedin.com/in/malgamves/" rel="noopener noreferrer"&gt;Daniel Phiri&lt;/a&gt; from &lt;a href="https://weaviate.io/" rel="noopener noreferrer"&gt;Weaviate&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/cl%C3%A9ment-aubert-567a351a/" rel="noopener noreferrer"&gt;Clément Aubert&lt;/a&gt; from &lt;a href="https://www.product-live.com/" rel="noopener noreferrer"&gt;Product Live&lt;/a&gt;, and &lt;a href="https://www.linkedin.com/in/ACoAAAEuxoEB0UZPfT_wqj1bwTVf5psY2ARDZxc" rel="noopener noreferrer"&gt;Olivier Poupeney&lt;/a&gt; from Orkes. The meetup was a blend of fun and information, fostering connections and engagement within the Paris tech community.&lt;/p&gt;

&lt;p&gt;A heartfelt thank you to everyone who joined us. Your active participation made it an exceptional event filled with enlightening discussions, groundbreaking insights, and unparalleled networking opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orkes x Netflix | Conductor Meetup
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dec 13, 2023: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Co-organized by Orkes and Netflix Engineering, the Conductor Meetup for Q4 was hosted virtually on Dec 13, 2023. We were privileged to have &lt;a href="https://www.linkedin.com/in/ankitagar000/" rel="noopener noreferrer"&gt;Ankit Agarwal&lt;/a&gt; from &lt;a href="https://fynarfin.io/" rel="noopener noreferrer"&gt;Fynarfin&lt;/a&gt;, &amp;amp; &lt;a href="https://www.linkedin.com/in/virenb/" rel="noopener noreferrer"&gt;Viren Baraiya&lt;/a&gt;, and &lt;a href="https://www.linkedin.com/in/olivierpoupeney/" rel="noopener noreferrer"&gt;Olivier Poupeney&lt;/a&gt; from Orkes as featured speakers.&lt;/p&gt;

&lt;p&gt;The meetup started with Viren’s talk on building event-driven distributed applications with Conductor.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/C6bH0koO2NQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;It was followed by Ankit’s talk on how Mifos implemented a Digital Payment Goods (DPG) Compliant for orchestrating their microservice-driven Payment Hub.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Q74IMa3OKfA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Finally, the meetup concluded with Olivier’s session on AI-enabled Orchestration and Retrieval Augmented Generation (RAG).&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/YWJlRDu-TsI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Join our Upcoming Events
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Virtual Conductor Meetup
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 9, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first virtual meetup of the year is scheduled for &lt;strong&gt;Jan 9, 2024&lt;/strong&gt;, from &lt;strong&gt;09:00 AM - 11:00 AM PT&lt;/strong&gt;. This meetup is an opportunity to dive deep into the potential of Conductor. We have a great panel of industry experts lined up to share their expertise and knowledge on how they are using Conductor to build their scalable, resilient, and distributed platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://orkes.io/meetups/virtual-orkes-conductor-meetup-jan-2024" rel="noopener noreferrer"&gt;Register now&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  FOSS Overflow
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dec 16, 2023 - Feb 10, 2024: Bhilai, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us at &lt;a href="https://fossoverflow.dev/" rel="noopener noreferrer"&gt;FOSS Overflow&lt;/a&gt;, a month-long hackathon from &lt;strong&gt;Dec 16, 2023 - Feb 10, 2024&lt;/strong&gt;, at &lt;strong&gt;&lt;em&gt;IIT Bhilai, India,&lt;/em&gt;&lt;/strong&gt; organized by OpenLake and GDSC IIT Bhilai. This program aims to introduce students to the realm of open-source by guiding them through the creation of real-world open-source projects with the support of experienced mentors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://fossoverflow.dev/apply" rel="noopener noreferrer"&gt;Register now &lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  dojo.live Tech Talk
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 10, 2024: Virtual&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join our CTO and co-founder, Viren Baraiya, at &lt;a href="https://dojo.live/" rel="noopener noreferrer"&gt;dojo.live&lt;/a&gt; on &lt;strong&gt;Jan 10, 2024,&lt;/strong&gt; at &lt;strong&gt;10:00 AM PT&lt;/strong&gt; for an exclusive session on the incredible potential of integrating Gen AI capabilities into your applications!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://www.linkedin.com/events/7141183684430225408/comments/" rel="noopener noreferrer"&gt;Register now &lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TechHacks Hackathon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 19-21, 2024: Punjab, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Orkes is teaming up with &lt;a href="https://techacks.org/" rel="noopener noreferrer"&gt;Techacks 4.0&lt;/a&gt; for an amazing hackathon from &lt;strong&gt;Jan 19 - 21, 2024,&lt;/strong&gt; at &lt;strong&gt;&lt;em&gt;Chitkara University, Punjab, India&lt;/em&gt;&lt;/strong&gt;. Engage with a vibrant community of hackers, collaborate on innovative projects, and unleash your creativity in a supportive and inspiring environment. Don't miss this opportunity to connect, learn, and create something extraordinary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://lu.ma/techacks4.0" rel="noopener noreferrer"&gt;Register now &lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HackHiveHackathon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 19-21, 2024: Indore, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In January 2024, be part of an exciting 36-hour in-person hackathon, &lt;a href="https://www.techhunterssss.tech/" rel="noopener noreferrer"&gt;HackHive&lt;/a&gt;, taking place from &lt;strong&gt;Jan 19-21&lt;/strong&gt; in &lt;strong&gt;&lt;em&gt;Indore, India&lt;/em&gt;&lt;/strong&gt;. HackHive is organized by TechHunterssss, a community fostering unity among tech enthusiasts. Its goal is to create a space where individuals passionate about technology can converge, learn, network, interact, and share experiences, cultivating their tech interests in a community-driven environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://hackhive.devfolio.co/" rel="noopener noreferrer"&gt;Register now &lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HackNITR Hackathon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jan 27, 2024: Odisha, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are excited to partner with &lt;a href="https://hacknitr.com/" rel="noopener noreferrer"&gt;HackNITR 5.0&lt;/a&gt;, one of the largest student-run hackathons in India. Hop on the bandwagon and join us on &lt;strong&gt;Jan 27, 2024,&lt;/strong&gt; at &lt;strong&gt;&lt;em&gt;NIT Rourkela, Odisha, India&lt;/em&gt;&lt;/strong&gt;. It’s an incredible opportunity put forward by tech enthusiasts from the Google Developer Student Club (GDSC) - NIT Rourkela, and OpenCode. Let your creativity soar, collaborate, and craft innovative solutions for an unforgettable experience. Exciting prizes await - reserve your spot now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://hacknitr.com/" rel="noopener noreferrer"&gt;Register now &lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hack This Fall Hackathon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feb 9-11, 2024: Gujarat, India&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This February 2024, we are excited to partner with &lt;a href="https://hackthisfall.tech/" rel="noopener noreferrer"&gt;Hack This Fall Hackathon&lt;/a&gt; Season 4 for a 36-hour in-person coding challenge from &lt;strong&gt;Feb 9-11, 2024&lt;/strong&gt; at &lt;strong&gt;&lt;em&gt;Karnavati University BBA New campus, Gandhinagar, Gujarat, India&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This hackathon aims to foster a beginner-friendly environment where people of diverse backgrounds can collaborate and create meaningful projects with Orkes Conductor. Orkes team will be there to help you kickstart and build exciting projects with Conductor. Exclusive prizes await the winners. Block your seats now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://lu.ma/hackthisfall" rel="noopener noreferrer"&gt;Register now &lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Latest Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://orkes.io/content/developer-guides/sqs-integration" rel="noopener noreferrer"&gt;Integrating Orkes Conductor with SQS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recent Blog Posts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Opsgenie Alerting with Orkes Conductor
&lt;/h3&gt;

&lt;p&gt;In the realm of SaaS and SLAs, maintaining a solid commitment to stringent uptime standards is critical. For instance, ensuring a mandated 98% application uptime requires swift detection and mitigation of downtime. Orkes Conductor, coupled with Opsgenie, swiftly addresses these needs, ensuring adherence to SLA commitments by promptly detecting and resolving application downtime and strengthening the provider-client relationship.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://orkes.io/blog/opsgenie-alerting-with-orkes-conductor/" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Spotlight
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using Conductor OSS for Orchestrating DPG Compliant Payment Hub - Ankit Agarwal
&lt;/h3&gt;

&lt;p&gt;This month, we would like to spotlight one of our community members, &lt;a href="https://www.linkedin.com/in/ankitagar000/" rel="noopener noreferrer"&gt;Ankit Agarwal&lt;/a&gt; from OpenMF, on leveraging Conductor OSS (formerly Netflix Conductor) to orchestrate the Payment Hub to be Digital Public Goods (DPG) Compliant. Read the article to learn how OpenMF opted for Conductor OSS (formerly Netflix Conductor) to orchestrate their microservice-based Payment Hub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://orkes.io/blog/using-conductor-oss-for-orchestrating-digital-public-goods-dpg-compliant-payment-hub/" rel="noopener noreferrer"&gt;Read now&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Like Ankit, if you would like to share your innovation based on Conductor with the community, please reach out to us at &lt;a href="mailto:devrel@orkes.io"&gt;devrel@orkes.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Wishing everyone joyous holidays filled with warmth and cheer!!!&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>orchestration</category>
      <category>newsletter</category>
      <category>announcement</category>
    </item>
  </channel>
</rss>
