# Workflow Builder


# Workflow Builder

**Workflow Builder** **स्क्रिप्टेड कॉल प्रवाह** के लिए एक दृश्य, नोड-आधारित संपादक है। जहाँ खुला-छोर एजेंट मॉडल को तय करने देता है कि आगे क्या कहना है, वहीं एक वर्कफ़्लो एजेंट को एक नियतात्मक पथ देता है — चरणों का एक क्रम जो बोलता है, पूछता है, ब्रांच करता है, टूल कॉल करता है और बातचीत को रूट करता है। इसका उपयोग तब करें जब किसी कॉल को एक परिभाषित स्क्रिप्ट का पालन करना हो: किसी लीड को योग्य ठहराना, अपॉइंटमेंट बुक करना, किसी सपोर्ट मुद्दे को ट्राइएज करना या एक सर्वेक्षण एकत्र करना। आप इसे एजेंट बिल्डर में **/agent/setup** पर **Tools** टैब से, **Open Workflow Builder** बटन का उपयोग करके खोलते हैं।

एक वर्कफ़्लो एक ही एजेंट का होता है। कॉल के समय एक **सुपरवाइज़र** बातचीत देखता है, तय करता है कि कॉल करने वाला कौन-सा **इंटेंट** व्यक्त कर रहा है, और उस इंटेंट के **चरण** क्रम में चलाता है। चरणों के भीतर एजेंट जिन फ़ंक्शन का उपयोग कर सकता है वे ठीक वही हैं जो आपने [Tools टैब](./tools-mcp) पर बाँधे हैं — वर्कफ़्लो किसी ऐसे टूल तक नहीं पहुँच सकता जिसे आपने अनुमति नहीं दी।

## वर्कफ़्लो की संरचना कैसी होती है

![Workflow Builder](/img/screenshots/portal/workflow-builder.png)
*Workflow Builder: n8n-शैली के नोड कैनवस पर डिटर्मिनिस्टिक कॉल फ़्लो डिज़ाइन करें, एक वैकल्पिक सुपरवाइज़र प्रॉम्प्ट के साथ।*

एक वर्कफ़्लो के तीन नेस्टेड स्तर होते हैं:

- **Graph** — प्रति एजेंट एक वर्कफ़्लो। यह एक वैकल्पिक **सुपरवाइज़र प्रॉम्प्ट** रखता है (इंटेंट को रूट करने वाले AI सुपरवाइज़र के लिए कस्टम निर्देश)। जब तक आप ग्राफ़ नहीं बनाते, बिल्डर एक बार दिखने वाली **Create Workflow Graph** स्क्रीन सुपरवाइज़र-प्रॉम्प्ट फ़ील्ड के साथ दिखाता है।
- **Intents** — बातचीत की शाखाएँ। प्रत्येक इंटेंट का एक **display name**, एक **internal name**, एक **description** (सुपरवाइज़र मॉडल को दिखाया जाता है ताकि यह इंटेंट का मिलान कर सके), **trigger phrases** की एक सूची, एक **default intent** टॉगल, और एक वैकल्पिक **fallback response** होता है जो इसके सभी चरण विफल होने पर उपयोग होता है। सुपरवाइज़र वह इंटेंट चुनता है जिसका विवरण और ट्रिगर वाक्यांश कॉल करने वाले ने जो कहा उससे सबसे अच्छा मेल खाते हैं।
- **Steps** — किसी इंटेंट के भीतर क्रमबद्ध क्रियाएँ। चरण डिफ़ॉल्ट रूप से ऊपर से नीचे चलते हैं, और प्रत्येक चरण का एक प्रकार होता है जो तय करता है कि यह क्या करता है।

कैनवास पर यह एक हरे **Start** नोड के रूप में पढ़ा जाता है जो प्रति शाखा एक **Intent** नोड में बहता है, उस इंटेंट के **Step** नोड उसके नीचे ढेर में लगे होते हैं। एक मिनीमैप, ज़ूम नियंत्रण और एक बिंदीदार पृष्ठभूमि बड़े प्रवाहों में नेविगेट करने में मदद करते हैं।

:::info[इंटेंट ही वह तरीका है जिससे सुपरवाइज़र रूट करता है]

सुपरवाइज़र कॉल करने वाले के कथन को प्रत्येक इंटेंट के **description** और **trigger phrases** के विरुद्ध मिलाता है, इसलिए विवरण इस तरह लिखें जैसे आप किसी सहकर्मी को संक्षेप में बताएँगे ("User wants to book or schedule an appointment") और कुछ स्वाभाविक ट्रिगर वाक्यांश जोड़ें। किसी एक इंटेंट को **default** के रूप में चिह्नित करें ताकि वे बातचीतें पकड़ी जा सकें जो स्पष्ट रूप से किसी और चीज़ से मेल नहीं खातीं।

:::

## चरण प्रकार

**Add Step** के साथ एक चरण जोड़ें (किसी इंटेंट या उसके किसी चरण को चुनने के बाद), जो नोड पिकर खोलता है। पिकर चरण प्रकारों को **Conversation**, **Logic**, **Integrations** और **Call Control** में समूहित करता है। तेरह प्रकार हैं:

- **Message** — बॉट कॉल करने वाले से एक पंक्ति बोलता है।
- **Question** — बॉट कुछ पूछता है और उत्तर को एक **variable** में संग्रहीत करता है। आप एक **validation type** (Any, Number, Email, Date, Yes / No या Phone) और एक **re-ask message** चुनते हैं जो उत्तर के सत्यापन में विफल होने पर उपयोग होता है।
- **Condition** — प्रवाह को ब्रांच करता है। आप एक **field** (एक सत्र वेरिएबल), एक **operator** (equals, not equals, contains, does not contain, greater than, less than, matches regex, is empty, is not empty) और एक **value** चुनते हैं, फिर **If True** और **If False** को विशिष्ट चरणों पर रूट करते हैं।
- **Tool Call** — एजेंट से बँधे एक **built-in** या **custom** फ़ंक्शन को कॉल करता है। आप टूल प्रकार, फ़ंक्शन, और एक वैकल्पिक **input mapping** (JSON) चुनते हैं जो चरण इनपुट को सत्र वेरिएबल से मैप करता है।
- **Appointment** — अपनी इनपुट मैपिंग के साथ, एक बुकिंग फ़ंक्शन के विरुद्ध एक अपॉइंटमेंट-बुकिंग उप-प्रवाह चलाता है।
- **Webhook** — किसी बाहरी URL को एक HTTP अनुरोध करता है। आप **method** (GET, POST, PUT, PATCH, DELETE), **URL**, वैकल्पिक **headers** (JSON), एक **body template**, और प्रतिक्रिया को **save the response** करने के लिए एक वेरिएबल सेट करते हैं।
- **Transfer** — कॉल को किसी अन्य **phone number or queue** को सौंपता है, ट्रांसफ़र से पहले घोषित एक वैकल्पिक संदेश के साथ। कॉल ट्रांसफ़र एंड-टू-एंड कैसे व्यवहार करते हैं इसके लिए [कॉलिंग और टेलीफ़ोनी](./calling-telephony) देखें।
- **End Call** — कॉल काटता है, वैकल्पिक रूप से पहले एक **goodbye message** बोलते हुए।
- **Delay** — जारी रखने से पहले एक निर्धारित सेकंडों की संख्या (1–60) तक चुपचाप प्रतीक्षा करता है।
- **Set Variable** — एक मान (स्थिर टेक्स्ट या किसी अन्य वेरिएबल का संदर्भ) को एक सत्र वेरिएबल में संग्रहीत करता है।
- **Send Notification** — एक नामित टेम्पलेट और एक वेरिएबल मैपिंग (JSON) का उपयोग करके एक **SMS**, **email** या **WhatsApp** संदेश भेजता है।
- **Static Response** — टेक्स्ट का एक निश्चित खंड बोलता है। यह एक लीगेसी नोड है; नए प्रवाहों के लिए **Message** को प्राथमिकता दें।
- **Play Audio** — कॉल करने वाले को एक ऑडियो फ़ाइल (एक सार्वजनिक WAV या MP3 URL) चलाता है।

प्रत्येक चरण **दाएँ-हाथ के पैनल** में कॉन्फ़िगर होता है जो किसी नोड को चुनने पर खुलता है। पैनल केवल उस चरण के प्रकार के लिए प्रासंगिक फ़ील्ड दिखाता है, साथ ही चरण का नाम और एक प्रकार चयनकर्ता।

:::tip[वेरिएबल आपके चरणों को आपस में जोड़ते हैं]

एक **Question** या **Set Variable** चरण अपना परिणाम आपके द्वारा चुने गए नाम के तहत संग्रहीत करता है। इसे बाद में संदर्भित करें — किसी Message में, किसी Condition के field में, किसी Webhook body में या किसी notification mapping में — कर्ली-ब्रेस सिंटैक्स जैसे `{variable_name}` के साथ। इसी तरह एक प्रवाह याद रखता है कि कॉल करने वाले ने क्या कहा और उसे चरणों में आगे ले जाता है।

:::

## ब्रांचिंग और रूटिंग

चरणों को एक सीधी रेखा में चलने की ज़रूरत नहीं:

- एक **Condition** चरण **True** और **False** आउटपुट उजागर करता है। किसी वेरिएबल के मान पर ब्रांच करने के लिए प्रत्येक को एक लक्ष्य चरण से वायर करें (या इसे **Continue in order** पर छोड़ दें)।
- हर दूसरे चरण प्रकार में **On Success** और **On Failure** रूटिंग होती है। डिफ़ॉल्ट रूप से एक चरण क्रम में अगले पर जारी रहता है; अन्यत्र कूदने के लिए इन्हें सेट करें — उदाहरण के लिए, किसी विफल Tool Call को एक रिकवरी संदेश पर रूट करें।

आप रूटिंग दो तरीकों से सेट कर सकते हैं: कॉन्फ़िग पैनल में लक्ष्य चरण चुनें, या कैनवास पर किसी चरण के आउटपुट हैंडल (हरा **OK** / **TRUE** हैंडल या लाल **FAIL** / **FALSE** हैंडल) से दूसरे चरण तक एक **कनेक्शन खींचें**। कैनवास पर खींचे गए कनेक्शन तुरंत वर्कफ़्लो में सहेजे जाते हैं।

## निर्माण और सहेजना

बिल्डर परिवर्तनों को एक बड़े सेव के बजाय आपके बनाते ही बनाए रखता है:

- **Add Intent** एक नई शाखा बनाता है; इसका नाम, विवरण और ट्रिगर वाक्यांश भरने के लिए इस पर क्लिक करें, फिर पैनल में **Save Changes** करें।
- **Add Step** आपके द्वारा चुने गए प्रकार का एक चरण सम्मिलित करता है; इसे पैनल में कॉन्फ़िगर करें और **Save Changes** करें।
- किसी नोड पर ऊपर / नीचे शेवरॉन इंटेंट और चरणों को **पुनः क्रमित** करते हैं; किसी नोड को हटाना (उसके ट्रैश आइकन या Delete कुंजी के माध्यम से) पहले पुष्टि माँगता है।
- टूलबार का **Save** बटन **सुपरवाइज़र प्रॉम्प्ट** को संग्रहीत करता है; एक अंबर बिंदु बिना सहेजे प्रॉम्प्ट संपादनों को चिह्नित करता है।

## किसी टेम्पलेट से शुरू करें

शुरुआत से बनाने के बजाय, **Templates** बटन तैयार-निर्मित प्रवाह प्रदान करता है जिन्हें आप लोड करके फिर संपादित कर सकते हैं: **Lead Qualification**, **Appointment Booking**, **Customer Support**, **NPS Survey**, **Payment Reminder** और **Customer Onboarding**। प्रत्येक अपने चरणों के साथ एक पूर्ण इंटेंट डालता है, जिसमें प्रश्न, शर्तें और गुडबाय संदेश शामिल हैं। किसी टेम्पलेट को लागू करना आपके मौजूदा वर्कफ़्लो को बदलने के बजाय उसमें **जोड़ता** है, इसलिए आप कई को मिला सकते हैं या जो नहीं चाहिए उसे छाँट सकते हैं।

## OpenAPI स्पेक से फ़ंक्शन आयात करें

**Import API** बटन किसी मौजूदा API को एजेंट फ़ंक्शन में बदल देता है जिन्हें आप **Tool Call** चरणों से कॉल कर सकते हैं। एक **OpenAPI / Swagger** स्पेक प्रदान करें — URL द्वारा या इसे पेस्ट करके (OpenAPI 2.0 या 3.x, JSON या YAML) — और आयातक ऑपरेशनों को पार्स करता है। आप जो ऑपरेशन चाहते हैं उन्हें चुनें, बेस URL की पुष्टि करें, और यह उनके लिए **custom functions** उत्पन्न करता है। वे फ़ंक्शन फिर Tool Call चरणों के लिए फ़ंक्शन सूची में और Tools टैब पर दिखाई देते हैं।

:::info[फ़ंक्शन का कैटलॉग कहीं और प्रबंधित होता है]

एक Tool Call चरण केवल उन्हीं फ़ंक्शन का उपयोग कर सकता है जो एजेंट के लिए पहले से उपलब्ध हैं — अंतर्निहित फ़ंक्शन और [Tools टैब](./tools-mcp) पर बँधे कोई भी कस्टम फ़ंक्शन, जिसमें OpenAPI आयातक द्वारा उत्पन्न किए गए शामिल हैं। यदि आप जो फ़ंक्शन चाहते हैं वह सूचीबद्ध नहीं है, तो पहले उसे Tools टैब पर जोड़ें।

:::

## अगले कदम

- [फ़ंक्शन बाँधें और MCP सर्वर कनेक्ट करें (Tools टैब)](./tools-mcp)
- [कॉल ट्रांसफ़र और टेलीफ़ोनी कॉन्फ़िगर करें](./calling-telephony)
- [अपना पहला एजेंट बनाएँ](./create-agent)
- [एजेंट अवलोकन पर वापस जाएँ](./overview)
