210 lines
4.9 KiB
Markdown
210 lines
4.9 KiB
Markdown
# n8n Integration - Quick Start Example
|
|
|
|
## Complete Example Flow
|
|
|
|
### 1. User Authentication (First Time)
|
|
|
|
Before using n8n integration, users must authenticate with the provider:
|
|
|
|
```http
|
|
# Frontend redirects user to OAuth
|
|
# After OAuth success, frontend calls:
|
|
|
|
GET /api/v1/users/oauth/callback?
|
|
authorization_code=ABC123&
|
|
user_uuid=550e8400-e29b-41d4-a716-446655440000&
|
|
service_name=zoho
|
|
```
|
|
|
|
This stores the access token and instance URL in the database.
|
|
|
|
### 2. Fetch Data via n8n
|
|
|
|
Now you can fetch data without worrying about tokens:
|
|
|
|
```http
|
|
GET /api/v1/n8n/zoho/crm/leads?limit=100
|
|
Authorization: Bearer <jwt_token>
|
|
```
|
|
|
|
### 3. Behind the Scenes
|
|
|
|
```
|
|
Your Request
|
|
↓
|
|
Backend API (n8nController)
|
|
↓
|
|
N8nHandler (gets user's access token from DB)
|
|
↓
|
|
N8nClient (calls n8n webhook)
|
|
↓
|
|
n8n Workflow
|
|
├─ Provider Switch (zoho)
|
|
├─ Service Switch (crm)
|
|
├─ Module Switch (leads)
|
|
└─ HTTP Request (calls Zoho API)
|
|
↓
|
|
Response back to your app
|
|
```
|
|
|
|
## Real-World Example: Dashboard Integration
|
|
|
|
```javascript
|
|
// In your frontend or service layer
|
|
|
|
const API_URL = 'http://localhost:3000/api/v1';
|
|
const token = localStorage.getItem('jwt_token');
|
|
|
|
// Fetch Zoho CRM Summary
|
|
async function getDashboardData() {
|
|
try {
|
|
// Fetch Leads
|
|
const leadsRes = await fetch(
|
|
`${API_URL}/n8n/zoho/crm/leads?limit=10`,
|
|
{ headers: { 'Authorization': `Bearer ${token}` }}
|
|
);
|
|
const leads = await leadsRes.json();
|
|
|
|
// Fetch Contacts
|
|
const contactsRes = await fetch(
|
|
`${API_URL}/n8n/zoho/crm/contacts?limit=10`,
|
|
{ headers: { 'Authorization': `Bearer ${token}` }}
|
|
);
|
|
const contacts = await contactsRes.json();
|
|
|
|
// Fetch Deals
|
|
const dealsRes = await fetch(
|
|
`${API_URL}/n8n/zoho/crm/deals?limit=10`,
|
|
{ headers: { 'Authorization': `Bearer ${token}` }}
|
|
);
|
|
const deals = await dealsRes.json();
|
|
|
|
// Fetch Employees from Zoho People
|
|
const employeesRes = await fetch(
|
|
`${API_URL}/n8n/zoho/people/employees?limit=50`,
|
|
{ headers: { 'Authorization': `Bearer ${token}` }}
|
|
);
|
|
const employees = await employeesRes.json();
|
|
|
|
// Fetch Salesforce Opportunities
|
|
const opportunitiesRes = await fetch(
|
|
`${API_URL}/n8n/salesforce/crm/opportunities?limit=20`,
|
|
{ headers: { 'Authorization': `Bearer ${token}` }}
|
|
);
|
|
const opportunities = await opportunitiesRes.json();
|
|
|
|
return {
|
|
leads: leads.data.data,
|
|
contacts: contacts.data.data,
|
|
deals: deals.data.data,
|
|
employees: employees.data.data,
|
|
opportunities: opportunities.data.data
|
|
};
|
|
} catch (error) {
|
|
console.error('Dashboard data fetch failed:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Use it
|
|
getDashboardData().then(data => {
|
|
console.log('CRM Leads:', data.leads.length);
|
|
console.log('Contacts:', data.contacts.length);
|
|
console.log('Deals:', data.deals.length);
|
|
console.log('Employees:', data.employees.length);
|
|
console.log('SF Opportunities:', data.opportunities.length);
|
|
});
|
|
```
|
|
|
|
## Testing with Postman
|
|
|
|
### Collection Structure
|
|
|
|
```
|
|
Centralized Reporting API
|
|
├─ Auth
|
|
│ ├─ Login
|
|
│ └─ Register
|
|
├─ OAuth
|
|
│ └─ Callback (Zoho)
|
|
│ └─ Callback (Salesforce)
|
|
└─ n8n Integration
|
|
├─ Get Supported Providers
|
|
├─ Zoho CRM
|
|
│ ├─ Get Leads
|
|
│ ├─ Get Contacts
|
|
│ ├─ Get Accounts
|
|
│ └─ Get Deals
|
|
├─ Zoho Books
|
|
│ ├─ Get Invoices
|
|
│ └─ Get Customers
|
|
├─ Zoho People
|
|
│ └─ Get Employees
|
|
└─ Salesforce CRM
|
|
├─ Get Leads
|
|
├─ Get Accounts
|
|
└─ Get Opportunities
|
|
```
|
|
|
|
### Postman Request Example
|
|
|
|
**GET Zoho CRM Leads**
|
|
|
|
```
|
|
URL: http://localhost:3000/api/v1/n8n/zoho/crm/leads
|
|
Method: GET
|
|
Headers:
|
|
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
Params:
|
|
limit: 100
|
|
page: 1
|
|
```
|
|
|
|
Expected Response:
|
|
```json
|
|
{
|
|
"status": "success",
|
|
"message": "Zoho crm leads data fetched successfully",
|
|
"data": {
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": "4876876000001234567",
|
|
"First_Name": "John",
|
|
"Last_Name": "Doe",
|
|
"Email": "john@example.com",
|
|
"Company": "Acme Corp",
|
|
"Lead_Status": "Qualified"
|
|
}
|
|
],
|
|
"count": 1,
|
|
"metadata": {}
|
|
},
|
|
"timestamp": "2025-10-09T12:00:00.000Z"
|
|
}
|
|
```
|
|
|
|
## Environment Setup Checklist
|
|
|
|
- [ ] n8n instance running
|
|
- [ ] Workflow imported and activated
|
|
- [ ] Environment variables set:
|
|
```env
|
|
N8N_WEBHOOK_URL=http://localhost:5678
|
|
N8N_WEBHOOK_ID=04e677f5-ec57-4772-bf12-96f2610d4b9c
|
|
```
|
|
- [ ] OAuth credentials configured for providers
|
|
- [ ] Database migration run
|
|
- [ ] Backend server running
|
|
- [ ] User authenticated with provider(s)
|
|
|
|
## Next Steps
|
|
|
|
1. Test with a single provider (e.g., Zoho CRM)
|
|
2. Verify data is returned correctly
|
|
3. Add error handling in your frontend
|
|
4. Implement caching if needed
|
|
5. Add more providers as needed
|
|
6. Monitor n8n workflow execution logs
|
|
|