Skip to main content
FlowApps are plugin-style integrations that extend your agents with external service capabilities. Unlike providers (LLM, TTS, STT) that handle core AI functions, FlowApps add custom actions and data sources to the conversation flow.

What are FlowApps?

A FlowApp is a self-contained integration module that provides:
  • Actions - Operations the agent can execute (e.g., book a meeting, send an email)
  • Data fetchers - Dynamic data sources for UI dropdowns (e.g., list of calendars)
  • Integration credentials - Secure storage of API keys and configuration
FlowApps appear as draggable nodes in the Script Builder, allowing non-technical users to add complex integrations without code.

Architecture

Core interface

Action interface

Data fetcher interface

Built-in FlowApps

Cal.com integration

App Key: cal_com
Implementation: CalComApp.cs
Integrate with Cal.com for meeting scheduling and calendar management.

Available actions

Action Key: book_meetingSchedule a new meeting on a Cal.com calendar.Input parameters:Output:
Example use case:
Caller: “I’d like to schedule a consultation for next Tuesday at 2 PM.” Agent: Executes book_meeting action with detected date/time Agent: “Perfect! I’ve scheduled your consultation for Tuesday, March 15th at 2:00 PM. You’ll receive a confirmation email with the meeting link.”

Data fetchers

get_event_types - Fetches list of available event types Used to populate dropdowns in the Script Builder when configuring booking actions. Output:

Configuration

To use Cal.com integration:
  1. Create Cal.com account at https://cal.com
  2. Generate API key in Settings → Developer → API Keys
  3. Add integration in Iqra AI Admin Dashboard:
    • Integration Type: cal_com
    • API Key: Your Cal.com API key
  4. Configure in agent - FlowApp becomes available in Script Builder

FlowApp discovery and registration

FlowApps are automatically discovered at runtime:
  1. Assembly scanning - FlowAppManager uses reflection to find IFlowApp implementations
  2. Dependency injection - Apps can request services (e.g., IHttpClientFactory)
  3. Registration - Apps added to in-memory registry keyed by AppKey
  4. Permission loading - Database permissions merged with app definitions
See FlowAppManager.cs:59-95 for implementation.

Using FlowApps in scripts

FlowApps appear as action nodes in the Script Builder:
  1. Drag FlowApp action from sidebar into canvas
  2. Configure inputs using static values or variables
  3. Map credentials - System auto-injects integration credentials
  4. Handle output - Access returned data via output ports

Example: Booking flow

Variable mapping

FlowApp inputs can use conversation variables:
Variables are resolved at execution time using the Scriban template engine.

Creating custom FlowApps

Step 1: Define the app class

Step 2: Implement actions

Step 3: Define integration in admin

Create integration definition in IqraInfrastructure/Managers/Integrations/IntegrationsManager.cs:

Step 4: Test and deploy

  1. Restart application - FlowApp auto-registers
  2. Add integration in Admin Dashboard
  3. Test in Script Builder - Drag action node and configure
  4. Verify execution - Test with real API calls
FlowApps support dependency injection. Request any registered service (e.g., ILogger, IHttpClientFactory, IMemoryCache) in the constructor.

Permission management

FlowApps support granular permission control:

App-level permissions

Disable entire app:

Action-level permissions

Disable specific actions:
Permissions are stored in MongoDB (FlowAppData collection) and merged with app definitions at runtime.

Security considerations

Credential handling

  • Encryption - API keys encrypted with AES-256 before storage
  • Scoped access - Credentials only accessible during action execution
  • No logging - Credentials never logged or exposed in errors

Input validation

FlowApps should validate all inputs:

Rate limiting

Implement rate limiting for external API calls:

Best practices

Action design

  1. Atomic operations - Each action should do one thing well
  2. Clear naming - Use verb + noun (e.g., book_meeting, not handle_calendar)
  3. Descriptive errors - Return actionable error messages
  4. Idempotency - Support retries without side effects where possible

Data fetcher design

  1. Caching - Cache expensive fetcher results using IMemoryCache
  2. Pagination - Limit results to reasonable sizes (100-1000 items)
  3. Filtering - Support filtering via input parameters

Testing

  1. Unit tests - Test action logic in isolation
  2. Integration tests - Verify API integration with real credentials
  3. Error scenarios - Test network failures, API errors, invalid inputs

Roadmap

Planned FlowApp integrations:
  • Email - SendGrid, Mailgun, AWS SES
  • CRM - Salesforce, HubSpot, Pipedrive
  • Ticketing - Zendesk, Freshdesk, Intercom
  • Payments - Stripe, Square, PayPal
  • SMS - Twilio, Vonage, Telnyx
  • Databases - PostgreSQL, MySQL, Airtable

Next steps

Build conversation flows

Use FlowApps in the Script Builder

Integration management

Configure integration credentials

Custom actions

Build your own FlowApp integrations

Script variables

Map conversation data to action inputs