@belmontdigitalmarketing/n8n-nodes-smartcsrpro
v1.2.0
Published
n8n community node to create tickets and upsert contacts in SmartCSRPro via the webhook API
Downloads
248
Maintainers
Readme
n8n-nodes-smartcsrpro
An n8n community node that integrates with SmartCSRPro via its Webhook API. It can create support tickets and upsert contacts from any n8n workflow — connect it to email triggers, form submissions, Slack messages, CRM events, or any other data source.
Table of Contents
- Installation
- Prerequisites
- Credentials
- Node Reference
- Dynamic Dropdowns
- Include Link to Workflow
- Usage Examples
- Idempotency / Deduplication
- Markdown in Details
- Compatibility
- License
Installation
Community Node (Recommended)
- In your n8n instance, go to Settings > Community Nodes
- Select Install
- Enter
n8n-nodes-smartcsrpro - Agree to the risks and click Install
Manual Installation
For self-hosted n8n instances:
Navigate to your n8n custom nodes directory:
cd ~/.n8n/custom mkdir -p node_modules/n8n-nodes-smartcsrproCopy the following files into
node_modules/n8n-nodes-smartcsrpro/:package.jsondist/folder (entire directory)
Restart n8n:
# Docker docker restart <n8n-container-name> # Docker Compose docker-compose restart n8n # PM2 pm2 restart n8n # systemd sudo systemctl restart n8n
Manual Installation (Docker)
If running n8n in Docker, you can mount the node into the container. Place the node files at a path on the host and mount it:
docker run -it --rm \
-v ~/.n8n:/home/node/.n8n \
-v /path/to/n8n-nodes-smartcsrpro:/home/node/.n8n/custom/node_modules/n8n-nodes-smartcsrpro \
n8nio/n8nPrerequisites
- An active SmartCSRPro account
- A Webhook Secret — found in SmartCSRPro under Settings > Integrations > Webhook-to-Ticket
- Your Tenant Slug — the subdomain identifier for your SmartCSRPro instance (e.g.,
unified-insurance)
Credentials
When setting up the SmartCSRPro credential in n8n, you will need:
| Field | Description | Example |
|-------|-------------|---------|
| Tenant Slug | Your tenant identifier (subdomain) | unified-insurance |
| Webhook Secret | Secret key from SmartCSRPro Settings > Integrations > Webhook-to-Ticket | wh_abc123... |
| Base URL | (Optional) Override if using a custom domain. Leave blank to use the default https://{tenantSlug}.insforms.cc | https://support.unified.insure |
The credential is automatically validated when you click Test — it calls the SmartCSRPro resources API to confirm the tenant slug and secret are correct.
Node Reference
Operations
The node exposes two operations, selected via the Operation dropdown:
| Operation | What it does | Endpoint |
|-----------|--------------|----------|
| Create Ticket | Creates a support ticket | POST /api/webhooks/inbound-ticket/{tenantSlug} |
| Upsert Contact | Creates or updates a contact, matched by AMS applicant ID | POST /api/webhooks/contacts/{tenantSlug} |
Create Ticket
Creates a new support ticket in SmartCSRPro.
Main Fields
These fields are always visible:
| Field | Required | Description |
|-------|----------|-------------|
| Subject | Yes | The ticket title — becomes the main identifier on the SmartCSRPro dashboard |
| Details | No | Markdown-formatted body rendered in the ticket's Details section (see Markdown in Details) |
| Priority | No | Ticket priority: Low, Normal (default), High, or Urgent |
| Assigned To | No | Dynamic dropdown of active team members. Assigns the ticket to the selected user. If unset, falls through to SmartCSRPro's assignment chain (rules, category routing, branch default, agency default) |
| Due Date | No | Date picker for the ticket due date |
| Client Email | No | Client's email address — used to match or auto-create a contact record in SmartCSRPro |
| Tags | No | Dynamic multi-select dropdown of the tenant's predefined tags. You can also supply tag values via an expression |
| Category | No | Dynamic dropdown of ticket categories. Sets the category explicitly. If left as the default and no Form is selected, the ticket falls under "Webhook to Ticket". If a Form is selected, an explicit Category here overrides the form's category |
Additional Fields
Click Add Field to access these optional fields:
| Field | Description | |-------|-------------| | Branch | Dynamic dropdown of active branches | | Client Name | Client's full name | | Client Phone | Client's phone number | | External ID | Your external reference ID for idempotency (see Idempotency) | | Form | Dynamic dropdown of active forms. When set, the ticket inherits the form's category and title. When omitted, the ticket is created as a formless "Webhook" ticket with category "Webhook to Ticket" (unless you set Category explicitly) | | Include Link to Workflow | Appends a "Generated via n8n: View Workflow" footer to the ticket Details (see Include Link to Workflow) | | Metadata | Free-form JSON object stored on the submission for debugging/reference |
Output
On success, the node outputs:
{
"ok": true,
"ticket_id": "0e2de815-dea7-4023-87db-154f20dc1bad",
"ticket_number": "T-0E2DE815",
"url": "https://unified-insurance.insforms.cc/portal/tickets/0e2de815-dea7-4023-87db-154f20dc1bad"
}If the ticket was deduplicated via external_id, the response also includes "deduplicated": true.
Upsert Contact
Creates or updates a contact in SmartCSRPro, matched by AMS applicant ID (with email as a fallback match key). Re-running with the same applicant ID updates the existing contact rather than creating a duplicate.
Required Fields
| Field | Description | |-------|-------------| | Applicant ID | AMS applicant ID — the primary key used to match an existing contact within the tenant | | First Name | Contact's first name | | Last Name | Contact's last name |
Common Fields
These are always visible:
| Field | Description |
|-------|-------------|
| Email | Contact's primary email — lowercased and deduped server-side. Also used as a fallback match key when the applicant ID doesn't resolve |
| Cell Phone | Contact's primary cell phone — deduped server-side |
| Assigned AMS Username | Preferred assignee — matched against users.amsUsername on the SmartFlows side |
| Assigned AMS Agent Full Name | Fallback assignee — case-insensitive "First Last" match against users. Used when Assigned AMS Username doesn't resolve |
Additional Fields
| Field | Description |
|-------|-------------|
| Account Name | Account or company name associated with the contact |
| Address Line 1 | Street address |
| Address Line 2 | Apartment, suite, or unit (accepted by the webhook but not currently persisted server-side) |
| Applicant Type | Applicant type from the AMS (e.g. Personal, Commercial) |
| City | City portion of the address |
| CRM ID | External CRM identifier stored as-is on the contact record |
| Customer Since | Customer-since date or label as supplied by the AMS |
| Include Link to Workflow | Adds the workflow URL to this node's output as workflowLink (for downstream Slack messages). Does not write to the contact record |
| Lead Source | Lead source label (e.g. Referral, Website) |
| Lead Status | Lead status label (e.g. New, Quoted, Won) |
| State | State or province portion of the address |
| ZIP | Postal code portion of the address |
Co-Applicant
An optional collapsible section. When any field is filled, a coApplicant object is sent. The co-applicant's email and cell phone are also folded into the primary contact's emails[] / phones[] for matching.
| Field | Description | |-------|-------------| | First Name | Co-applicant's first name | | Last Name | Co-applicant's last name | | Email | Co-applicant's email | | Cell Phone | Co-applicant's cell phone | | Relationship | Relationship to the primary applicant (e.g. Spouse, Parent) |
Output
The node outputs the API response for the upserted contact. If Include Link to Workflow is enabled, a workflowLink field is added to the output.
Dynamic Dropdowns
Several Create Ticket fields use dynamic dropdowns that pull live data from your SmartCSRPro instance:
- Assigned To — Lists all active team members (displays name + email)
- Category — Lists the tenant's ticket categories
- Form — Lists all active forms (displays form title + category)
- Branch — Lists all active branches
- Tags — Lists the tenant's predefined tags
These dropdowns refresh each time you open them, so they always reflect the current state of your SmartCSRPro configuration.
You can also use n8n expressions to set these fields dynamically from upstream node data.
Include Link to Workflow
Both operations offer an opt-in Include Link to Workflow toggle (default off) under Additional Fields:
- Create Ticket — appends a
*Generated via n8n:* [View Workflow](...)footer to the ticket Details. - Upsert Contact — adds the workflow URL to the node's output as
workflowLink(so a downstream node, e.g. Slack, can link back). It does not write to the contact record.
Usage Examples
Minimal Ticket
Just set the Subject field:
Subject:
Weekly reminder: Check UIG for agent notes
This creates a ticket with Form = "Webhook", Category = "Webhook to Ticket".
Full Ticket from Upstream Data
Connect the SmartCSRPro node after a trigger (e.g., a webhook, email, or form submission) and map fields using expressions:
- Subject:
={{ $json.subject }} - Details:
={{ $json.body }} - Priority:
high - Assigned To: Select from dropdown or use
={{ $json.agent_email }} - Category: Select from dropdown (e.g. Claims) or use
={{ $json.category }} - Client Email:
={{ $json.customer_email }} - External ID:
={{ $json.id }}(prevents duplicate tickets if the workflow runs again)
Upsert a Contact
- Applicant ID:
={{ $json.applicantId }} - First Name:
={{ $json.firstName }} - Last Name:
={{ $json.lastName }} - Email:
={{ $json.email }} - Cell Phone:
={{ $json.phone }}
Re-running with the same Applicant ID updates the existing contact instead of creating a duplicate.
Idempotency / Deduplication
For Create Ticket, set the External ID field to enable deduplication. If you send the same external_id value twice, SmartCSRPro returns the existing ticket instead of creating a duplicate. This is useful for:
- Webhook retries
- Workflows that may re-process the same data
- Ensuring exactly-once ticket creation
Upsert Contact is inherently idempotent — it matches on the AMS applicant ID and updates in place.
Markdown in Details
The Details field supports Markdown formatting:
**Client Information**
Name: Jane Doe
Phone: +1 555 123 4567
**Request**
- 2024 Honda Civic
- VIN 1HGCM82633A123456
[View policy](https://example.com/policy/123)Supported syntax:
# ## ###headings**bold**and*italic*- bullet lists[link text](url)- Bare URLs (auto-linked)
HTML tags are not supported and will render as literal text.
Compatibility
- n8n version: 0.5.0 and above
- Node.js: 18.x or later
