# Workflow Builder


# Workflow Builder

**Workflow Builder** എന്നത് **സ്ക്രിപ്റ്റഡ് കോൾ ഫ്ലോകൾക്കായുള്ള** ഒരു വിഷ്വൽ, നോഡ്-അധിഷ്ഠിത എഡിറ്ററാണ്. ഓപ്പൺ-എൻഡഡ് ഏജന്റ് അടുത്തതായി എന്ത് പറയണമെന്ന് മോഡലിനെ തീരുമാനിക്കാൻ അനുവദിക്കുമ്പോൾ, ഒരു workflow ഏജന്റിന് ഒരു നിർണ്ണായക പാത നൽകുന്നു — സംസാരിക്കുന്ന, ചോദിക്കുന്ന, branch ചെയ്യുന്ന, ടൂളുകൾ വിളിക്കുന്ന, സംഭാഷണത്തെ നയിക്കുന്ന ഘട്ടങ്ങളുടെ ഒരു ശ്രേണി. ഒരു കോൾ ഒരു നിർവചിക്കപ്പെട്ട സ്ക്രിപ്റ്റ് പിന്തുടരേണ്ടിവരുമ്പോൾ ഇത് ഉപയോഗിക്കുക: ഒരു ലീഡിനെ യോഗ്യമാക്കൽ, ഒരു അപ്പോയിന്റ്മെന്റ് ബുക്ക് ചെയ്യൽ, ഒരു സപ്പോർട്ട് പ്രശ്നം triage ചെയ്യൽ അല്ലെങ്കിൽ ഒരു സർവേ ശേഖരിക്കൽ. **/agent/setup**-ലെ ഏജന്റ് ബിൽഡറിലെ **Tools** ടാബിൽ നിന്ന്, **Open Workflow Builder** ബട്ടൺ ഉപയോഗിച്ച് നിങ്ങൾ ഇത് തുറക്കുന്നു.

ഒരു workflow ഒരൊറ്റ ഏജന്റിന്റേതാണ്. കോൾ സമയത്ത് ഒരു **supervisor** സംഭാഷണം നിരീക്ഷിക്കുന്നു, വിളിക്കുന്നയാൾ ഏത് **intent** പ്രകടിപ്പിക്കുന്നു എന്ന് തീരുമാനിക്കുന്നു, ആ intent-ന്റെ **steps** ക്രമത്തിൽ പ്രവർത്തിപ്പിക്കുന്നു. ഘട്ടങ്ങൾക്കുള്ളിൽ ഏജന്റിന് ഉപയോഗിക്കാവുന്ന ഫംഗ്ഷനുകൾ നിങ്ങൾ [Tools ടാബിൽ](./tools-mcp) ബൈൻഡ് ചെയ്തവ തന്നെയാണ് — നിങ്ങൾ അനുവദിക്കാത്ത ഒരു ടൂളിൽ workflow-ന് എത്താനാവില്ല.

## ഒരു workflow എങ്ങനെ ഘടനാപ്പെടുത്തിയിരിക്കുന്നു

![Workflow Builder](/img/screenshots/portal/workflow-builder.png)
*Workflow Builder: ഒരു n8n-ശൈലിയിലുള്ള നോഡ് കാൻവാസിൽ ഡിറ്റർമിനിസ്റ്റിക് കോൾ ഫ്ലോകൾ രൂപകൽപന ചെയ്യുക, ഓപ്ഷണൽ സൂപ്പർവൈസർ പ്രോംപ്റ്റോടെ.*

ഒരു workflow-ന് മൂന്ന് നെസ്റ്റഡ് തലങ്ങളുണ്ട്:

- **Graph** — ഓരോ ഏജന്റിനും ഒരു workflow. ഇതിന് ഒരു ഓപ്ഷണൽ **supervisor prompt** ഉണ്ട് (intents നയിക്കുന്ന AI supervisor-നുള്ള ഇഷ്ടാനുസൃത നിർദ്ദേശങ്ങൾ). നിങ്ങൾ graph സൃഷ്ടിക്കുന്നതുവരെ, supervisor-prompt ഫീൽഡുള്ള ഒരു ഒറ്റത്തവണ **Create Workflow Graph** സ്ക്രീൻ ബിൽഡർ കാണിക്കുന്നു.
- **Intents** — സംഭാഷണത്തിന്റെ ശാഖകൾ. ഓരോ intent-നും ഒരു **display name**, ഒരു **internal name**, ഒരു **description** (intent പൊരുത്തപ്പെടുത്താൻ കഴിയുംവിധം supervisor മോഡലിന് കാണിക്കുന്നു), **trigger phrases** ലിസ്റ്റ്, ഒരു **default intent** ടോഗിൾ, അതിന്റെ എല്ലാ ഘട്ടങ്ങളും പരാജയപ്പെട്ടാൽ ഉപയോഗിക്കുന്ന ഒരു ഓപ്ഷണൽ **fallback response** എന്നിവയുണ്ട്. വിളിക്കുന്നയാൾ പറഞ്ഞതിന് ഏത് intent-ന്റെ description-ഉം trigger phrases-ഉം ഏറ്റവും അനുയോജ്യമാണോ അത് supervisor തിരഞ്ഞെടുക്കുന്നു.
- **Steps** — ഒരു intent-നുള്ളിലെ ക്രമമായ പ്രവർത്തനങ്ങൾ. ഘട്ടങ്ങൾ ഡിഫോൾട്ടായി മുകളിൽ നിന്ന് താഴേക്ക് പ്രവർത്തിക്കുന്നു, ഓരോ ഘട്ടത്തിനും അത് എന്ത് ചെയ്യുന്നു എന്ന് തീരുമാനിക്കുന്ന ഒരു തരം ഉണ്ട്.

കാൻവാസിൽ ഇത് ഒരു പച്ച **Start** നോഡായി വായിക്കപ്പെടുന്നു, അത് ഓരോ ശാഖയ്ക്കും ഒരു **Intent** നോഡിലേക്ക് ഒഴുകുന്നു, ആ intent-ന്റെ **Step** നോഡുകൾ അതിന് താഴെ അടുക്കിയിരിക്കുന്നു. ഒരു മിനിമാപ്പ്, zoom നിയന്ത്രണങ്ങൾ, ഒരു ഡോട്ടഡ് പശ്ചാത്തലം എന്നിവ വലിയ ഫ്ലോകൾ നാവിഗേറ്റ് ചെയ്യാൻ നിങ്ങളെ സഹായിക്കുന്നു.

:::info[supervisor എങ്ങനെ നയിക്കുന്നു എന്നതാണ് intents]

supervisor വിളിക്കുന്നയാളുടെ വാക്കുകൾ ഓരോ intent-ന്റെയും **description**-ഉം **trigger phrases**-ഉം ആയി പൊരുത്തപ്പെടുത്തുന്നു, അതിനാൽ ഒരു സഹപ്രവർത്തകന് നിർദ്ദേശം നൽകുന്ന രീതിയിൽ descriptions എഴുതുക ("ഉപയോക്താവ് ഒരു അപ്പോയിന്റ്മെന്റ് ബുക്ക് ചെയ്യാനോ ഷെഡ്യൂൾ ചെയ്യാനോ ആഗ്രഹിക്കുന്നു") കൂടാതെ ഏതാനും സ്വാഭാവിക trigger phrases ചേർക്കുക. വ്യക്തമായി മറ്റൊന്നുമായും പൊരുത്തപ്പെടാത്ത സംഭാഷണങ്ങൾ പിടിക്കാൻ ഒരു intent **default** ആയി അടയാളപ്പെടുത്തുക.

:::

## ഘട്ട തരങ്ങൾ

**Add Step** ഉപയോഗിച്ച് ഒരു ഘട്ടം ചേർക്കുക (ഒരു intent അല്ലെങ്കിൽ അതിന്റെ ഒരു ഘട്ടം തിരഞ്ഞെടുത്തതിന് ശേഷം), ഇത് നോഡ് picker തുറക്കുന്നു. picker ഘട്ട തരങ്ങളെ **Conversation**, **Logic**, **Integrations**, **Call Control** എന്നിങ്ങനെ ഗ്രൂപ്പ് ചെയ്യുന്നു. പതിമൂന്ന് തരങ്ങളുണ്ട്:

- **Message** — ബോട്ട് വിളിക്കുന്നയാളോട് ഒരു വരി സംസാരിക്കുന്നു.
- **Question** — ബോട്ട് എന്തെങ്കിലും ചോദിക്കുകയും ഉത്തരം ഒരു **variable**-ൽ സംഭരിക്കുകയും ചെയ്യുന്നു. നിങ്ങൾ ഒരു **validation type** (Any, Number, Email, Date, Yes / No അല്ലെങ്കിൽ Phone) ഉം ഉത്തരം validation-ൽ പരാജയപ്പെടുമ്പോൾ ഉപയോഗിക്കുന്ന ഒരു **re-ask message** ഉം തിരഞ്ഞെടുക്കുന്നു.
- **Condition** — ഫ്ലോയെ branch ചെയ്യുന്നു. നിങ്ങൾ ഒരു **field** (ഒരു session variable), ഒരു **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** ഫംഗ്ഷൻ വിളിക്കുന്നു. നിങ്ങൾ ടൂൾ തരം, ഫംഗ്ഷൻ, ഘട്ട ഇൻപുട്ടുകൾ session variables-ലേക്ക് മാപ്പ് ചെയ്യുന്ന ഒരു ഓപ്ഷണൽ **input mapping** (JSON) എന്നിവ തിരഞ്ഞെടുക്കുന്നു.
- **Appointment** — അതിന്റേതായ input mapping-മായി ഒരു ബുക്കിംഗ് ഫംഗ്ഷനെതിരെ ഒരു അപ്പോയിന്റ്മെന്റ്-ബുക്കിംഗ് സബ്-ഫ്ലോ പ്രവർത്തിപ്പിക്കുന്നു.
- **Webhook** — ഒരു ബാഹ്യ URL-ലേക്ക് ഒരു HTTP അഭ്യർത്ഥന നടത്തുന്നു. നിങ്ങൾ **method** (GET, POST, PUT, PATCH, DELETE), **URL**, ഓപ്ഷണൽ **headers** (JSON), ഒരു **body template**, പ്രതികരണം **save the response** ചെയ്യാനുള്ള ഒരു variable എന്നിവ സജ്ജമാക്കുന്നു.
- **Transfer** — കോളിനെ മറ്റൊരു **phone number or queue**-ലേക്ക് കൈമാറുന്നു, കൈമാറ്റത്തിന് മുമ്പ് അറിയിക്കുന്ന ഒരു ഓപ്ഷണൽ സന്ദേശത്തോടെ. കോൾ കൈമാറ്റങ്ങൾ എൻഡ്-ടു-എൻഡ് എങ്ങനെ പെരുമാറുന്നു എന്നതിന് [കോളിംഗും ടെലിഫോണിയും](./calling-telephony) കാണുക.
- **End Call** — ഓപ്ഷണലായി ആദ്യം ഒരു **goodbye message** സംസാരിച്ച് കോൾ വിച്ഛേദിക്കുന്നു.
- **Delay** — തുടരുന്നതിന് മുമ്പ് നിശ്ചിത സെക്കൻഡുകൾ (1–60) നിശ്ശബ്ദമായി കാത്തിരിക്കുന്നു.
- **Set Variable** — ഒരു മൂല്യം (സ്ഥിര ടെക്സ്റ്റ് അല്ലെങ്കിൽ മറ്റൊരു variable-ലേക്കുള്ള ഒരു റഫറൻസ്) ഒരു session variable-ൽ സംഭരിക്കുന്നു.
- **Send Notification** — പേരുള്ള ഒരു ടെംപ്ലേറ്റും ഒരു variable mapping-ഉം (JSON) ഉപയോഗിച്ച് ഒരു **SMS**, **email** അല്ലെങ്കിൽ **WhatsApp** സന്ദേശം അയയ്ക്കുന്നു.
- **Static Response** — ഒരു സ്ഥിര ടെക്സ്റ്റ് ബ്ലോക്ക് സംസാരിക്കുന്നു. ഇത് ഒരു legacy നോഡാണ്; പുതിയ ഫ്ലോകൾക്ക് **Message** മുൻഗണന നൽകുക.
- **Play Audio** — വിളിക്കുന്നയാൾക്ക് ഒരു ഓഡിയോ ഫയൽ (ഒരു പൊതു WAV അല്ലെങ്കിൽ MP3 URL) പ്ലേ ചെയ്യുന്നു.

നിങ്ങൾ ഒരു നോഡ് തിരഞ്ഞെടുക്കുമ്പോൾ തുറക്കുന്ന **right-hand panel**-ൽ ഓരോ ഘട്ടവും ക്രമീകരിക്കുന്നു. ആ ഘട്ടത്തിന്റെ തരവുമായി ബന്ധപ്പെട്ട ഫീൽഡുകൾ മാത്രമേ panel കാണിക്കൂ, കൂടാതെ ഘട്ടത്തിന്റെ പേരും ഒരു തരം സെലക്ടറും.

:::tip[variables നിങ്ങളുടെ ഘട്ടങ്ങളെ ഒന്നിച്ച് ബന്ധിപ്പിക്കുന്നു]

ഒരു **Question** അല്ലെങ്കിൽ **Set Variable** ഘട്ടം അതിന്റെ ഫലം നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന ഒരു പേരിന് കീഴിൽ സംഭരിക്കുന്നു. പിന്നീട് അത് റഫർ ചെയ്യുക — ഒരു Message-ൽ, ഒരു Condition-ന്റെ field-ൽ, ഒരു Webhook body-യിൽ അല്ലെങ്കിൽ ഒരു notification mapping-ൽ — `{variable_name}` പോലുള്ള curly-brace സിന്റാക്സ് ഉപയോഗിച്ച്. വിളിക്കുന്നയാൾ പറഞ്ഞത് ഒരു ഫ്ലോ ഓർമ്മിക്കുകയും ഘട്ടങ്ങളിലുടനീളം മുന്നോട്ട് കൊണ്ടുപോകുകയും ചെയ്യുന്നത് ഇങ്ങനെയാണ്.

:::

## Branching-ഉം routing-ഉം

ഘട്ടങ്ങൾ ഒരു നേർരേഖയിൽ പ്രവർത്തിക്കണമെന്നില്ല:

- ഒരു **Condition** ഘട്ടം **True**, **False** ഔട്ട്പുട്ടുകൾ വെളിപ്പെടുത്തുന്നു. ഒരു variable-ന്റെ മൂല്യത്തിൽ branch ചെയ്യാൻ ഓരോന്നും ഒരു ലക്ഷ്യ ഘട്ടത്തിലേക്ക് വയർ ചെയ്യുക (അല്ലെങ്കിൽ അത് **Continue in order**-ൽ വിടുക).
- മറ്റെല്ലാ ഘട്ട തരത്തിനും **On Success**, **On Failure** routing ഉണ്ട്. ഡിഫോൾട്ടായി ഒരു ഘട്ടം ക്രമത്തിൽ അടുത്തതിലേക്ക് തുടരുന്നു; മറ്റെവിടെയെങ്കിലും ചാടാൻ ഇവ സജ്ജമാക്കുക — ഉദാഹരണത്തിന്, പരാജയപ്പെട്ട ഒരു Tool Call-നെ ഒരു recovery സന്ദേശത്തിലേക്ക് നയിക്കുക.

നിങ്ങൾക്ക് routing രണ്ട് വഴികളിൽ സജ്ജമാക്കാം: config panel-ൽ ലക്ഷ്യ ഘട്ടം തിരഞ്ഞെടുക്കുക, അല്ലെങ്കിൽ ഒരു ഘട്ടത്തിന്റെ output handle-ൽ നിന്ന് (പച്ച **OK** / **TRUE** handle അല്ലെങ്കിൽ ചുവന്ന **FAIL** / **FALSE** handle) മറ്റൊരു ഘട്ടത്തിലേക്ക് കാൻവാസിൽ **ഒരു കണക്ഷൻ വലിച്ചിടുക**. കാൻവാസിൽ വരച്ച കണക്ഷനുകൾ ഉടനെ workflow-ലേക്ക് സേവ് ചെയ്യപ്പെടുന്നു.

## നിർമ്മിക്കലും സേവ് ചെയ്യലും

ബിൽഡർ ഒരൊറ്റ വലിയ സേവിന് പകരം നിങ്ങൾ ചെയ്യുമ്പോൾ തന്നെ മാറ്റങ്ങൾ നിലനിർത്തുന്നു:

- **Add Intent** ഒരു പുതിയ ശാഖ സൃഷ്ടിക്കുന്നു; അതിന്റെ പേര്, description, trigger phrases എന്നിവ പൂരിപ്പിക്കാൻ അതിൽ ക്ലിക്ക് ചെയ്യുക, തുടർന്ന് panel-ൽ **Save Changes**.
- **Add Step** നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന തരത്തിലുള്ള ഒരു ഘട്ടം ചേർക്കുന്നു; അത് panel-ൽ ക്രമീകരിച്ച് **Save Changes** ചെയ്യുക.
- ഒരു നോഡിലെ up / down chevrons intents-ഉം steps-ഉം **പുനഃക്രമീകരിക്കുന്നു**; ഒരു നോഡ് ഇല്ലാതാക്കുന്നത് (അതിന്റെ trash icon അല്ലെങ്കിൽ Delete കീ വഴി) ആദ്യം സ്ഥിരീകരണം ആവശ്യപ്പെടുന്നു.
- ടൂൾബാർ **Save** ബട്ടൺ **supervisor prompt** സംഭരിക്കുന്നു; ഒരു amber dot സേവ് ചെയ്യാത്ത prompt എഡിറ്റുകൾ അടയാളപ്പെടുത്തുന്നു.

## ഒരു ടെംപ്ലേറ്റിൽ നിന്ന് തുടങ്ങുക

ആദ്യം മുതൽ നിർമ്മിക്കുന്നതിന് പകരം, **Templates** ബട്ടൺ നിങ്ങൾക്ക് ലോഡ് ചെയ്ത് പിന്നീട് എഡിറ്റ് ചെയ്യാവുന്ന തയ്യാറായ ഫ്ലോകൾ വാഗ്ദാനം ചെയ്യുന്നു: **Lead Qualification**, **Appointment Booking**, **Customer Support**, **NPS Survey**, **Payment Reminder**, **Customer Onboarding**. ഓരോന്നും ചോദ്യങ്ങൾ, conditions, goodbye സന്ദേശങ്ങൾ എന്നിവയുൾപ്പെടെ അതിന്റെ ഘട്ടങ്ങളോടെ ഒരു സമ്പൂർണ്ണ intent ചേർക്കുന്നു. ഒരു ടെംപ്ലേറ്റ് പ്രയോഗിക്കുന്നത് നിങ്ങളുടെ നിലവിലുള്ള workflow-നെ മാറ്റിസ്ഥാപിക്കുന്നതിന് പകരം അതിലേക്ക് **ചേർക്കുന്നു**, അതിനാൽ നിങ്ങൾക്ക് പലതും സംയോജിപ്പിക്കാം അല്ലെങ്കിൽ വേണ്ടാത്തത് വെട്ടിമാറ്റാം.

## ഒരു OpenAPI spec-ൽ നിന്ന് ഫംഗ്ഷനുകൾ ഇംപോർട്ട് ചെയ്യുക

**Import API** ബട്ടൺ നിലവിലുള്ള ഒരു API-യെ **Tool Call** ഘട്ടങ്ങളിൽ നിന്ന് നിങ്ങൾക്ക് വിളിക്കാവുന്ന ഏജന്റ് ഫംഗ്ഷനുകളാക്കി മാറ്റുന്നു. ഒരു **OpenAPI / Swagger** spec നൽകുക — URL വഴി അല്ലെങ്കിൽ അത് പേസ്റ്റ് ചെയ്ത് (OpenAPI 2.0 അല്ലെങ്കിൽ 3.x, JSON അല്ലെങ്കിൽ YAML) — importer operations പാഴ്സ് ചെയ്യുന്നു. നിങ്ങൾക്ക് വേണ്ട operations തിരഞ്ഞെടുക്കുക, base URL സ്ഥിരീകരിക്കുക, അത് അവയ്ക്കായി **custom functions** ജനറേറ്റ് ചെയ്യുന്നു. ആ ഫംഗ്ഷനുകൾ പിന്നീട് Tool Call ഘട്ടങ്ങളുടെ ഫംഗ്ഷൻ ലിസ്റ്റിലും Tools ടാബിലും പ്രത്യക്ഷപ്പെടുന്നു.

:::info[ഫംഗ്ഷനുകളുടെ കാറ്റലോഗ് മറ്റെവിടെയോ മാനേജ് ചെയ്യപ്പെടുന്നു]

ഒരു Tool Call ഘട്ടത്തിന് ഏജന്റിന് ഇതിനകം ലഭ്യമായ ഫംഗ്ഷനുകൾ മാത്രമേ ഉപയോഗിക്കാനാവൂ — built-in ഫംഗ്ഷനുകളും [Tools ടാബിൽ](./tools-mcp) ബൈൻഡ് ചെയ്ത ഏതെങ്കിലും custom ഫംഗ്ഷനുകളും, OpenAPI importer ജനറേറ്റ് ചെയ്തവ ഉൾപ്പെടെ. നിങ്ങൾക്ക് വേണ്ട ഫംഗ്ഷൻ ലിസ്റ്റ് ചെയ്തിട്ടില്ലെങ്കിൽ, അത് ആദ്യം Tools ടാബിൽ ചേർക്കുക.

:::

## അടുത്ത ഘട്ടങ്ങൾ

- [ഫംഗ്ഷനുകൾ ബൈൻഡ് ചെയ്ത് MCP സെർവറുകൾ ബന്ധിപ്പിക്കുക (Tools ടാബ്)](./tools-mcp)
- [കോൾ കൈമാറ്റങ്ങളും ടെലിഫോണിയും ക്രമീകരിക്കുക](./calling-telephony)
- [നിങ്ങളുടെ ആദ്യ ഏജന്റ് സൃഷ്ടിക്കുക](./create-agent)
- [ഏജന്റുകൾ അവലോകനത്തിലേക്ക് മടങ്ങുക](./overview)
