Connectors

Route submissions to email, chat, or other services

configuration
connectors email slack webhooks integrations

Connectors

Route submissions to email, chat, or other services.

What are Connectors?

Connectors are the destinations where FormFeeder sends your form submissions. Each form can have multiple connectors, ensuring your data reaches all necessary channels—from your email inbox to your team's Slack workspace or custom webhooks.

Privacy Mode Note: In privacy mode, connectors execute immediately after submission. Files are available during connector execution and automatically cleaned afterward, ensuring no data persistence.

Available Connectors

Email (MailJet)

Send form submissions to email addresses using MailJet's reliable email delivery service.

Features

  • Professional HTML email templates
  • File attachments (up to 5 files, 8MB total)
  • Multiple recipients (To, CC, BCC)
  • Custom subject lines with variables
  • Reply-to addresses from form fields

Configuration

{
  "type": "MailJet",
  "config": {
    "to": "[email protected]",
    "cc": "[email protected]",
    "bcc": "[email protected]",
    "subject": "New Contact Form: {{name}}",
    "replyToField": "email"
  }
}

Configuration Options

Option Type Required Description
to string Yes Primary recipient email
cc string No CC recipient email
bcc string No BCC recipient email
subject string No Email subject (supports variables)
replyToField string No Form field to use as reply-to address

Variable Substitution

Use variables in subject lines to personalize emails:

  • {{name}} - Value from 'name' field
  • {{email}} - Value from 'email' field
  • {{company}} - Value from 'company' field
  • {{[fieldname]}} - Any form field value

Example subject: "New Contact from {{name}} at {{company}}"

Slack

Send form submissions as messages to Slack channels or direct messages.

Features

  • Rich message formatting with form data
  • File metadata display (files not uploaded to Slack)
  • Channel or direct message delivery
  • Custom bot name and emoji
  • Threaded replies for file information

Configuration

{
  "type": "Slack",
  "config": {
    "webhookUrl": "https://hooks.slack.com/services/...",
    "channel": "#contact-forms",
    "username": "FormFeeder",
    "iconEmoji": ":email:",
    "showFileMetadata": true
  }
}

Configuration Options

Option Type Required Description
webhookUrl string Yes Slack webhook URL
channel string No Target channel (overrides webhook default)
username string No Bot display name
iconEmoji string No Bot icon emoji
showFileMetadata boolean No Include file information in message

Setting Up Slack Webhook

  1. Go to your Slack workspace settings
  2. Navigate to "Apps" → "Incoming Webhooks"
  3. Create a new webhook for your target channel
  4. Copy the webhook URL to your connector configuration

Webhooks

Send form submissions as HTTP POST requests to custom endpoints for advanced integrations.

Features

  • JSON payload with full form data and metadata
  • File URLs for temporary access (privacy mode) or permanent storage
  • Custom headers and authentication
  • Retry logic with exponential backoff
  • Signature verification for security

Configuration

{
  "type": "Webhook",
  "config": {
    "url": "https://api.yourservice.com/forms",
    "method": "POST",
    "headers": {
      "Authorization": "Bearer your-token",
      "X-Source": "FormFeeder"
    },
    "timeout": 30
  }
}

Configuration Options

Option Type Required Description
url string Yes Target webhook URL
method string No HTTP method (default: POST)
headers object No Custom headers to send
timeout number No Request timeout in seconds (default: 30)

Webhook Payload

FormFeeder sends a JSON payload with the following structure:

{
  "formId": "abc123",
  "submissionId": "sub_def456",
  "timestamp": "2024-01-15T10:30:00Z",
  "data": {
    "name": "Alice Smith",
    "email": "[email protected]",
    "message": "Hello from the contact form!"
  },
  "files": [
    {
      "fieldName": "attachment",
      "filename": "document.pdf",
      "contentType": "application/pdf",
      "size": 1024000,
      "url": "https://files.formfeeder.io/temp/abc123/document.pdf"
    }
  ],
  "metadata": {
    "ip": "192.168.1.1",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
    "referer": "https://example.com/contact"
  }
}

Webhook Security

FormFeeder includes an X-FormFeeder-Signature header for payload verification:

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return `sha256=${expected}` === signature;
}

// Usage in your webhook handler
const isValid = verifySignature(
  req.body,
  req.headers['x-formfeeder-signature'],
  'your-webhook-secret'
);

Multiple Connectors

Forms can have multiple connectors to send data to different destinations simultaneously.

Example Configuration

{
  "connectors": [
    {
      "type": "MailJet",
      "config": {
        "to": "[email protected]",
        "subject": "New Contact: {{name}}"
      }
    },
    {
      "type": "Slack",
      "config": {
        "webhookUrl": "https://hooks.slack.com/...",
        "channel": "#contact-forms"
      }
    },
    {
      "type": "Webhook",
      "config": {
        "url": "https://api.crm.com/contacts",
        "headers": {
          "Authorization": "Bearer token123"
        }
      }
    }
  ]
}

Execution Order

Connectors execute in parallel for optimal performance. If any connector fails, others continue to execute. Failed connectors are retried with exponential backoff.

Error Handling

Retry Logic

  • Maximum retries: 3 attempts
  • Backoff strategy: Exponential with jitter
  • Initial delay: 1 second
  • Maximum delay: 60 seconds

Failure Scenarios

Scenario Behavior
Network timeout Retry with backoff
HTTP 5xx error Retry with backoff
HTTP 4xx error No retry (client error)
Invalid configuration Skip connector, log error

Monitoring

Failed connector executions are logged with details:

{
  "level": "error",
  "connector": "Slack",
  "formId": "abc123",
  "error": "Webhook returned 404",
  "attempt": 3,
  "finalFailure": true
}

File Handling by Connector

Email (MailJet)

  • Attachments: Files attached directly to email
  • Size limit: 8MB total across all files
  • File limit: 5 files maximum
  • Behavior: Files exceeding limits are skipped with warning

Slack

  • File handling: Metadata only (filename, size, type)
  • No uploads: Files are not uploaded to Slack
  • Display: File information shown in message attachments

Webhooks

  • File URLs: Temporary URLs provided in payload
  • Access time: URLs valid for 24 hours (privacy mode) or permanent
  • Download: Your webhook can download files using provided URLs

Connector Testing

Use the FormFeeder dashboard to test connectors before deploying:

  1. Navigate to your form configuration
  2. Select "Test Connectors"
  3. Send sample data to verify delivery
  4. Check logs for any errors or warnings

Best Practices

Email Connectors

  • Use descriptive subject lines with variables
  • Set up reply-to fields for user responses
  • Consider CC/BCC for team coordination
  • Monitor email deliverability rates

Slack Connectors

  • Use dedicated channels for form submissions
  • Enable file metadata for context
  • Set up appropriate notifications
  • Consider threading for high-volume forms

Webhooks

  • Implement proper signature verification
  • Handle timeouts gracefully
  • Log webhook responses for debugging
  • Use idempotency for duplicate protection

General

  • Test all connectors after configuration
  • Monitor connector success rates
  • Keep webhook endpoints reliable and fast
  • Use multiple connectors for redundancy