Customer Support / Helpdesk
Roles covered: Support Agent · Support Team Lead · Helpdesk Manager · Knowledge Manager
Main modules: Tickets · Email Pipe · Knowledge Base · WhatsApp · Appointly · Surveys · Announcements · Spam Filters
Who uses this guide
| Role | What they do in CRMConnect |
|---|---|
| Support Agent | Responds to tickets, uses predefined replies, manages WhatsApp conversations |
| Support Team Lead | Distributes and tracks team tickets, escalates, monitors response times |
| Helpdesk Manager | Configures departments, statuses, priorities, escalation flows, reports |
| Knowledge Manager | Creates and maintains the knowledge base, converts ticket solutions into articles |
Support module map
INCOMING CHANNELS TICKET MANAGEMENT
───────────────── ─────────────────
Email → pipe.php Configurable statuses
Client portal → form Priorities (Low/Medium/High/Urgent)
WhatsApp → chat Departments + routing
Manual → agent creates Assignment per agent
Custom fields
COMMUNICATION SELF-SERVICE
───────────── ────────────
Predefined replies Knowledge Base (articles)
Internal notes (staff only) Client portal (ticket history)
Attachments (files) Article search
WhatsApp quick replies Article feedback (like/dislike)
Automated email templates Announcements
SCHEDULING & FOLLOW-UP REPORTING
────────────────────── ─────────
Appointly (callbacks) Ticket dashboard
Appointly (appointments) Per-agent metrics
Surveys (client satisfaction) Response time
Automatic reminders Tickets by department
Recommended daily routine
Morning (15–20 min)
1. New and unanswered tickets/admin/tickets → filter status Open + adminread = 0
Red tickets = unread by staff (a new message from the client).
2. In Progress tickets with no activity > 24h
Filter status = In Progress + lastreply older than yesterday
These tickets need follow-up or escalation.
3. WhatsApp — unread messages/admin/whatsapp/interaction — new or unanswered conversations
Process in parallel with tickets.
4. Callbacks scheduled today/admin/appointly/appointments → filter today's date
Prepare for the call: read the ticket/client history.
During the day
New ticket received
↓ Read the full message + client history
↓ Send reply (from predefined replies or written)
↓ Change status: Open → In Progress or Answered
↓ If you can't resolve: escalate (change department or agent)
Client replies to an Answered ticket
→ Ticket automatically returns to Open
→ Push notification in CRM
→ Process again
Weekly (Manager/Team Lead)
- Ticket report — volume, average resolution time, distribution by agent
- Old tickets — unresolved > 7 days: review and decide
- KB articles — which tickets repeated → candidates for a new article
- Client feedback — responses to satisfaction surveys
Tickets — structure and key fields
Where: /admin/tickets
Main fields on a ticket
| Field | Notes |
|---|---|
ticketid |
Unique auto-increment number — the primary reference |
ticketkey |
32-character hash for the public access URL |
subject |
Title of the issue |
message |
Initial description |
date |
Ticket creation timestamp |
lastreply |
Last message (regardless of who sent it) — basis for informal SLA |
userid / contactid |
The client and the specific contact |
department |
Responsible department |
priority |
Urgency (customizable) |
service |
Service category (if enabled) |
status |
Current status |
assigned |
Assigned agent |
project_id |
Associated project (optional) |
adminread |
0 = agent has not read the last message (red badge) |
clientread |
0 = client has not read the last reply |
Ticket → client relationship
| Situation | Fields populated |
|---|---|
| Registered client | userid = client ID + contactid = specific contact ID |
| Unregistered email | email = sender's address, name = name |
| Staff opens ticket | admin = agent ID |
Statuses, priorities, and departments
Ticket statuses
Where: /admin/tickets/statuses
Statuses are fully configurable — you can add, edit, color, and reorder them. Each has:
- Name
- Hex color (visual display in the list)
- Display order
Typical statuses and their behavior:
| Status | Code | Behavior |
|---|---|---|
| Open | 1 | New unprocessed ticket or with a new reply from the client |
| In Progress | 2 | Agent is working; client reply does NOT change the status |
| Answered | 3 | Agent has replied — awaiting client confirmation |
| On Hold | 4 | Suspended (waiting for external information or another team) |
| Closed | 5 | Resolved — review email automatically sent |
Default rule: When the client replies to an Answered ticket → status automatically returns to Open. On an In Progress ticket → status stays In Progress.
Ticket priorities
Where: /admin/tickets/priorities
Configurable — you can add as many levels as needed. Standard examples:
| Priority | Recommended response time |
|---|---|
| Low | 72 hours |
| Medium | 24 hours |
| High | 4 hours |
| Urgent | 1 hour |
Note: CRMConnect does not apply automatic time-based escalation. Times are team conventions — monitoring and escalation are manual.
Support departments
Where: /admin/departments
Each department has:
- Name (e.g., Technical Support, Billing, Sales, General)
- Dedicated email address — emails received at this address automatically create tickets in that department
- Assigned staff — determines who sees the department's tickets
Services (ticket categories)
Where: /admin/tickets/services (enabled from settings)
Additional classification: Bug, Feature Request, Question, Installation, Training.
Useful for reporting: how many tickets per issue type.
Responding to a ticket — practical guide
Opening the ticket → reading the context
Before responding:
- Conversation history — read the entire thread
- Client profile — click the client's name → see the account, invoices, active contracts
- Previous tickets — from the client profile, Tickets tab → patterns of recurring issues
Sending your reply
Reply options:
| Type | Visible to client | When to use |
|---|---|---|
| Reply | Yes | The actual response to the client |
| Internal Note | No (staff only) | Notes for colleagues, internal observations, internal escalation |
Predefined reply (1 click):
- Dropdown in the reply window → select the template → text is automatically inserted
- Edit if needed → send
Attachments:
- Add files directly to the reply
- Allowed types configured by admin (
ticket_attachments_file_extensions) - Maximum number per reply (
maximum_allowed_ticket_attachments)
Changing status on send
With each reply, select the new status:
- Answered — you've replied, waiting for the client
- In Progress — still working, more to check
- On Hold — suspended pending an external action
- Closed — fully resolved
Reassigning the ticket
If the ticket isn't for you:
- Change the department → another department takes it over
- Change the assigned agent (
assignedfield) → colleague receives notification - Internal note → explain the context and what has already been checked
Email Pipe — how it works
File: pipe.php (configured on the mail server)
Complete flow
Email sent by client to [email protected]
↓
Mail server → forward to pipe.php
↓
Spam filter check (sender, subject, phrase)
↓
Rate limit check: max 10 tickets / 15 min / sender
↓
Subject contains [Ticket ID: 123]?
├── YES → reply added to ticket 123
└── NO → NEW ticket created
↓
Department determined from To: address ([email protected] → Technical Support)
↓
Client identified by email → `userid` populated
↓
Email attachments → saved to /uploads/ticket_attachments/
↓
Notification sent to staff in department
Rate limiting
Exact limit: 10 new tickets in any 15-minute window per sender.
If exceeded → the email is silently ignored (no ticket is created). Useful for blocking automated spam.
Email body processing
| Step | What the system does |
|---|---|
| 1 | Prefers HTML over plain text |
| 2 | If ticket_import_reply_only = 1 → extracts only the latest reply (ignores quotes) |
| 3 | Sanitizes HTML — keeps <br>, <a>, removes the rest |
| 4 | XSS clean |
| 5 | Removes emojis |
| 6 | Converts newlines to <br /> |
Configuring the email pipe
Key settings from /admin/settings → Email Piping:
| Setting | Value | Effect |
|---|---|---|
email_piping_only_registered |
1 |
Accepts tickets only from emails registered as clients |
email_piping_only_replies |
1 |
Does not create new tickets from email — only replies to existing ones |
ticket_import_reply_only |
1 |
Extracts only the latest reply from email (ignores quotes) |
email_piping_default_priority |
Priority ID | Default priority for tickets from email |
default_ticket_reply_status |
Status ID | Status after a client reply (default: 3 = Answered) |
Spam Filters
Where: /admin/spam_filters/view/tickets
Filter types
| Type | Field checked | Example |
|---|---|---|
| sender | Sender email address | [email protected] |
| subject | Email subject | *unsubscribe*, *out of office* |
| phrase | Message body | "click here to unsubscribe" |
Hard-coded filters (always active)
Regardless of configured filters, these subjects are automatically blocked:
Mail delivery failedfailure noticeReturned mail: see transcript for detailsUndelivered Mail Returned to Sender
Blocking an entire domain
There is no domain-level blocking. Workaround:
- Add each address from the domain as a
senderfilter - Or add a
phrasefilter with text specific to emails from that domain
Filters also apply to leads
rel_type can be tickets or leads — the same filtering mechanism also protects lead capture from email.
Client portal — what the client sees and does
URL: /clients/tickets
Actions available to the client
| Action | Details |
|---|---|
| Open new ticket | Fill in: subject, department, priority (if permitted), message, attachments |
| View ticket history | All company tickets, filtered by status |
| Reply to ticket | Text + attachments |
| Change status | If allow_customer_to_change_ticket_status = 1 |
| Search Knowledge Base | Articles visible to the public |
View conversation (bidirectional thread)
The conversation is displayed as a bidirectional chat:
- Client messages — left
- Staff messages — right with "STAFF" badge
- Timestamp per message
- Attachments with image preview
Custom fields in the client portal
If a custom field has show_on_client_portal = 1, it appears when creating a ticket from the portal. Useful for: contract number, product model, equipment serial number.
Knowledge Base — managing articles
Where: /admin/knowledge_base
Structure
Groups (tblknowledge_base_groups)
│ Name, color, order, visibility
│
└── Articles (tblknowledge_base)
Title, HTML content, visibility, order
Visible to clients (staff_article=0) or staff-only (1)
Key fields on an article
| Field | Notes |
|---|---|
subject |
Article title |
description |
HTML content — editable rich text |
slug |
SEO-friendly URL, auto-generated, deduplicated |
active |
1 = published, 0 = draft |
staff_article |
0 = visible to clients, 1 = internal staff only |
articlegroup |
The group it appears in |
article_order |
Order within group (drag-and-drop reordering) |
Creating an article from a ticket
A resolved ticket with a valuable solution → KB article:
- Copy the reply from the ticket
/admin/knowledge_base→ Add Article- Title: the resolved issue (phrased as a question: "How do I configure X?")
- Content: the solution steps, clear and with images if needed
- Group: appropriate category
staff_article = 0→ visible to clients in portal- Publish
Article feedback
Clients can vote on articles (like/dislike) — recorded in tblknowedge_base_article_feedback with IP for deduplication. Use feedback to:
- Identify incomplete or unclear articles
- Prioritize which articles to improve
- Validate that articles actually solve the problem
Knowledge Base search
Client portal: The search field in the Knowledge Base searches full-text in the title and content — serves as level 0 self-service before the client opens a ticket.
Staff: The agent can search the KB and insert a link to an article in the ticket reply.
Predefined Replies
Where: /admin/tickets/predefined_replies
How they work
- Manager creates standard replies for frequent situations
- When replying to a ticket → dropdown Select Predefined Reply
- Agent selects the template → text is automatically inserted in the reply field
- Agent personalizes if needed → sends
Examples of useful predefined replies
| Situation | Reply content |
|---|---|
| Acknowledgment | "We have received your ticket and will process it within 24h..." |
| Request for information | "To resolve the issue, we need: (1) contract number, (2) error screenshot..." |
| Issue resolved | "The issue has been resolved. Please check and confirm that everything is working..." |
| Escalation | "Your issue has been escalated to our specialist team who will get back to you within..." |
| Closing for inactivity | "Since we have not received a response in the last 7 days, we are closing this ticket. You can reopen it at any time..." |
Organization
Predefined replies have no category in the database — if you have many, use a prefix for visual organization: [Technical] Access error, [Billing] Duplicate invoice, [General] Acknowledgment.
WhatsApp for support
Where: /admin/whatsapp/interaction
Key features for support
| Feature | Description |
|---|---|
| Bidirectional chat | Receive and send WhatsApp messages directly from the CRM |
| Client link | Conversation is linked to the client profile |
| Quick Replies | Predefined responses for WhatsApp — similar to predefined replies in tickets |
| Template campaigns | Mass messages for status notifications, promotions |
| Bots | Chatbot configured for automatic responses to simple messages |
| Groups | WhatsApp Business group management |
| Activity Log | Full conversation history per contact |
Integration with tickets
WhatsApp messages can be linked to tickets:
- From a WhatsApp conversation → create a ticket for a more complex issue
- The ticket reply can also be sent via WhatsApp simultaneously
WhatsApp Quick Replies
/admin/whatsapp/QuickReplies — quick replies library:
- Insert with
/followed by keyword - Useful for: business hours, portal link, standard procedures
Appointly — scheduling and callbacks
Where: /admin/appointly
Callbacks scheduled for support
When a client has an issue that requires a phone call:
1. From the open ticket or client profile
↓
2. Add Callback Appointment:
- Date and time
- Responsible (the agent who calls)
- Reminders (e.g., 30 min before)
↓
3. Agent receives reminder (email/SMS)
↓
4. Makes the call → notes the resolution in the ticket
↓
5. Marks the callback as Finished
Key fields on an appointment:
| Field | Notes |
|---|---|
subject |
Subject of the call/meeting |
date + start_hour |
When it takes place |
reminder_before |
How many minutes/hours/days before we send the reminder |
email / phone |
Client contact details |
| Google Meet link | If it's a video meeting — generated automatically |
finished / cancelled |
Status after completion |
Appointment history
/admin/appointly/appointments_history — all completed appointments, useful for auditing and reporting call volumes.
Post-ticket satisfaction surveys
Where: /admin/surveys
Automatic flow (via Workflow Automation)
Trigger: Ticket status → Closed
↓ Wait: 1 hour (or immediately)
↓ Action: Send Survey "Support Satisfaction" → client's email
The survey contains:
- 1-5 rating for the support experience
- Free field: "What could we improve?"
- Optional: NPS (Net Promoter Score)
Results appear in /admin/surveys → Results tab — aggregated and per individual response.
Announcements for clients
Where: /admin/announcements
When to use announcements in support
- Planned maintenance: "The platform will be unavailable Saturday 02:00–04:00"
- Active issue: "We are investigating an issue with the invoicing module — the team is working on a resolution"
- New feature: "Version X.Y has been released — see the update guide"
- Support hours change: "Holiday schedule: December 24–25 — limited support"
Configuring an announcement
| Field | Notes |
|---|---|
name |
Announcement title |
message |
HTML content — may include links |
showtousers |
1 = visible in the client portal |
showtostaff |
1 = visible to staff at login |
The announcement remains visible until the user confirms (dismisses) it. You can republish the same announcement by deleting the dismiss records.
Support metrics and reporting
Available dashboard widgets
Where: Main dashboard → ticket widgets
| Widget | What it shows |
|---|---|
| Open tickets | Total number of unresolved tickets |
| By status | Pie distribution: Open / In Progress / Answered / Closed |
| By priority | Urgent / High / Medium / Low |
| By agent | How many tickets each agent has |
| By department | Distribution per department |
| Average response time | Average time to first reply |
| Overdue | Tickets with no activity > configurable threshold |
| Timeline | Chronological activity |
Key metrics for support management
| Metric | Formula / Source |
|---|---|
| Time to First Response | lastreply (first staff reply) − date (ticket creation) |
| Resolution Time | data_closed − date (ticket creation) |
| First Contact Resolution (FCR) | Tickets resolved with one reply / total tickets |
| Ticket Volume | Count of tickets created per period |
| Agent Load | Count of tickets assigned = agent_id AND status ≠ Closed |
| Customer Satisfaction | Average rating from post-ticket surveys |
| KB Effectiveness | Count article views / count tickets on the same topic |
Available filters in the ticket list
- Status (Open, In Progress, Answered, Closed)
- Priority
- Department
- Assigned agent
- Service
- Period (
daterange) - Specific client
- Tag
Custom fields on tickets
Where: /admin/custom_fields → entity: Tickets
Add business-specific fields not in the standard form:
| Example | Type | When useful |
|---|---|---|
| Equipment serial number | Text | Hardware support |
| Contract number | Text | Service support |
| Software version | Dropdown | IT support |
| Problem URL | Link | Web/SaaS support |
| Last update date | Date | System support |
| SLA priority | Dropdown | Support tier (Basic/Premium/Enterprise) |
Visible in client portal: If show_on_client_portal = 1, the client fills in the field when creating the ticket.
Recommended automations for support
Configurable in Workflow Automation (/admin/workflow_automation):
| Trigger | Action | Benefit |
|---|---|---|
| NEW ticket created | Push notification → department agent | Zero undetected tickets |
| NEW ticket with Urgent priority | Email + notification → Team Lead | Immediate escalation |
| Ticket with no staff reply > 4h | Urgent notification → Team Lead | Informal SLA monitored |
| Ticket with no activity > 7 days | Task "Review stagnant ticket" → agent | Queue cleanup |
| Ticket status → Closed | Satisfaction survey sent → client (after 1h) | Automatic feedback |
| Client replies to Closed ticket | Automatic reopening → Open | Zero missed responses |
| Ticket created by VIP client | Priority → Urgent + manager notification | Premium SLA |
Recommended initial configuration
Before activating support, configure:
- Departments
/admin/departments— including a dedicated email address per department - Statuses
/admin/tickets/statuses— with distinctive colors - Priorities
/admin/tickets/priorities— 4–5 levels with clear definitions - Services
/admin/tickets/services— issue categories (if you want classification) - Predefined replies
/admin/tickets/predefined_replies— top 15–20 frequent situations - Spam filters
/admin/spam_filters/view/tickets— known-spam addresses and phrases - Email pipe — configure forwarding on the mail server →
pipe.php - KB Groups
/admin/knowledge_base/manage_groups— knowledge base structure - Satisfaction survey
/admin/surveys— a standard post-ticket survey - Workflow Automation — notification and escalation automations
Recommended permissions for the Support team
Ask the administrator at /admin/roles:
| Permission | Required for |
|---|---|
| Tickets → View / Reply | Basic ticket access |
| Tickets → Edit | Changing status, priority, assignment |
| Tickets → Delete | Deleting spam/duplicate tickets (restrictive) |
| Knowledge Base → View / Create | Creating KB articles |
| Surveys → View / Create | Satisfaction surveys |
| Appointments → View / Create | Scheduling callbacks |
| WhatsApp → View / Reply | Support via WhatsApp |
| Spam Filters → Manage | Adding filters (Team Lead+) |
| Reports → Tickets | Access to reports |
| Announcements → Create | Publishing client announcements (Team Lead+) |
Quick references
Workflows: Support Ticket Lifecycle
Modules: Support Tickets · Ticket Statuses · Ticket Priorities · Ticket Services · Ticket Predefined Replies · Knowledge Base · Surveys · Spam Filters · Appointments · WhatsApp · WhatsApp API · Announcements
Related departments: Sales Department · OMS & E-commerce
Invest in the Knowledge Base and Predefined Replies as permanent infrastructure — together they deflect 30-40% of repeat tickets so agents handle genuinely complex cases rather than answering the same FAQ repeatedly.
SLA breach data broken down by ticket priority and service category is your strongest case for product fixes or additional headcount. Export and present it quarterly — 'Module X generates 35% of all tickets' is a product conversation, not a support one.