Connectors
Route submissions to email, chat, or other services
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
- Go to your Slack workspace settings
- Navigate to "Apps" → "Incoming Webhooks"
- Create a new webhook for your target channel
- 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:
- Navigate to your form configuration
- Select "Test Connectors"
- Send sample data to verify delivery
- 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