# Welcome WiseParts is a CRM platform built for automotive parts wholesalers. It connects your team with customers, streamlines the sales process, and gives you visibility into performance. ::callout{icon="i-lucide-zap"} **Quick Overview**: Manage customers, create quotes, track activities, and monitor sales β€” all in one place. :: ## What You Can Do ### Manage Customer Relationships - View customer details, purchase history, and outstanding balances - Segment customers by buying behavior (active, inactive, recovered) - Track visits, calls, and interactions ### Streamline Sales - Create quotes with your product catalog (optionally synced from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations)) - Share quotes via email, SMS, or WhatsApp - Convert quotes to orders with customer approval ### Monitor Performance - Visual dashboards for sales, customers, and call center - Pre-built reports for visits, calls, and quotes - Team goals with progress tracking ### Communicate Across Channels - Unified inbox for email and WhatsApp - Call center integration with metrics - Automated workflows triggered by events --- ## Next Steps ::card-group :::card --- icon: i-lucide-compass title: Navigation to: https://docs.wiseparts.ai/getting-started/navigation --- Learn how the app is organized. ::: :::card --- icon: i-lucide-lightbulb title: Key Concepts to: https://docs.wiseparts.ai/getting-started/key-concepts --- Understand the core objects you'll work with. ::: :::card --- icon: i-lucide-database title: Data & Integrations to: https://docs.wiseparts.ai/getting-started/data-integrations --- How WiseParts connects to your systems. ::: :::card --- icon: i-lucide-footprints title: First Steps to: https://docs.wiseparts.ai/getting-started/first-steps --- Quick wins to get productive fast. ::: :: # Navigation WiseParts uses a sidebar menu to organize features. The menu has three main sections plus contextual views. ## Main Menu Click the menu icon to open the sidebar. You'll see these tabs: | Tab | Icon | What's Inside | | ---------------- | ---- | ------------------------------------------------------------ | | **Home** | ☰ | Inbox, Schedule, Tasks, plus quick access to features | | **Dashboards** | πŸ“Š | Visual KPIs for Sales, Customers, Call Center, Conversations | | **Organization** | βš™οΈ | Users, Teams, Branches, Brands, and configuration | ### Home Tab The Home tab is your starting point. It contains three sections: **Home** β€” Your daily essentials: - **Inbox** β€” Notifications for exports, tasks, and alerts - **Schedule** β€” Calendar view of your activities - **Tasks** β€” Work items assigned to you **Shortcuts** β€” Quick actions like creating a new order **Hub** β€” Direct links to major features: - Customers, Analytics, Goals - Quotes, Orders, Invoices - Reports, Schedule, and more ### Dashboards Tab Access visual dashboards: - **Custom** β€” Personalized widgets you configure - **Sales** β€” Goals, forecast, team performance - **Customers** β€” Active/inactive customer metrics - **Call Center** β€” Call volume and recovery rates - **Conversations** β€” Response times and channel stats ### Organization, Billing, Integrations & Features Admin configuration (requires appropriate permissions): - **Organization** β€” Users, Teams, Branches, Brands, Aliases - **Billing** β€” Subscription and Invoices - **Integrations** β€” Source system connections and logs - **Features** β€” Task Types, Forms, Custom Fields --- ## Customer View When you open a customer, the sidebar switches to show customer-specific options: - **Dashboard** β€” Customer overview and widgets - **Profile** β€” Contact info and details - **Sales** β€” Purchase history and analytics - **Activities** β€” Visits, calls, and forms - **Orders & Invoices** β€” Transaction history - **Due Documents** β€” Outstanding balances Click any other menu tab to leave the customer context. --- ## Top Bar The top bar provides: | Element | Purpose | | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | **Search** | Find customers, quotes, orders by name, ID, phone, email | | **Notifications** | Quick view of recent inbox items | | **Profile** | Your settings, language, logout, and **Documentation** (opens [docs.wiseparts.ai](https://docs.wiseparts.ai){rel=""nofollow""}) | --- ## Main Sections Here is a quick map of the main areas in WiseParts: | Section | What You'll Find | | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | | [**Workspace**](https://docs.wiseparts.ai/workspace/inbox) | Inbox, Schedule, Tasks, Search, Dashboards, Notes | | [**Customers**](https://docs.wiseparts.ai/customers/customer-list) | Customer list, Activities, Segments, Territory Management | | [**Sales**](https://docs.wiseparts.ai/sales/quotes) | Quotes, Orders, Invoices, Analytics 360, Reports | | [**Communication**](https://docs.wiseparts.ai/communication/conversations) | Conversations (Email, WhatsApp), Call Center | | [**Automations**](https://docs.wiseparts.ai/automations/getting-started) | Automation rules, Forms | | [**Data**](https://docs.wiseparts.ai/data/importers) | Importers, Exporters, Geocoding | | [**Organization**](https://docs.wiseparts.ai/organization/general) | Users, Teams, Branches, Brands, Aliases | | [**Billing**](https://docs.wiseparts.ai/billing/overview) | Subscription, Invoices | | [**Integrations**](https://docs.wiseparts.ai/data/integrations) | Source system connections β€” see [Integration logs](https://docs.wiseparts.ai/data/integration-logs) | | [**Features**](https://docs.wiseparts.ai/workspace/tasks) | Task Types, Forms, Custom Fields | --- ## Tips - Use **Search** (top bar) for the fastest way to find anything - Open **Documentation** from the profile menu when you need product help - The **Home tab** has shortcuts to most features you need - **Dashboards** are great for a quick performance snapshot - When viewing a customer, all related data is one click away # Key Concepts Understanding these concepts will help you navigate WiseParts effectively. ## Customers A **Customer** is a business that buys from you. Each customer record includes: - Contact information and addresses - Customer ID (identifier from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations)) - Assigned salesperson - Segment (based on purchase behavior) - Categories (custom tags you define) Customers can have **Branches** β€” separate locations that place orders independently. ::note Branch availability depends on your data and integrations. Some organizations use branches extensively while others do not. :: ::callout{icon="i-lucide-info"} Customer data is typically [imported from external systems](https://docs.wiseparts.ai/getting-started/data-integrations). Changes made in WiseParts (like categories and assignments) stay in WiseParts. :: ::tip{to="https://docs.wiseparts.ai/customers/customer-list"} Learn more about managing Customers. :: --- ## Activities An **Activity** is any interaction with a customer: | Type | Description | | --------- | -------------------------------------- | | **Visit** | In-person meeting at customer location | | **Call** | Phone conversation | | **Event** | Scheduled appointment or task | Activities have: - A linked customer - Scheduled date/time - Optional form submission with custom fields - Status (planned, completed, cancelled) Use activities to track what your team does in the field. ::tip{to="https://docs.wiseparts.ai/activities/activities"} Learn more about Activities. :: --- ## Quotes, Orders & Invoices The sales flow in WiseParts follows: **Quote β†’ Order β†’ Invoice**. A **Quote** is a price proposal for a customer. It includes: - Line items with parts, quantities, prices - Discounts and totals - Expiration date Quotes can be: - **Shared** via email, SMS, or WhatsApp - **Approved** by the customer (digital signature) - **Converted** to an order When [integration](https://docs.wiseparts.ai/getting-started/data-integrations#dms-integration-optional) is configured, quotes can sync to your external system. An **Order** is a confirmed purchase. Orders are typically fetched from your external system via API integration. An **Invoice** is a finalized transaction. Like orders, invoices are fetched via integration when available. ::note These features depend on active integrations with your source system. Available functionality varies by organization. :: ::tip{to="https://docs.wiseparts.ai/sales/quotes"} Learn more about the sales workflow. :: --- ## Segments **Segments** classify customers based on configurable rules like purchase behavior. Your organization defines segment types and thresholds β€” for example, one segment based on overall purchases and another filtered to a specific brand. Each segment type defines its own timeframe and criteria, and customers are classified independently for each. Segments help you focus effort on the right customers. ::tip{to="https://docs.wiseparts.ai/customers/segments"} Learn more about Segments. :: --- ## Tasks A **Task** is a work item with: - Subject and description - Assigned user(s) - Due date - Priority - Status (open, in progress, closed) Tasks can be linked to customers and created manually or by automations. ::tip{to="https://docs.wiseparts.ai/workspace/tasks"} Learn more about Tasks. :: --- ## Forms **Forms** are structured templates for collecting data during activities and tasks. When you complete an activity or task, you can fill in a linked form to capture: - What happened during the interaction - Answers to predefined questions - Follow-up actions needed Both activity types and task types can have forms configured, ensuring consistent and structured data collection across your team. --- ## Conversations **Conversations** are unified threads that combine all communication with a customer: - Email messages (sent and received) - WhatsApp messages - Internal notes All channels appear in one inbox, making it easy to see the full communication history without switching tools. Conversations include features like tags for organization, shortcuts for quick replies, auto-replies, and AI-powered analysis. ::tip{to="https://docs.wiseparts.ai/communication/conversations"} Learn more about Conversations. :: --- ## Automations **Automations** run actions automatically when conditions are met: | Component | Role | | -------------- | ------------------------------------ | | **Trigger** | The event that starts the automation | | **Conditions** | Optional filters to narrow the scope | | **Actions** | What happens when triggered | Automations reduce manual work and ensure consistent follow-up. ::tip{to="https://docs.wiseparts.ai/automations/getting-started"} Learn more about Automations. :: --- ## Teams A **Team** groups users who work together: - Shared visibility into each other's customers and activities - Team-level reporting and goals - Useful for regional sales teams or call center groups Users can belong to multiple teams. ::tip{to="https://docs.wiseparts.ai/organization/teams"} Learn more about Teams. :: --- ## Dashboards & Widgets **Dashboards** display visual KPIs using **Widgets**. Examples include: - Sales performance vs goals - Customer activity metrics - Call center statistics - Conversation response times ...and many more. You can customize your personal dashboard with the widgets that matter to you. ::tip{to="https://docs.wiseparts.ai/workspace/dashboards"} Learn more about Dashboards. :: --- ## Summary | Concept | What It Is | | ------------ | ------------------------------------------------------------------ | | Customer | A business that buys from you | | Activity | A visit, call, or event with a customer | | Quote | A price proposal that can become an order | | Order | A confirmed purchase from your external system | | Segment | Classification by purchase behavior (configurable) | | Task | A work item to complete | | Form | Structured template for data collection during activities or tasks | | Conversation | Unified communication thread (email, WhatsApp) | | Automation | Rules that trigger actions automatically | | Team | Group of users with shared visibility | | Dashboard | Visual KPI display with customizable widgets | # First Steps New to WiseParts? Follow this checklist to get comfortable with the platform. ::steps{level="2"} ## Import Your Data Before you can explore WiseParts, make sure your customer and sales data has been imported. This is typically done during initial setup using [importers](https://docs.wiseparts.ai/data/importers). If your data is not yet available, contact your team lead. ## Set Up Your Profile Start by personalizing your account. 1. Click your **profile icon** in the top right 2. Select **Profile** 3. Update your: - Name and photo - Phone number - Language and timezone 4. Save changes Your language setting affects the entire interface. ## Explore a Customer Get familiar with customer records. [Learn more](https://docs.wiseparts.ai/customers/customer-list). 1. Use **Search** in the top bar 2. Type a customer name or ID 3. Click to open the customer 4. Browse the tabs: - **Profile** β€” Contact info - **Analytics** β€” Purchase history - **Activities** β€” Past visits and calls - **Orders** β€” Recent transactions Try the **Dashboard** tab to see customer-specific widgets. ## Check Your Schedule See what's planned for today. [Learn more](https://docs.wiseparts.ai/workspace/schedule). 1. Open the **Home** tab in the sidebar 2. Click **Schedule** 3. View your activities on the calendar 4. Click any activity to see details Switch between Day, Week, and Month views. ## Review Your Tasks See what needs your attention. [Learn more](https://docs.wiseparts.ai/workspace/tasks). 1. In the **Home** tab, click **Tasks** 2. Review open tasks assigned to you 3. Click a task to see details 4. Mark tasks complete when done Tasks can come from colleagues or automated workflows. ## Create a Quote Practice the sales workflow. [Learn more](https://docs.wiseparts.ai/sales/quotes). 1. Open a customer 2. Click **Create Order** or navigate to **Quotes** 3. Search for parts and add to the quote 4. Review pricing and discounts 5. Save the quote You can share it with the customer via email or WhatsApp. :::note Quote creation requires an active integration. If not available, skip this step. ::: ## Browse a Dashboard See how dashboards work. [Learn more](https://docs.wiseparts.ai/workspace/dashboards). 1. Click the **Dashboards** tab in the sidebar 2. Select **Sales** or **Custom** 3. Explore the widgets showing KPIs 4. On **Custom**, try adding or removing widgets Dashboards update in real-time. ## Check Your Inbox See notifications and exports. [Learn more](https://docs.wiseparts.ai/workspace/inbox). 1. In the **Home** tab, click **Inbox** 2. Review notifications: - Task assignments - Export completions - System alerts 3. Click any notification for details The badge on the inbox icon shows unread count. :: --- ## You're Ready You now know how to: :icon{.text-primary name="i-heroicons-check-circle-20-solid"} Navigate the main sections :br:icon{.text-primary name="i-heroicons-check-circle-20-solid"} Find and explore customers :br:icon{.text-primary name="i-heroicons-check-circle-20-solid"} Check your schedule and tasks :br:icon{.text-primary name="i-heroicons-check-circle-20-solid"} Create quotes :br:icon{.text-primary name="i-heroicons-check-circle-20-solid"} Use dashboards :br:icon{.text-primary name="i-heroicons-check-circle-20-solid"} Monitor your inbox Explore the rest of the documentation to learn about specific features. --- ## Quick Reference | Task | Where | | ---------------------- | ----------------------------------------------------------------- | | Find a customer | Search bar (top) | | See today's activities | [Home β†’ Schedule](https://docs.wiseparts.ai/workspace/schedule) | | Check tasks | [Home β†’ Tasks](https://docs.wiseparts.ai/workspace/tasks) | | Create a quote | [Customer β†’ Create Order](https://docs.wiseparts.ai/sales/quotes) | | View KPIs | [Dashboards tab](https://docs.wiseparts.ai/workspace/dashboards) | | Read notifications | [Home β†’ Inbox](https://docs.wiseparts.ai/workspace/inbox) | | Change settings | Profile icon β†’ Profile | # Data & Integrations WiseParts connects to your existing systems to import data and optionally provide real-time features. ## Importers **Importers** are the primary way data enters WiseParts. They pull files from an SFTP/FTP server on a configurable schedule. ::card-group :::card{icon="i-lucide-users" title="Customers"} Business customer records from your ERP β€” contact info, addresses, and account details. ::: :::card{icon="i-lucide-building-2" title="Customer Branches"} Multiple locations or delivery addresses associated with a customer. ::: :::card{icon="i-lucide-shopping-cart" title="Sales"} Historical sales data including orders, quantities, and revenue. ::: :::card{icon="i-lucide-file-warning" title="Due Docs"} Outstanding invoices, credits, and financial documents. ::: :::card{icon="i-lucide-file-text" title="Quotes"} Quote records and conversion history. ::: :::card{icon="i-lucide-layers" title="Brand Families"} Product categorization hierarchies for reporting and analysis. ::: :: ::callout{icon="i-lucide-clock"} **Scheduled imports** β€” Once configured, importers run automatically on a schedule. WiseParts stays in sync with your source systems without manual intervention. :: ::callout{icon="i-lucide-server"} **Import sources** β€” Files can come from WiseParts-hosted SFTP (we provide the credentials) or your own external FTP server. :: ::tip{to="https://docs.wiseparts.ai/data/importers"} Learn more about configuring importers. :: --- ## External IDs Every imported record keeps its original identifier from your source system β€” the **Customer ID**, **Brand ID**, **Product ID**, etc. This allows you to: - Cross-reference records between WiseParts and your source system - Look up the same customer or product in both systems - Track where data originated You'll see these IDs displayed on profiles and in reports throughout the app. --- ## Real-time Integration (Optional) Beyond batch imports, you can connect directly to a supported source system (DMS/ERP) for real-time features: ::card-group :::card{icon="i-lucide-user-check" title="Customers"} Sync customer data on demand β€” refresh profiles instantly from your source system. ::: :::card{icon="i-lucide-receipt" title="Invoices"} Search and retrieve invoice details via API. ::: :::card{icon="i-lucide-package-search" title="Orders"} Query order status and history in real-time. ::: :::card{icon="i-lucide-tag" title="Products"} Live pricing, warehouse availability, and delivery estimates. ::: :::card{icon="i-lucide-wallet" title="Financial Data"} Access credit limits, account balances, and payment status. ::: :::card{icon="i-lucide-truck" title="Routes"} Delivery route information for logistics planning. ::: :::card{icon="i-lucide-list-ordered" title="Order Types"} Available order types and their configurations. ::: :: ::callout{icon="i-lucide-plug"} Real-time integration is **entirely optional**. Many organizations use only importers and work fully offline from their source system. :: ::tip{to="https://docs.wiseparts.ai/data/integrations"} Learn more about real-time integrations. :: --- ## Other Integrations Beyond DMS/ERP systems, WiseParts can connect to additional external platforms: - **Phone Center (PBX)** β€” Import call logs, track lost calls, and monitor call center performance. Call data feeds the Call Center dashboard and call-related widgets. - **Ecommerce Platforms** β€” Sync online orders and customer activity alongside traditional sales channels. The availability of these integrations depends on your organization's setup. --- ## Manual Triggers Some integrations support manual triggers to force an immediate sync. This is useful when you need data refreshed right away rather than waiting for the next scheduled import. **Database export connectors** expose **Generate Import Files** on the integration detail page. Pick a **Sales start date** and confirm to export CSV files to your SFTP server for the importers to process. **API-based connectors** may offer other on-demand actions in the same integration menu β€” check **Integrations** for what your connection supports. ### Same-day sales If your connector runs intraday sales exports, set **Organization > General > Customers Management > Sales reporting cutoff** to **Include current day (intraday import)** so reports and Analytics 360 reflect today's data. --- ## How They Work Together :mermaid{code="flowchart LR; subgraph External[Your DMS / ERP]; SFTP[SFTP/FTP Export]; API[API]; end; subgraph PBX[Phone Center]; CALLS[Call Logs]; end; subgraph WP[WiseParts]; IMP[Importers]; RT[Real-time Integration]; DB[(Database)]; end; SFTP -->|Scheduled| IMP; IMP --> DB; API -.->|On demand| RT; RT -.-> DB; CALLS -->|Scheduled| IMP"} | Channel | Timing | Use Case | | ---------------- | ------------------------------- | -------------------------------------------------------------- | | **Importers** | Scheduled (daily, hourly, etc.) | Bulk data sync β€” customers, sales history, due docs, call logs | | **Real-time** | On demand | Live lookups β€” pricing, availability, account status | | **Phone Center** | Scheduled | Call logs, lost calls, call center metrics | Most data flows through importers on a schedule. Real-time integration adds optional live capabilities when you need them. --- ## Troubleshooting Import issues? Check the **import logs** in Data > Importers. Each import run shows: - Files processed - Records created/updated - Errors and warnings ::callout{icon="i-lucide-life-buoy"} If imports aren't running as expected, verify your SFTP credentials and file naming conventions match your configuration. :: # Henry AI Henry AI is the built-in AI assistant in WiseParts. It appears across the platform to help with form filling, writing, customer analysis, and voice transcription. ::note Henry AI must be enabled for your organization and requires credits. If you don't see AI features, they may not be enabled on your plan. :: ## Where Henry AI Appears | Area | What It Does | | --------------------- | -------------------------------------------------------------------------- | | **Activities** | Voice and text assistant that fills activity report forms conversationally | | **Analytics 360** | Ask questions about live sales data and get view suggestions | | **Stock Analytics** | Ask questions about inventory, rotation, and stockout risk | | **Conversations** | Draft replies, improve text, summarize threads, and auto-tag messages | | **Customer Insights** | AI-generated sales analysis and customer summaries | | **Text Fields** | Improve, expand, translate, or change the tone of any rich text | | **Audio** | Transcribe voice messages and voice input automatically | --- ## Activity Report Assistant When creating an activity report, Henry AI can fill the form through a conversation instead of manual field entry. **Two modes are available:** - **Form mode** β€” AI asks targeted questions to fill specific form fields. It groups related questions to keep the conversation short. - **Dynamic mode** β€” Free-form conversation for open-ended data collection when you're not sure what to capture. Both modes support **voice input** β€” speak your answers and Henry AI fills the form automatically. On the review step before you save, Henry can also: - **Propose follow-up tasks** β€” detected from what you said; shown as removable chips and created when you save the report - **Suggest report recipients** β€” names mentioned in the conversation become chips that prefill **Send a copy to**; remove any you do not want If a name cannot be matched to a user, an amber warning appears so you can add the recipient manually. ::tip{to="https://docs.wiseparts.ai/activities/activities"} Learn more about activities and the AI form assistant. :: --- ## Conversation AI In the Conversations inbox, Henry AI provides quick actions when composing replies: - **Draft** β€” Generate a complete reply based on conversation context - **Improve** β€” Enhance your existing text - **Expand** β€” Add more detail to a short response - **Change tone** β€” Adjust from casual to professional or vice versa - **Translate** β€” Convert to another language - **Summarize** β€” Condense a long thread into key points Additional automated features (if enabled for your organization): | Feature | Description | | -------------------------- | --------------------------------------------------- | | **Auto-tagging** | Incoming messages are automatically tagged by topic | | **Audio transcription** | Voice messages are transcribed to text | | **Conversation summaries** | Threads get an AI-generated summary | ::tip{to="https://docs.wiseparts.ai/communication/conversations"} Learn more about conversations and messaging channels. :: --- ## Analytics 360 In [Analytics 360](https://docs.wiseparts.ai/sales/analytics-360), click **Ask AI** to question your current sales view β€” top customers, margins, year-over-year changes, and more. Henry can suggest filters, views, or alerts. Verify suggestions before applying them. Henry can also break sales down by individual **SKU** β€” this becomes available once you first narrow to a specific brand or brand family. Ask using either "SKU" or "product"; both work. --- ## Stock Analytics In [Stock Analytics](https://docs.wiseparts.ai/sales/stock-analytics), click **Ask AI** to question your inventory view β€” dead stock by warehouse, rotation trends, SKUs at risk, and more. The **Daily Brief** widget highlights SKUs Henry flags for review each day. Henry can also explain the classification criteria β€” ask "what counts as dead stock?" or "what makes a SKU low-rotation?" and it spells out the **rotation thresholds** and **turnover bands** used to classify stock. It keeps the two ideas distinct: the period-scoped **Dead Stock** metric (no sales in the selected period, excluding stock that only just arrived) is separate from the structural **low-rotation** view (little movement over the last six months). --- ## Customer Insights When viewing an activity linked to a customer, Henry AI provides a sales analysis card with: - Executive summary of the customer's sales situation - Identified issues, concerns, and pending topics - References to recent activity reports - Audio playback of the analysis The analysis is cached daily to conserve credits β€” requesting it multiple times on the same day doesn't cost extra. --- ## Text Assistant Any rich text field in WiseParts has access to Henry AI. Click the AI button to: - Improve or expand what you've written - Change the tone - Translate to another language - Generate content from a prompt This works in notes, descriptions, custom fields, and anywhere you see a rich text editor. --- ## Requirements | Requirement | Details | | ----------------------- | --------------------------------------------------- | | **Feature enabled** | Henry AI must be activated for your organization | | **Credits available** | Each AI interaction consumes credits from your plan | | **Supported languages** | English, Portuguese, Spanish, French | --- ## Credits Every AI interaction consumes credits from your plan's monthly allowance. Text-based interactions (drafts, replies, form fills) cost 1 credit each. Voice features (transcription, text-to-speech) cost more based on duration. ::tip{to="https://docs.wiseparts.ai/billing/subscription#credits"} See the full credit breakdown with costs per feature and usage examples. :: --- ## Related Features ::card-group :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- AI-assisted activity report filling ::: :::card --- icon: i-lucide-message-circle title: Conversations to: https://docs.wiseparts.ai/communication/conversations --- AI-powered reply drafting and auto-tagging ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Ask AI about live sales data ::: :::card --- icon: i-lucide-warehouse title: Stock Analytics to: https://docs.wiseparts.ai/sales/stock-analytics --- Ask AI about inventory and rotation ::: :::card --- icon: i-lucide-coins title: Credits to: https://docs.wiseparts.ai/billing/subscription#credits --- Understand credit consumption and purchase more ::: :: # Sign In WiseParts supports password sign-in and passwordless sign-in with a one-time code or email link. ::callout{icon="i-lucide-zap"} **Quick Overview**: Use your email and password on the login screen, or choose **Sign in with a code** to receive a 6-digit code and optional instant link by email. Codes expire after 10 minutes. :: ## Sign in with password 1. Open the WiseParts login page 2. Enter your **email** and **password** 3. Click **Sign in** If you were redirected from another page, WiseParts returns you there after a successful sign-in. ### Forgot password 1. On the login screen, click **Forgot your password?** 2. Enter your email and click **Reset password** 3. Check your inbox for a reset link 4. Follow the link to choose a new password ## Sign in with a code Use this when you prefer not to type your password. 1. On the login screen, click **Sign in with a code** 2. Enter your email and click **Email me a code** 3. Open the email WiseParts sends you 4. Either: - Enter the **6-digit code** on the login screen and click **Verify**, or - Click **Sign in to WiseParts** in the email to sign in instantly The code entry field accepts all six digits at once β€” verification runs automatically when the code is complete. ### Code rules | Rule | Detail | | ---------------- | ------------------------------------------------------------------------------- | | **Expiry** | Codes and email links expire after **10 minutes** | | **Resend** | Use **Resend code** if needed β€” available after a 30-second cooldown | | **Invalid code** | An expired or wrong code shows an error; request a new code to try again | | **Unused email** | If you did not request a code, ignore the email β€” no one can sign in without it | ### Magic link security When you click the email link, WiseParts signs you in automatically and removes the token from your browser history so it is not kept in the address bar or sent as a referrer to other sites. If the link is invalid or expired, you see an error and can return to the login screen to request a new code. ## Setting your password When you accept an invite or follow a password-reset link, WiseParts shows a live checklist as you type. Your password must meet all of these rules: | Requirement | Rule | | ------------- | ------------------------------ | | **Length** | At least 12 characters | | **Uppercase** | At least one uppercase letter | | **Lowercase** | At least one lowercase letter | | **Number** | At least one digit | | **Symbol** | At least one special character | Each rule turns green in the checklist when satisfied. You cannot save until every rule passes. ## Session expired If your session times out, WiseParts may show a message when you return to the login page. Sign in again with your password or a one-time code to continue. --- ## Related ::card-group :::card --- icon: i-lucide-footprints title: First Steps to: https://docs.wiseparts.ai/getting-started/first-steps --- Get productive after your first sign-in. ::: :::card --- icon: i-lucide-compass title: Navigation to: https://docs.wiseparts.ai/getting-started/navigation --- Find your way around WiseParts. ::: :: # Inbox View all your notifications in one place. The inbox collects system alerts, task updates, report notifications, and file exports so you never miss important information. ::callout{icon="i-lucide-zap"} **Quick Overview**: Check your inbox regularly to stay informed about activity that requires your attention. :: ## Viewing Notifications There are two ways to access your notifications: ### Notification Dropdown Click the **bell icon** in the top navigation bar to open the notification dropdown. This provides quick access without leaving your current page. - **Unread / All tabs** β€” Toggle between unread only or all recent notifications - **Unread badge** β€” Shows the count of unread notifications - **Mark all as read** β€” Clear all unread notifications at once - **Hover actions** β€” Mark as read or delete individual notifications - **View all in inbox** β€” Open the full inbox for complete history ### Full Inbox Click **Inbox** in the main navigation to view the complete notification list. - **Unread** notifications appear highlighted - **Read** notifications appear dimmed - Sorted by date (newest first) Click any notification to view its full content in the right panel. ## Reading Notifications Select a notification to see: | Element | Description | | ------------- | ----------------------------------------- | | **Title** | Summary of the notification | | **Subtitle** | Additional context (sender, related item) | | **Timestamp** | When the notification was created | | **Content** | Full message or details | | **Actions** | Links to related items or downloads | ### Files and Downloads Some notifications include downloadable files: - Click the download button to get the file - Files may have an expiration date displayed - Download before the expiration to avoid losing access ## Notification Types Notifications keep you informed about activity across the system: - **Import & Export** β€” Status updates when data jobs complete or fail - **Tasks** β€” Assignments, completions, and changes to tasks you're involved with - **Activities & Forms** β€” Scheduled events and form submissions shared with you - **System** β€” Background processes and alerts requiring attention ::note Many other notification types exist depending on your active features and integrations. :: ## Browser Notifications You can enable browser and desktop notifications to receive alerts even when WiseParts is not in focus. Configure this in your profile settings under notification preferences. ## Managing Notifications ### Mark as Read Notifications are automatically marked as read when you open them. To mark all notifications as read at once: 1. Click **Mark all as read** at the top 2. All unread notifications become read ### Delete Notifications To remove a notification: 1. Open the notification 2. Click the **delete** icon 3. The notification is permanently removed ## Related Features ::card-group :::card --- icon: i-lucide-square-check title: Tasks to: https://docs.wiseparts.ai/workspace/tasks --- Task notifications keep you informed ::: :::card --- icon: i-lucide-file-chart-column title: Reports to: https://docs.wiseparts.ai/reports --- Export completion notifications ::: :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Activity and form sharing notifications ::: :: # Schedule View and manage activities in a visual calendar. Plan visits, calls, and events with drag-and-drop scheduling, multiple calendar views, and route visualization on a map. Click **Schedule** in the main navigation to open your calendarβ€”activities are color-coded by type. ::callout{icon="i-lucide-zap"} **Quick Overview**: See your activities on a calendar, drag to reschedule, and view planned routes on a map. :: ## Calendar Views Switch between views using the view selector: - **Day** β€” Single day with hourly time slots - **Week** β€” Full 7-day week view - **Work Week** β€” Monday through Friday only - **Month** β€” Monthly overview showing activity counts Use the arrows to navigate forward/backward, or click **Today** to jump to the current date. In month view, click any date to drill down to that day. On mobile devices, the calendar defaults to Day view for easier navigation. ## Managing Activities ### Creating Activities 1. Click the **Create** button, or double-click an empty time slot 2. Fill in activity details (type, customer, time) 3. Save the activity On mobile, a single tap on an empty slot opens the create dialog. ::tip{to="https://docs.wiseparts.ai/activities/activities"} Learn more about activity types, forms, and workflows. :: ### Viewing Activity Details Click on any activity to see: - Activity type and description - Linked customer - Scheduled time - Form status Click an activity to see quick actions: **Open** and **Add Form** (or **View Form** if one was already submitted). ### Exporting Export your schedule to Excel using the **Export** button in the calendar toolbar. The export includes activity times, types, linked customers, and segments for the current view. ## Map View Map View is primarily useful for visit-type activities where customer locations are relevant. Visualize scheduled activities on a map to plan efficient routes. Click **Show Routes** in the calendar toolbar to open the map. - **Activity pins** β€” Each activity appears as a numbered marker at the customer's location, showing the visit sequence - **Verified visits** β€” Green checkmark markers show where GPS tracking confirmed actual visit locations - **Route lines** β€” See the path connecting your activities in order - **Date picker** β€” Select a date to view that day's planned route Use the map to identify geographic clusters and optimize travel between stops. ::callout{icon="i-lucide-lightbulb"} **Pro tip**: Check the map before heading out to spot inefficient routes and reorder your day. :: ## Filtering ### By Activity Type Use the activity type dropdown to show only specific types: - Select one or more activity types - Only matching activities appear on the calendar ### Viewing Other Calendars With appropriate permissions, you can view other users' schedules: 1. Use the **Impersonate** dropdown 2. Select a user to see their calendar 3. Clear the selection to return to your own calendar This helps managers review team schedules, coordinate coverage, and plan team activities. ## Related Features ::card-group :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Create and manage activity details ::: :::card --- icon: i-lucide-users title: Customers to: https://docs.wiseparts.ai/customers/customer-list --- Link activities to customers ::: :::card --- icon: i-lucide-map title: Territory Management to: https://docs.wiseparts.ai/customers/territory-management --- Geographic customer planning ::: :: # Tasks Never lose track of follow-ups. Tasks let you assign work, set deadlines, and see what's doneβ€”at a glance. ::callout{icon="i-lucide-zap"} **Quick Overview**: Create a task, assign it to a team member, set a due date, and track progress. Link tasks to customers to keep all follow-up activities in context. :: ## Viewing Your Tasks Navigate to **Tasks** in the main menu. Your task list shows everything assigned to you and your team, organized by status. ### Status Groups Tasks are automatically sorted into three groups: - **Due** β€” Past the due date, needs immediate attention - **Upcoming** β€” Scheduled for the future - **Completed** β€” Finished tasks The number badge on each group tells you how many tasks are in that state. Due tasks show their date in red so you can spot overdue work immediately. ### Task List Details Each task in the list displays: - **Checkbox** β€” Click to mark complete - **Title** β€” What needs to be done - **Type icon** β€” Visual category indicator - **Assignee** β€” Who's responsible - **Due date** β€” When it's due (red if overdue) - **Form icon** β€” Appears if a form was submitted - **Creator** β€” Who created the task (shown in details) Click any task to expand its details. The expanded view shows notes, attachments with download links, who completed the task and when, and a link to the associated customer. For quote-related tasks, the title links directly to the quote or order. ::note Quote linking depends on active integrations. :: ### Filtering Narrow down your list when you have many tasks: - **Date range** β€” by created, closed, or due date - **Task type** β€” show specific categories - **Assignee** β€” filter by user or team - **Include completed** β€” toggle to show or hide finished tasks - **Show public tasks** β€” include tasks from public task types visible to your role ::callout{icon="i-lucide-lightbulb"} Combine filters to find exactly what you need. For example, filter by "Due" + "Assigned to me" to see your overdue tasks. :: ### Exporting Click the export button to download a CSV with all visible tasks. The export includes: - Task status and title - Assignee name - Created, due, and closed dates - Linked customer name and code Use exports for reporting, handoffs, or importing into other tools. ## Creating a Task ::tabs :::tabs-item{label="From Tasks Page"} 1. Click the **+** button in the top right 2. Fill in the task details: - **Title** β€” Be specific. "Call customer" is vague; "Follow up on quote #1234" is actionable. - **Task Type** β€” Pick the category that fits. Types can have linked forms for data collection. - **Due Date** β€” When should this be done? The task moves to Due status if not completed by this date. - **Assign To** β€” Choose a team member or an entire team. Team assignments appear for everyone on that team. - **Customer** β€” Link to a customer or a specific branch to keep this task on their profile. - **Attachments** β€” Optionally add files relevant to the task. 3. Click **Save** The task appears immediately in the Upcoming group (or Due if the date has passed). ::: :::tabs-item{label="From Customer Profile"} Creating tasks from a customer profile is faster when you're already working with that customer. 1. Open the customer or branch profile 2. Go to the **Tasks** tab 3. Click **+** to create a task The task is automatically linked to that customer or branchβ€”no need to search and select them. This is ideal for: - Follow-up calls after a meeting - Quote reminders - Scheduled check-ins - Any customer-specific action item \::: \:: ::::callout{icon="i-lucide-lightbulb"} **Tip**: Assign tasks to teams instead of individuals when anyone on the team can handle it. :::: ## Working with Tasks ### Complete a task Click the circle icon next to any task to mark it complete. The task moves to the **Completed** group and records the completion date. Changed your mind? Click the checkmark again to reopen it. The task returns to Upcoming (or Due if past the due date). ### Edit a task Click the pencil icon to modify any field: - Change the title if scope changed - Update the due date to extend or shorten the deadline - Reassign to a different person or team - Add or remove attachments ::::callout{icon="i-lucide-lightbulb"} The linked customer cannot be changed after creation. Create a new task if you need to link to a different customer. :::: ### Delete a task Click the trash icon to remove a task permanently. You'll see a confirmation dialogβ€”deleted tasks cannot be recovered. ::::callout{icon="i-lucide-lightbulb"} **Tip**: Instead of deleting, consider completing tasks even if the work wasn't done. This preserves history and keeps your metrics accurate. :::: ### Add a Form Some task types have linked forms for structured data collection. This is useful for documenting outcomes, collecting data, or standardizing how work is recorded. 1. Open the task details by clicking on the task 2. Click **Add Form** 3. Fill in the form fields 4. Click **Submit** The form attaches to the task and is visible in the task details. Submitted forms cannot be edited β€” create a new one if needed. Common uses for task forms: - Visit summaries - Call outcomes - Issue resolutions - Quality checks ### Add notes Click the notes icon to open the notes panel. Notes are internalβ€”visible only to your team, not to customers. Use notes to: - Add context for the next person - Record partial progress - Explain why a task is blocked - Leave handoff instructions Notes are timestamped and show who wrote them. ## Task Types Task types let you categorize and organize tasks. Instead of generic "To Do" items, you can have specific types like "Follow-up Call", "Quote Reminder", or "Delivery Check". Each type includes: - **Name** β€” Displayed on tasks - **Icon & Color** β€” Visual identifiers for quick recognition - **Linked Forms** β€” Optional forms for structured reporting - **Public** β€” Makes tasks visible to other users based on role settings ### Why use task types? - **Filter faster** β€” Show only the types you care about - **Reporting** β€” See how many tasks of each type your team handles - **Consistency** β€” Linked forms ensure everyone captures the same info - **Clarity** β€” A "Site Visit" task is clearer than a generic task ### Common Task Types | Type | Use Case | | -------------- | ---------------------------------- | | **Follow-up** | Customer follow-up calls or emails | | **Quote** | Prepare and send a quote | | **Collection** | Payment collection tasks | | **Delivery** | Schedule or confirm delivery | | **Support** | Customer support requests | | **Internal** | Internal team tasks | ### Managing types Navigate to **Features > Task Types** to create and manage your task types. **To create a type:** 1. Click **+** to add a new type 2. Enter a descriptive name 3. Choose an icon from the picker 4. Select a color for visual distinction 5. Optionally link one or more forms for data collection 6. Configure visibility settings (see Public Task Types below) 7. Click **Save** **To edit or delete:** Use the action buttons next to each type in the list. Deleting a type doesn't delete tasks that used itβ€”they just lose their type assignment. **To disable a type:** 1. Edit the type 2. Toggle **Active** off 3. Click **Save** Disabled types remain in the system but cannot be used for new tasks. ::::callout{icon="i-lucide-lightbulb"} **Tip**: Start with 3-5 types that match your real workflows. You can always add more later. Too many types creates confusion. :::: ### Task Type Settings | Setting | Description | | ---------- | --------------------------------------------------- | | **Name** | Type label shown to users | | **Color** | Display color for visual distinction | | **Active** | Enable or disable the type | | **Forms** | Forms to display when completing tasks of this type | ### Linking Forms Task types can have forms attached. When users complete a task of that type, the linked forms appear for data collection. 1. Edit the task type 2. In the **Forms** section, select one or more forms 3. Save See [Forms](https://docs.wiseparts.ai/activities/forms) for creating custom forms. ### Public Task Types By default, tasks are only visible to the creator and the assigned user. Enable **Public Task** to make tasks of this type accessible to other team members. When you mark a type as public, two additional settings appear: - **Can Execute** β€” Roles that can view and complete these tasks - **Can Edit** β€” Roles that can modify task details **Example scenarios:** - **Team-wide visibility**: Mark a "Customer Complaint" type as public with no role restrictions. Anyone on the team can see and resolve complaints. - **Manager oversight**: Create a "Performance Review" type where only managers can edit, but all team leads can view. - **Department-specific**: A "Billing Issue" type visible only to users with financial roles. ::::callout{icon="i-lucide-lightbulb"} **Tip**: Use public task types for work that needs team visibility or handoffs. Keep sensitive or personal tasks as non-public. :::: ## Tasks on Customer Profiles Every customer profile has a **Tasks** tab. This shows tasks linked to that customer (or any of their branches). By default, tasks are visible to the creator and the assigned user. Tasks with a Public task type are also visible to other team members based on role settings. ### Why this matters When you open a customer's profile, you see the task history visible to you: - What's currently pending - What was done recently - Who's working on what No more asking "Did anyone follow up with this customer?" β€” the answer is right there. ### Working from the profile From the Tasks tab, you can: - **View all tasks** linked to this customer - **Create new tasks** that auto-link to the customer - **Filter by status** to see pending vs. completed - **Click through** to task details This is especially useful for: - **Sales teams** β€” Track all follow-ups for a prospect - **Support teams** β€” See pending issues for a customer - **Account managers** β€” Review activity before a call ::::callout{icon="i-lucide-lightbulb"} **Tip**: Before calling a customer, check their Tasks tab. You'll see what's pending and avoid duplicate work. :::: ## Related Features ::::card-group :::::card --- icon: i-lucide-users title: Customers to: https://docs.wiseparts.ai/customers/customer-list --- Manage customer profiles and view linked tasks ::::: :::: ::: :: ::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Track visits, calls, and other customer interactions :: \:: # Search Find what you need instantly. The global search bar lets you locate customers, customer branches, and quotes without navigating through menus. ::callout{icon="i-lucide-zap"} **Quick Overview**: Type in the search bar at the top of any page to find customers by name, [external ID](https://docs.wiseparts.ai/getting-started/data-integrations#external-ids), email, phone, or vehicle information. :: ## Using Global Search The search bar is located in the top header, always accessible from any page. To search: 1. Click the search field or start typing 2. Enter at least 2 characters 3. Results appear instantly as you type 4. Click a result to navigate to that record Press **Escape** to close the search results without navigating. ::callout{icon="i-lucide-lightbulb"} Press **Enter** when you have a single result or an exact match to navigate directly. :: ## What You Can Search - **Customers** β€” Main customer accounts - **Customer Branches** β€” Delivery locations (shown with a badge to distinguish from main records) - **Quotes** β€” By hash, plate, or VIN ## Search Fields **Customer fields:** Customer ID, VAT, name, email, phone, mobile, order hash, plate, or VIN. **Quote fields:** Hash, plate, or VIN. ## Search Results Results are grouped by type and show up to 5 items per category. Each result displays key identifying information: - **Customers** β€” Name, Customer ID, VAT, email, phone - **Customer Branches** β€” Branch name, full ID, email, phone - **Quotes** β€” Hash, customer name, plate, VIN Click **Show more results** to open the full search page with pagination, sorting, and a "My Customers" filter for sales reps. ## My Customers Filter Sales representatives can click the **My Customers** chip to show only assigned customers. This filter is remembered across sessions. ## Real-time Search When [real-time integration](https://docs.wiseparts.ai/getting-started/data-integrations#real-time-integration-optional) is configured, additional search chips appear: - **Customers** β€” Search your source system for customers not yet in WiseParts (auto-creates if found) - **Invoices** β€” Look up invoices by number - **Orders** β€” Find orders by number ::callout{color="blue" icon="i-lucide-info"} These options only appear when real-time integration is active. :: ## Tips - Use exact IDs (Customer ID, VAT) when you know them for fastest results - Partial name searches work well for common queries ## Related Features ::card-group :::card --- icon: i-lucide-users title: Customers to: https://docs.wiseparts.ai/customers/customer-list --- Customer management and profiles ::: :::card --- icon: i-lucide-shopping-cart title: Sales to: https://docs.wiseparts.ai/sales/quotes --- Quotes and orders workflow ::: :: # Dashboards Monitor your business performance at a glance. Dashboards display key metrics through interactive widgets, helping you track goals, spot trends, and make data-driven decisions. ::callout{icon="i-lucide-zap"} **Quick Overview**: Access specialized dashboards: Custom (build your own), Sales, Customers, Call Center, and Conversations. Filter by team, brand, or date range to focus on what matters most. :: ## Dashboard Types Click the dashboard icon in the navigation bar to access available dashboards. | Dashboard | Purpose | Visibility | | ----------------- | ----------------------------------- | ---------------------------------------- | | **Custom** | Your personalized widget layout | Always available | | **Sales** | Sales performance and goal tracking | Always available | | **Customers** | Customer activity and engagement | Always available | | **Orders** | Quote and order conversion metrics | When the Orders module is enabled | | **Call Center** | Phone call analytics | When a voice integration is connected | | **Conversations** | Email and WhatsApp metrics | When the Conversations module is enabled | Your landing page defaults to the Custom Dashboard where you can build your own view. Dashboards that depend on a specific module or integration only appear in the menu when that capability is active for your organization. ## Custom Dashboard Build a personalized view with the widgets that matter most to you. ### Adding Widgets 1. Click the edit icon in the dashboard header 2. Select **Add Widget** from the menu 3. Browse available widgets by category 4. Click a widget to add it to your dashboard ### Arranging Widgets When editing is enabled: - **Drag widgets** to reposition them on the grid - Widgets automatically snap to the grid - Changes are saved when you click **Save** ### Removing Widgets 1. Enter edit mode by clicking the edit icon 2. Click the delete icon on any widget 3. The widget is removed immediately 4. Click **Save** to confirm or **Reset** to undo ## Widget Categories Widgets are organized into several groups covering all aspects of your business. ### Sales Widgets Track revenue and performance against targets. | Widget | Description | | ---------------------------- | ------------------------------------------------------------------------------------------------------------- | | **Sales Forecast** | Projected sales for the current month | | **Salesmen Evolution** | Current month, forecast, and year-over-year by salesperson | | **Sales vs Previous Period** | Compare a chosen window to the same number of preceding business days, grouped by salesperson, brand, or team | | **Salesman Leaderboard** | One-glance ranking of every rep this period: sales, growth vs the previous window, and customers engaged | | **Top Customers Variation** | Customers with biggest sales changes | | **Sales (6 months)** | Monthly sales trend for the past 6 months | | **Sales (12 months)** | Monthly sales trend for the past year | | **Sales by Geography** | Sales distribution across regions, with drill-down into sub-regions | ### Goals Widgets Monitor progress toward targets. | Widget | Description | | ------------------- | ------------------------------------- | | **Goals Evolution** | Track progress toward sales targets | | **Personal Goals** | Your individual goal progress | | **Team Goals** | Team-level goal progress | | **Visits vs Goals** | Compare actual visits against targets | ### Customers Widgets Analyze customer engagement patterns. | Widget | Description | | ---------------------------------- | -------------------------------------------------------------------------------------- | | **Monthly Active Customers (MAC)** | Unique customers who purchased this month | | **Weekly Active Customers (WAC)** | Unique customers who purchased this week | | **Daily Active Customers (DAC)** | Unique customers who purchased today | | **Average Sales per Customer** | Mean order value across your customer base | | **Customers At Risk** | Customers whose recent buying has dropped vs their own baseline, plus dormant accounts | | **Customers Needing Contact** | Active customers grouped by how long they've gone without a touch (30d / 60d / 90d) | | **Recovered Customers** | Customers who returned after a silent stretch, with rep-level drill-down | | **Customer Concentration** | Pareto curve showing what share of revenue your top customers represent | ### Calls Widgets Monitor call center activity. | Widget | Description | | ------------------- | ----------------------------------------------- | | **Calls per User** | Call counts and ratios by operator | | **Calls by Status** | Breakdown of completed, missed, voicemail calls | | **Calls per Day** | Daily call volume trend | | **Calls per Hour** | Hourly distribution to identify peak times | | **Calls by Origin** | Inbound vs outbound call split | | **Lost Calls** | Abandoned or unanswered calls | ### Quotes Widgets Track quote performance and conversion. | Widget | Description | | -------------------------- | ------------------------------------ | | **Orders vs Quotes** | Quote-to-order conversion trend | | **Quotes by Brand** | Quote distribution across brands | | **Quotes Converted Ratio** | Percentage of quotes becoming orders | ### Financial Widgets Monitor financial health. | Widget | Description | | ------------------- | ------------------------ | | **Due Amounts** | Outstanding receivables | | **Annual Run Rate** | Projected annual revenue | ### Conversations Widgets Track messaging performance. | Widget | Description | | ---------------------------- | ------------------------------------- | | **Open Conversations** | Active threads awaiting resolution | | **Unanswered Conversations** | Messages pending your response | | **Unassigned Conversations** | Threads not yet assigned to anyone | | **First Reply Time** | Average time to first response | | **Customer Waiting Time** | How long customers wait for replies | | **Resolution Time** | Time from first message to resolution | | **Sent Messages** | Outbound message volume | | **Received Messages** | Inbound message volume | ## Sales Dashboard Track sales performance across your team. Access via **Dashboards > Sales**. ### Reading Salesman Evolution The Salesmen Evolution widget shows a table with: - **Current month** β€” Sales so far this month - **Forecast** β€” Projected month-end total - **Homologous** β€” Same month last year - **Delta** β€” Percentage change vs homologous Toggle between **Net** and **Margin** views using the switch at the top. ### Understanding Goals Widget The Goals widget displays: - Current sales or forecast value - Target amount - Progress bar showing percentage complete - Thumbs up/down indicator when above/below target Select different goal periods from the dropdown if multiple goals exist. ### Reading Sales vs Previous Period The Sales vs Previous Period widget compares a chosen window to the immediately preceding business days. Use the three switches at the top right: - **Group by** β€” Salesperson, Brand, or Team. Every entity is listed (rows with no sales show **0** so you can spot inactive ones). - **Metric** β€” Net or Margin. Switching is instant; the figures are already in the response. - **Date range** β€” Today, Yesterday, Last 7 days, This week, This month, This quarter, and more. The table shows three numeric columns: - **Current period** β€” Header reads as "Today", "Yesterday", or the formatted date range (e.g., *Nov 1, 2025 - Apr 30, 2026*). - **Previous period** β€” The same number of business days immediately before the current window. For *Today* the header reads "Yesterday"; for *Yesterday* it reads "Day before yesterday"; for longer windows it shows the date range. - **Variation** β€” Percentage change with an up/down indicator. A dash (`β€”`) appears when there were no sales in the previous window, so a missing comparison doesn't masquerade as a 0% delta. ::callout{icon="i-lucide-lightbulb"} **Why business days?** The widget aligns workdays, not calendar days. Monday is compared against the previous Friday rather than Sunday, keeping like-for-like trading days side by side. :: ## Customers Dashboard Analyze customer engagement and activity. Access via **Dashboards > Customers**. This dashboard focuses on customer-level metrics including active customer counts and purchase patterns. ### Reading Customers At Risk The Customers At Risk widget surfaces accounts whose engagement is slipping, so you can intervene before they go silent. Each row is classified into one of three statuses: - **At-risk** β€” bought recently, but the current 30-day total is well below their own prior baseline. - **Lapsed** β€” no purchase for 30–89 days. - **Dormant** β€” no purchase for 90 days or more (up to a year). Toggle between **Net** and **Margin** with the switch at the top. The legend below the table shows how many customers fall into each status. ### Reading Customers Needing Contact The Customers Needing Contact widget groups active customers by **time since last interaction** β€” visit, call, email, or any logged touch. The header shows three coloured tiers: - **30 days silent** (warning) β€” slipping out of regular contact. - **60 days silent** (alert) β€” needs a deliberate outreach. - **90 days silent** (critical) β€” at real risk of churn. Each tier shows the total monthly revenue at stake, so you can prioritise outreach where it matters most. ### Reading Recovered Customers The Recovered Customers widget shows accounts that **came back** after a configurable silent stretch β€” the dormant customers who started buying again. Two pickers shape the window: - **Purchases in** β€” how recent the comeback purchase must be (default: last 30 days). - **After silent for** β€” how long the customer was inactive before that (default: 90+ days). The KPI strip shows total recovered revenue and what share of the period's sales it represents. The table breaks down by sales rep, with a drill-down to see the actual customers each rep brought back. ### Reading Customer Concentration The Customer Concentration widget draws a Pareto curve of your customer base, ranking accounts by revenue contribution. The headline tells you what share of revenue comes from your top customers β€” and whether concentration risk is creeping up. Toggle between Net and Margin to see how the picture shifts when you weight by profitability rather than top-line. ::callout{icon="i-lucide-lightbulb"} **Spot the imbalance**: If the top 5 customers account for over 50% of revenue, losing any one of them puts a serious dent in the year. Use this widget to plan diversification outreach. :: ## Orders Dashboard Track quote-to-order conversion and quoting performance across your brands. Access via **Dashboards > Orders**. This dashboard is only visible when the Orders module is enabled for your organization. It surfaces the Quote widgets β€” **Orders vs Quotes**, **Quotes by Brand**, **Quotes Converted Ratio** β€” so quoting health stays separate from call activity. ## Call Center Dashboard Monitor phone call activity and operator performance. Access via **Dashboards > Call Center**. This dashboard only appears when your organization has a voice/contact-center integration connected and your user is set up as a caller on it. It shows the Call widgets only β€” quote and order metrics live in the dedicated Orders dashboard. ### Date Filtering Call center widgets include a date range selector: 1. Click the date dropdown in the widget 2. Choose a preset: **Today**, **This Week**, **This Month**, **This Quarter** 3. Data refreshes automatically ## Conversations Dashboard Track email and WhatsApp messaging performance. Access via **Dashboards > Conversations**. ### Additional Filters Filter conversations by: - **Number** β€” Specific sender/phone number - **User** β€” Team member handling conversations - **Business Hours Only** β€” Exclude after-hours messages ## Individual Customer Dashboard When viewing a customer record, the Dashboard tab shows metrics specific to that customer. | Widget | Description | | ------------------------ | --------------------------------- | | **Sales Trend** | 12-month sales history chart | | **Quotes Conversion** | Quote-to-order conversion rate | | **Forecast** | Projected monthly sales | | **Latest Events** | Recent activity log (last 7 days) | | **Activities Evolution** | Visit and call trends | | **Invoice Expiration** | Upcoming due dates | | **Upcoming Activities** | Scheduled visits and tasks | | **Active Agreements** | Current pricing agreements | ::callout{icon="i-lucide-lightbulb"} **Show All Sales**: Click the eye icon to include sales from other salespeople, revealing the complete customer purchase history. :: ## Filtering Data ### Team Filter Filter dashboard data by team: 1. Click the **Team** dropdown 2. Select one or more teams 3. Widgets refresh to show only selected teams ### Brand Filter If you manage multiple brands: 1. Click the **Brands** dropdown 2. Select one or more brands 3. Data filters to selected brands only ### Wholesaler Filter (Manufacturers) Manufacturer users can filter by connected wholesalers: 1. Select a filter type (by sales filter or individual wholesaler) 2. Choose specific wholesalers or categories 3. View aggregated or filtered data ::note This filter is available on Enterprise accounts with manufacturer connections. :: ### Refreshing Data Click the refresh icon in the dashboard header to reload all widgets with the latest data. Widgets show a loading indicator while updating. ## Exporting Widgets Most widgets with a data table can be exported. Click the **download icon** in the widget header and choose: - **File** β€” a CSV download you can open in Excel or Google Sheets. - **Image** β€” a PNG snapshot of the widget, ideal for pasting into a Slack message, an email, or a slide deck. The image export captures the **full table**, not just what's on screen β€” so if the widget is scrolled, the PNG still includes every row. Toolbar controls (toggles, date pickers, the export icon itself) are stripped from the snapshot so the image is clean. ::callout{icon="i-lucide-lightbulb"} **Share without screenshots**: PNG export beats an OS screenshot when the table is scrolled β€” you get every row in a single image, no stitching required. :: ::callout{icon="i-lucide-lightbulb"} **Peak Performance**: Use the Call Center dashboard's **Calls per Hour** widget to find your busiest times, then schedule staff accordingly. :: ::callout{icon="i-lucide-lightbulb"} **Track Goals Daily**: Add the **Goals Evolution** widget to your Custom Dashboard to monitor progress without navigating away from your home screen. :: ::callout{icon="i-lucide-lightbulb"} **Compare Salespeople**: The **Salesmen Evolution** widget shows side-by-side comparison. Look at the Delta column to quickly identify who is above or below last year's performance. :: ::callout{icon="i-lucide-lightbulb"} **Monitor Customer Health**: Check **Unanswered Conversations** regularly in the Conversations dashboard. High numbers indicate customers may be waiting too long for responses. :: ## Related Features ::card-group :::card --- icon: i-lucide-file-chart-column title: Reports to: https://docs.wiseparts.ai/reports --- Detailed tabular reports for deep analysis ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Advanced sales analytics and filtering ::: :::card --- icon: i-lucide-users title: Teams to: https://docs.wiseparts.ai/organization/teams --- Manage teams shown in dashboard filters ::: :: # Notes Notes let you record important information that doesn't fit into structured fields β€” observations, preferences, warnings, or context for your team. Notes are available on customers, branches, and other records throughout WiseParts. ::callout{icon="i-lucide-zap"} **Quick Overview**: Add notes to capture important information. Notes are visible to your team and create a shared knowledge base. :: ## Adding Notes 1. Open the record (customer, branch, etc.) 2. Navigate to the notes section 3. Click **Add Note** 4. Enter your note text 5. Click **Save** Notes are timestamped with your name, so the team knows who added them and when. ## Mentioning Colleagues Type **@** followed by a name to mention a colleague in your note. A list of users appears as you type β€” select the person you want to mention. When you mention someone: - They receive a notification about your note - The mention appears highlighted in the note text - They can click the notification to jump directly to the record ::callout{icon="i-lucide-lightbulb"} **Tip**: Mention a colleague when you need their attention on something specific β€” like "@maria please follow up on the payment issue" or "@carlos FYI this customer asked about bulk pricing." :: ## Subscribing to Notes Click the **bell icon** in the notes panel to subscribe to notes on a record. When subscribed, you receive notifications whenever anyone adds a new note. This is useful for: - Key accounts you want to monitor closely - Customers with ongoing issues you're tracking - Accounts you share with colleagues Click the bell again to unsubscribe when you no longer need updates. ## Viewing Notes Notes appear in chronological order, with the most recent first. Each note shows: - **Content** β€” The note text - **Author** β€” Who wrote it - **Date** β€” When it was added Scroll through the notes history to see past observations and context. ## What to Use Notes For Notes are ideal for: - **Customer preferences** β€” "Prefers email over phone calls" - **Warnings** β€” "Credit hold until invoice #1234 is paid" - **Context** β€” "Key decision maker is on vacation until March 15" - **Relationship info** β€” "Met at trade show 2024" - **Special handling** β€” "Requires PO number on all orders" ::callout{icon="i-lucide-lightbulb"} **Tip**: Add a note after learning something important in a call. Future you (or a colleague covering for you) will thank you when that detail prevents an awkward conversation. :: ## Notes vs Forms Use the right tool for the situation: | Notes | Forms | | ------------------ | -------------------------------- | | Quick observations | Structured data collection | | Persistent context | Records of specific interactions | | Visible anytime | Attached to activities | | Free-form text | Form fields with validation | **Example**: After a visit, submit a form with structured fields. Add a note if there's context that doesn't fit the form β€” like "Customer mentioned they're opening a new location in Q2." ::tip{to="https://docs.wiseparts.ai/activities/activities"} Learn more about activities and structured data collection. :: ## Visibility Notes are internal β€” visible to your team members but not to customers. They're designed for sharing knowledge within your organization. ::callout{icon="i-lucide-info"} Note visibility may depend on your role. Some organizations restrict note access by team or user level. :: ## Branch Notes When viewing a branch, notes can be specific to that location. Consider where the information belongs: - **Main customer notes** β€” Information about the overall relationship - **Branch notes** β€” Location-specific details ## Best Practices **Be specific**: "Delivery issues in January" is less useful than "Missed deliveries on Jan 5 and Jan 12 due to wrong address." **Keep it professional**: Notes may be seen by colleagues and supervisors. Write as if your message might be reviewed. **Update regularly**: Remove or update outdated notes so the team isn't working with stale information. ## Related Features ::card-group :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Log structured interactions ::: :::card --- icon: i-lucide-user-cog title: Customer Info to: https://docs.wiseparts.ai/customers/customer-profile/customer-info --- Update customer information ::: :: # Profile Your profile contains personal information, system preferences, and security settings. Update your contact details, change your password, and manage authorized apps from one place. ::callout{icon="i-lucide-zap"} **Quick Overview**: Update your profile photo, change your password, set language and timezone preferences, and manage authorized apps. :: ## Profile Tab The Profile tab contains your basic information and account security settings. ### Profile Photo Your profile photo appears in the navigation bar and activity logs. To update your photo: 1. Click the camera icon on your avatar 2. Click to upload an image or drag and drop 3. Adjust the crop area as needed 4. Click **Confirm** to save Supported formats: PNG, JPEG (max 2MB). To remove your photo, click the delete button on the current image. ### Basic Information | Field | Description | | ------------ | ---------------------------- | | **Email** | Your login email (read-only) | | **Name** | Your first name | | **Surname** | Your last name | | **Phone** | Office phone number | | **Mobile** | Mobile phone number | | **Language** | Interface language | | **Timezone** | Your local timezone | Language options include English, Portuguese, Spanish, and French. The interface updates immediately after saving. ### Changing Your Password To update your password: 1. Click **Change Password?** link 2. Enter your current password 3. Enter your new password 4. Confirm the new password 5. Click **Save** ## Configuration Tab The Configuration tab contains additional WiseParts settings. ### Holidays Set your personal holiday dates. The system adjusts activity and task scheduling based on these dates. ### Account Alias If your organization uses multiple [source system](https://docs.wiseparts.ai/getting-started/data-integrations) accounts, select which account alias to use as your default. ### Brand Restriction When enabled, restricts your view to products and customers from a specific brand family. ## Authorized Apps Tab View and manage third-party applications that have access to your WiseParts account. ### Viewing Authorized Apps Each authorized app shows: - Application name - Date authorized - Permission scopes - Expiration date (if set) ### Revoking Access To remove an app's access: 1. Find the app in the list 2. Click **Revoke** 3. Confirm the action The app will no longer be able to access your account. You can re-authorize the app later if needed. ## Saving Changes Changes on any tab are saved together. The **Save** button activates when you modify any field. To save: 1. Make your changes 2. Click **Save** To discard changes: 1. Click **Cancel** 2. All fields reset to their saved values ## Tips ### Keep Information Current - Update your phone number when it changes for proper call tracking - Set your timezone correctly for accurate activity scheduling ### Security Best Practices - Use a strong, unique password - Review authorized apps periodically - Revoke access for apps you no longer use ## Related Features ::card-group :::card --- icon: i-lucide-users title: Teams to: https://docs.wiseparts.ai/organization/teams --- Manage team members and permissions ::: :::card --- icon: i-lucide-inbox title: Inbox to: https://docs.wiseparts.ai/workspace/inbox --- View notifications and system messages ::: :: # Notifications Configure how and when the system sends notifications to your team. ::callout{icon="i-lucide-zap"} **Quick Overview**: Set up notification channels to keep your team informed about important events. :: ## Notification Channels Configure the communication channels used for system notifications: | Channel | Description | | ---------- | --------------------------------- | | **Email** | Send notifications via email | | **Push** | Mobile app push notifications | | **In-app** | Notifications within the platform | Select the channels appropriate for your team's workflow. Multiple channels can be active simultaneously. --- ## Related Settings ::card-group :::card --- icon: i-lucide-sliders-horizontal title: General to: https://docs.wiseparts.ai/organization/general --- Company profile and timezone. ::: :::card --- icon: i-lucide-plug title: Integrations to: https://docs.wiseparts.ai/data/integrations --- Configure data source connections. ::: :: # Customer Dashboard The customer dashboard provides a visual snapshot of performance and recent activity. Use it to quickly assess customer health before meetings or to monitor key accounts. ::callout{icon="i-lucide-zap"} **Quick Overview**: View sales trends, quote activity, projections, and recent events in customizable widgets. Refresh data on demand and toggle between views. :: ## Accessing the Dashboard Open any customer profile and click the **Dashboard** tab in the side menu. The dashboard is typically the default view when opening a customer. ## Dashboard Widgets The dashboard displays several widgets, each showing different aspects of customer performance. ### Sales Trend Shows month-over-month sales comparison: - Current month vs previous month - Year-over-year trend indicator - Visual growth/decline arrow An AI-powered summary is available to provide insights about the customer's sales trends. Use this to quickly spot customers with declining activity. ### Quotes by Brand Displays quote distribution across product brands: - Brand breakdown with percentages - Visual bars showing relative volume Helps identify which brands the customer quotes most frequently. ### Month Projection Forecasts current month's sales based on historical patterns: - Projected total for the month - Comparison with last month - Confidence indicator based on data availability ::callout{icon="i-lucide-lightbulb"} **Tip**: Projections are most accurate when the customer has consistent ordering patterns. New customers or those with irregular orders show less reliable projections. :: ### Latest Events Timeline of recent customer interactions: - Activities (visits, calls, meetings) - Tasks created or completed - Notes added - System events Each event shows: - Event type icon - Date and time - User who logged it - Brief description Click any event to view full details. ### Last 12 Months Chart Historical sales visualization: - Bar chart showing monthly sales - Current year vs previous year comparison - Hover for exact values Use this to identify: - Seasonal patterns - Growth or decline trends - Unusual spikes or drops ### Activities by Type Breakdown of customer activities: - Visits vs calls vs other types - Count per activity type - Percentage distribution Helps ensure balanced customer engagement across channels. ::callout{icon="i-lucide-info"} **Did you know?** If you notice a customer has lots of calls but few visits, it might be time to schedule an in-person meeting. The dashboard makes these patterns obvious at a glance. :: ### Due Amount Widget Displays outstanding balance information (if enabled): - Total amount due - Overdue amounts highlighted - Payment status indicators This widget only appears if: - Due documents are enabled - The customer has outstanding amounts ### Upcoming Activities Lists scheduled future activities: - Next visits planned - Upcoming calls or meetings - Task due dates Helps you prepare for and track commitments. ### Agreements Widget Shows active agreements for this customer: - Current sales performance bonuses - Active bonus targets and progress - Agreement expiration dates ## Refreshing Data Click the **Refresh** button in the dashboard header to update all widgets with the latest data. ## Show All Sales Toggle ::note This toggle is available on Enterprise accounts. :: For manufacturer users, a toggle appears to switch between: - **Filtered View** β€” Sales through a specific wholesaler - **All Sales** β€” Combined sales across all wholesalers This helps manufacturers see the complete picture of customer activity. ### Using the Toggle 1. Open a customer dashboard 2. Find the **Show All Sales** toggle (typically near the sales widgets) 3. Enable to see combined data, disable for current wholesaler only ## Widget Customization Widget availability depends on: - **Enabled features** β€” Financial widgets need due documents enabled - **Data availability** β€” Widgets hide when no relevant data exists - **Customer type** β€” Prospects have limited dashboard data ### Missing Widgets If you expect a widget but don't see it: - Check if the feature is enabled - Confirm the customer has relevant data (prospects may lack historical data) ## Best Practices ### Before Customer Meetings Review the dashboard to: 1. Check recent sales trend β€” up or down? The AI-powered trend summary can provide quick context. 2. Note any overdue amounts 3. See upcoming activities already scheduled 4. Review recent events for conversation context ### Account Health Monitoring Use dashboards to identify: - **At-risk accounts** β€” Declining trends, no recent activity - **Growth opportunities** β€” Increasing quotes, high conversion - **Service needs** β€” Overdue amounts, pending activities ## Related Features ::card-group :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Detailed sales drill-down ::: :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Full activity timeline ::: :::card --- icon: i-lucide-user-cog title: Customer Info to: https://docs.wiseparts.ai/customers/customer-profile/customer-info --- Customer information ::: :: # Customer Info The Info card displays and manages basic customer details like name, address, and contact information. ## Customer header Above the profile tabs, the customer header shows the customer name and segment badges. For wholesaler users, a **dms** badge shows the customer's source-system identifier. When your integration provides a display ID, WiseParts shows the shortened customer number (without namespace prefixes). Otherwise the badge shows the full imported ID. Prospects keep their prospect reference as-is. VAT appears in a separate badge when present. See [Analytics 360](https://docs.wiseparts.ai/sales/analytics-360) for sales analysis scoped to this customer. ## Fields | Field | Description | | ------------------ | ------------------------- | | **Name** | Customer display name | | **Business Name** | Legal business name | | **VAT** | Tax identification number | | **Email** | Primary email address | | **Phone** | Primary phone number | | **Mobile** | Mobile phone number | | **Address** | Street address | | **City** | City name | | **ZIP** | Postal code | | **State/Province** | State or province | | **Country** | Country | ## Editing 1. Click the **Edit** icon on the Info card 2. Modify the fields 3. Click **Save** ::callout{icon="i-lucide-lightbulb"} **Tip**: Changes you make here are saved in WiseParts. If your source system syncs the same field, your changes may be overwritten on the next sync. :: ## Read-Only Fields For customers synced from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations), the following fields are read-only: - **Customer ID** - **VAT number** All other fields can be edited directly in WiseParts. ::tip{to="https://docs.wiseparts.ai/getting-started/data-integrations"} Learn more about how data syncs between WiseParts and your source system. :: ::callout{icon="i-lucide-info"} **Did you know?** You can tell which fields are managed by your source system β€” they appear grayed out in edit mode. :: ## Prospects Prospects (not yet in your source system) have fully editable profiles β€” no read-only restrictions. ::callout{icon="i-lucide-lightbulb"} **Tip**: Fill in prospect profiles completely before requesting account creation. The more data you provide, the smoother the onboarding in your source system. :: ::tip{to="https://docs.wiseparts.ai/customers/prospects"} Learn more about the prospect workflow and converting leads to customers. :: # GPS & Map ::note GPS features require the verified visits configuration to be enabled. :: GPS coordinates enable location-based features throughout WiseParts. ::callout{icon="i-lucide-zap"} **Quick Overview**: Set GPS coordinates to enable activity verification, territory maps, and route optimization. Drag the pin on the map or enter coordinates manually. :: ## What GPS Enables - **Activity Verification** β€” Prove you visited the customer location - **Territory Management** β€” View customers on a map, manage assignments - **Route Planning** β€” Optimize visit routes based on location ::tip{to="https://docs.wiseparts.ai/customers/territory-management"} See how GPS coordinates power the territory management map. :: ::callout{icon="i-lucide-info"} **Did you know?** When you verify an activity with GPS, the system checks if you're within the configured radius of the customer's coordinates β€” typically 100-500 meters depending on your organization's settings. :: ## Viewing Location If the customer has coordinates on file: - Latitude and longitude display on the profile - Interactive map preview shows the location - Click the map to expand to full view ## Setting Coordinates ### Manual Entry 1. Edit the customer profile 2. Enter latitude and longitude values 3. Save ### From Map 1. Click the map on the profile 2. Search for the address or drag the pin 3. Confirm the location 4. Save ### Automatic Geocoding When customers are imported, the system automatically attempts to set GPS coordinates based on their address. If a customer already has coordinates from their address, you may not need to set them manually. ::callout{icon="i-lucide-lightbulb"} **Tip**: Check if coordinates were auto-set before manually entering them. If the address is accurate, the system may have already done the work for you. :: ## Missing Coordinates Customers without GPS coordinates: - Won't appear on territory maps - Can't have activities GPS-verified - Won't be included in route optimization ::callout{icon="i-lucide-lightbulb"} **Tip**: Prioritize adding coordinates for customers you visit regularly. You can set them right from your phone β€” just visit the customer and drop a pin at their location. :: ::tip{to="https://docs.wiseparts.ai/activities/activities"} Learn how to optimize your visit routes using customer locations. :: # Salesmen Assign a salesperson to each customer to establish account ownership. ::callout{icon="i-lucide-zap"} **Quick Overview**: Assign a salesperson to manage customer accounts. Additional salesman slots can be enabled if your organization requires them. :: ## How Assignments Work Salesman assignments affect: - **Visibility** β€” Salespeople see their assigned customers - **Notifications** β€” Receive alerts about customer activity - **Reporting** β€” Customers appear in salesman performance reports - **Tasks & Activities** β€” Default assignment for new items ## Assigning a Salesperson 1. Find the Salesmen card on the Profile tab 2. Click the edit icon next to the slot 3. Search for the salesperson by name 4. Select from the dropdown 5. Save ## Changing or Removing To change: Edit the slot and select a different person. To remove: Edit the slot and clear the selection (click X or select blank). ## Branch Assignments Branches can have different salespeople than the parent customer. Each branch maintains its own assignment. ::callout{icon="i-lucide-info"} **Did you know?** You can assign different salespeople to each branch β€” useful when branches are in different territories or regions. :: ::tip{to="https://docs.wiseparts.ai/customers/customer-profile/branches"} Learn more about managing customers with multiple locations. :: ## Multiple Salesmen (Optional) WiseParts can be configured to allow up to 3 salesman slots per customer. This is useful for organizations that manage multiple business units within the same app. **Example**: A wholesaler operates two separate sales teams: - **Team A** sells from warehouses A and B β†’ assigned to Salesman 1 - **Team B** sells from warehouses C and D β†’ assigned to Salesman 2 When customers overlap between teams, each team's salesman is assigned to their respective slot. This allows both teams to track their own sales activities for shared customers. ::note The salesman field can be automatically populated from data imports or managed manually in WiseParts, depending on your organization's sync settings. :: ::tip{to="https://docs.wiseparts.ai/customers/customer-settings"} Configure customer sync settings including salesman field behavior. :: # Contacts Track multiple contacts at each customer β€” buyers, owners, managers, and other key people. ::callout{icon="i-lucide-zap"} **Quick Overview**: Add contacts for each person you interact with at a customer. Store names, roles, and contact details for quick reference. :: ## Contact Fields | Field | Description | | ---------- | -------------------------------------- | | **Name** | Contact's full name | | **Role** | Position (Buyer, Owner, Manager, etc.) | | **Email** | Contact email address | | **Phone** | Contact phone number | | **Mobile** | Contact mobile number | ## Adding a Contact 1. Find the Contacts card on the Profile tab 2. Click the **+** button 3. Fill in contact details (name required) 4. Click **Save** ## Editing and Deleting - **Edit**: Click the edit icon on a contact, update fields, save - **Delete**: Click the delete icon, confirm deletion ## Contact Roles Common roles to consider: - **Buyer** β€” Places orders, negotiates pricing - **Owner** β€” Decision maker for major purchases - **Manager** β€” Day-to-day operations contact - **Accounting** β€” Handles payments and invoices - **Receiving** β€” Coordinates deliveries ::tip{to="https://docs.wiseparts.ai/customers/customer-profile/branches"} Contacts are location-specific β€” learn how branches work. :: # Categories Categories let you tag and group customers beyond automatic segments β€” by industry, service level, region, or any classification your organization needs. ::callout{icon="i-lucide-zap"} **Quick Overview**: Categories are manual tags you assign to customers. Use them for filtering lists and organizing customers by any criteria that matters to your business. :: ## How Categories Work Categories are organized by **type**. Each type has predefined values to choose from. | Example Type | Example Values | | ----------------- | ------------------------------- | | **Customer Type** | Retail, Wholesale, Industrial | | **Industry** | Automotive, Agriculture, Marine | | **Service Level** | Premium, Standard, Basic | | **Region** | North, South, East, West | Your organization defines which category types exist and their available values. ## Viewing Categories The Categories card shows: - Each category type configured for your organization - The currently assigned value (or empty if not set) - Edit option for each type ## Assigning Categories 1. Find the Categories card on the Profile tab 2. Click edit on a category type 3. Select a value from the dropdown 4. Save A customer can have one value per category type, but can have values across multiple types. ## Categories vs Segments | Categories | Segments | | ---------------------------- | -------------------------- | | Manually assigned | Automatically calculated | | Based on your classification | Based on purchase behavior | | Any criteria you define | A, B, C performance tiers | | Multiple types per customer | One segment per type | Use categories for static classifications (industry, region). Use segments for dynamic, sales-based grouping. ::tip{to="https://docs.wiseparts.ai/customers/segments"} Learn how segments automatically classify customers based on purchase behavior. :: ## Impact on Sales Analytics Customer categories are profile labels for filtering customer lists and exports. They are **not** a **Group by** option in Analytics 360. To compare sales across business-defined buckets (for example original vs aftermarket parts, or sales regions), create a **sales grouping** under **Settings > Sales grouping** and use **Group by > Sales segment** in [Analytics 360](https://docs.wiseparts.ai/sales/analytics-360). ::tip{to="https://docs.wiseparts.ai/sales/analytics-360"} Learn how sales segments work in Analytics 360. :: ## Filtering by Category Categories enable powerful filtering β€” use them to narrow down customer lists by category values when searching or exporting. ::callout{icon="i-lucide-info"} **Did you know?** Categories work great with the customer list export. Filter by category, export the list, and you have a ready-made target list for campaigns or outreach. :: ## Configuration Categories are configured in **Customers > Categories**. ::tip{to="https://docs.wiseparts.ai/customers/categories"} Learn how to create and manage category types for your organization. :: # Custom Fields Custom fields extend customer profiles with data specific to your organization β€” industry attributes, integration data, or any additional tracking you need. ::callout{icon="i-lucide-zap"} **Quick Overview**: Custom fields are extra data points unique to your business. They appear in exports and help you track anything the standard fields don't cover. :: ## What Custom Fields Are Custom fields are additional data points beyond the standard profile fields. They appear in a dedicated section on the Profile tab. Examples: - **Industry-specific**: Fleet size, store square footage, number of technicians - **Integration data**: External system IDs, sync status - **Sales tracking**: Lead source, acquisition date, account tier - **Compliance**: License numbers, certification dates ## Field Types Custom fields can be: - **Text** β€” Free-form text entry - **Number** β€” Numeric values - **Date** β€” Date picker - **Dropdown** β€” Select from predefined options - **Checkbox** β€” Yes/no toggle - **Multi-select** β€” Choose multiple options ## Viewing and Editing Custom fields display based on your configuration. If visible: 1. Find the Custom Fields section on the Profile tab 2. Click **Edit** to modify values 3. Save changes **Read-only fields** show their value but cannot be changed on the profile. Your integration or import jobs can still populate them. Read only is set when the field is configured in **Features > Custom Fields**. ## Data Import Custom fields can be populated via: - Manual entry on the profile - Data imports or [source system](https://docs.wiseparts.ai/getting-started/data-integrations) integrations ## Configuration Custom fields are configured in **Features > Custom Fields**. Define field types, hints, and whether fields are read only or required. ::tip{to="https://docs.wiseparts.ai/customers/custom-fields"} Learn how to create and configure custom fields. :: # Credit Limits ::note Credit limit information requires an active integration with your source system. :: Credit limits (plafonds) show a customer's credit status β€” how much credit they have, how much they've used, and whether they're in good standing. ::callout{icon="i-lucide-zap"} **Quick Overview**: Check credit status before taking orders. Green means good standing, yellow means approaching the limit, red means over limit or blocked. :: ## Credit Display The credit card shows: | Field | Description | | -------------------- | -------------------------------------- | | **Credit Limit** | Maximum allowed credit | | **Current Balance** | Outstanding amount owed | | **Available Credit** | Remaining credit (limit minus balance) | ## Status Indicators Color coding shows credit health: - **Green** β€” Within limits, good standing - **Yellow** β€” Approaching limit (warning threshold) - **Red** β€” Over limit or blocked ::callout{icon="i-lucide-info"} **Did you know?** The dashboard's Due Amount widget shows outstanding invoices that eat into available credit. Check both credit limits and due amounts for the full financial picture. :: ::tip --- to: https://docs.wiseparts.ai/customers/customer-profile/transaction-history --- View outstanding invoices and due documents for this customer. :: ## How Credit Affects Orders Depending on your configuration: - Orders may be blocked when credit is exceeded - Warnings may appear during order creation - Approval workflows may trigger for over-limit customers ::callout{icon="i-lucide-lightbulb"} **Tip**: Before a sales call, glance at credit status. If a customer is near their limit, you can proactively discuss payment or credit increase β€” rather than getting blocked mid-order. :: ## Data Source Credit information comes from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). WiseParts displays the data but doesn't calculate or manage credit limits. Credit checks are performed in real-time when the integration supports it. ## Multiple Credit Lines Some organizations track multiple credit types: - Standard trade credit - Special financing terms - Project-specific credit If configured, these appear as separate entries. ## Prospects Prospects (not yet in your source system) don't have credit limit information β€” there's no account to track credit against. # Routes ::note Route information requires an active integration with your source system. :: Routes define delivery schedules β€” which route serves a customer and on what days. ::callout{icon="i-lucide-zap"} **Quick Overview**: Routes tell you when orders can be delivered. Check delivery days before promising a customer their order will arrive "tomorrow." :: ## Route Information The Routes card shows: | Field | Description | | ----------------- | ------------------------------------ | | **Route Name** | Delivery route identifier | | **Route Code** | System code for the route | | **Delivery Days** | Days of the week this route operates | ## How Routes Are Used Routes enable: - **Delivery planning** β€” Know when orders can be delivered - **Order scheduling** β€” Match orders to delivery windows - **Route optimization** β€” Plan efficient delivery sequences - **Customer expectations** β€” Communicate delivery days clearly ## Data Source Routes are managed in your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) and sync to WiseParts. To change a customer's route: 1. Update the assignment in your source system 2. Sync the customer profile ## Multiple Routes Customers may have multiple routes for: - Different product types (parts vs. equipment) - Different delivery addresses (main location vs. branches) - Backup routes for overflow ::callout{icon="i-lucide-info"} **Did you know?** Knowing a customer's delivery days helps with upselling. If they get deliveries on Tuesday and Friday, you can suggest adding items to an order that's about to ship. :: # Agreements The Agreements tab shows all sales performance bonus agreements that include this customer. Track progress toward bonus tiers and see how the customer is performing against their targets. ::callout{icon="i-lucide-zap"} **Quick Overview**: See this customer's agreements with sales targets and bonus levels. The dashboard widget shows progress at a glance; the tab shows full details. :: ## Dashboard Widget The customer dashboard shows an Agreements widget with: - **Agreement name** and period - **Turnover** β€” Actual sales during the period - **Forecast** β€” Projected based on elapsed time - **Performance indicator** β€” Thumbs up/down showing if actual meets forecast Click the widget to view full details. ## Agreements Tab View all agreements for this customer: | Element | Description | | ------------------------ | --------------------------------- | | **Progress bar** | Sales against bonus tiers | | **Current level** | Which bonus tier has been reached | | **Turnover vs Forecast** | Actual vs projected performance | ::callout{icon="i-lucide-lightbulb"} **Tip**: Check agreements before a sales call. If a customer is close to their next bonus tier, you can motivate them to place a larger order to reach it. :: ## Bonus Tiers Each agreement has tiered sales performance bonuses based on sales thresholds: | Level | Example Threshold | Bonus | | ------- | ----------------- | ----- | | Level 1 | €0+ | 5% | | Level 2 | €5,000+ | 8% | | Level 3 | €10,000+ | 12% | The progress bar shows achievement and proximity to the next tier. For full details on managing agreements, see [Agreements](https://docs.wiseparts.ai/sales/agreements). ## Related Features ::card-group :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Sales analysis ::: :::card --- icon: i-lucide-target title: Goals to: https://docs.wiseparts.ai/sales/goals --- Team and individual targets ::: :: # Notes Notes let you record important information about a customer that doesn't fit into structured fields β€” observations, preferences, warnings, or context for your team. ::callout{icon="i-lucide-zap"} **Quick Overview**: Add notes to capture important customer information. Notes are visible to your team and create a shared knowledge base about each customer. :: ## Adding Notes 1. Open the customer profile 2. Navigate to the notes section 3. Click **Add Note** 4. Enter your note text 5. Click **Save** Notes are timestamped with your name, so the team knows who added them and when. ## Mentions and Subscriptions - Type **@** followed by a name to mention a colleague β€” they'll receive a notification - Click the **bell icon** to subscribe to a customer's notes and get notified of new additions ## Branch Notes When viewing a branch, notes can be specific to that location: - **Main customer notes** β€” Information about the overall relationship - **Branch notes** β€” Location-specific details ::tip{to="https://docs.wiseparts.ai/workspace/notes"} See the full Notes guide for mentions, subscriptions, best practices, and more. :: ## Related Features ::card-group :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Log structured customer interactions ::: :::card --- icon: i-lucide-user-cog title: Customer Info to: https://docs.wiseparts.ai/customers/customer-profile/customer-info --- Update customer details ::: :: # History The history panel shows every change made to a customer or branch profile over the last 12 months β€” who changed what, when, and from where. ::callout{icon="i-lucide-zap"} **Quick Overview**: Open the history panel from any customer or branch header to see a timeline of edits, with per-field diffs and clear attribution to the person, integration, automation, or AI agent that made each change. :: ## Opening the History Panel 1. Open a customer or branch profile 2. Click the **history icon** in the profile header (clockwise arrow) 3. A side panel slides in with the full timeline The panel works the same way on both customer profiles and individual branches β€” you always see the history for whichever record you're viewing. ## Reading the Timeline Each entry on the timeline represents a single change event and shows: - **Icon bullet** β€” color-coded by the type of change (create, update, delete) - **Actor** β€” the person or system that made the change, with email tooltip on hover - **Diff sentence** β€” a plain-language summary like "changed phone from X to Y" - **Timestamp** β€” relative time ("2 days ago") with the exact date on hover When a single event touches multiple fields, they're grouped into one entry so the timeline stays readable. ## Who Made the Change? Every entry is attributed to one of five actor types: | Actor | Meaning | | --------------- | ----------------------------------------------------------------------------------------------------- | | **User** | A team member edited the record directly | | **Integration** | Data synced in from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) | | **Automation** | A rule or workflow updated the record | | **AI agent** | An AI assistant applied the change | | **System** | An internal process (migrations, housekeeping) | Hover on the actor to see their email address when available. ## Scrolling Through History The panel loads more entries automatically as you scroll β€” there's no page-by-page navigation. Coverage goes back up to 12 months. ::callout{icon="i-lucide-info"} Fields that carry sensitive or low-value changes β€” contact coordinates, internal identifiers, null-to-null updates β€” are hidden from the timeline to keep it focused on meaningful edits. :: ## When to Use History - **Investigating a data issue** β€” See whether a recent integration sync overwrote a manual edit - **Confirming who changed what** β€” Useful when a customer flags that their record looks wrong - **Auditing automation behavior** β€” Verify that a workflow updated the fields you expected ::note History is available to wholesaler users with permission to view customer details. If you don't see the history icon, check with your admin. :: ## Related Features ::card-group :::card --- icon: i-lucide-sticky-note title: Notes to: https://docs.wiseparts.ai/customers/customer-profile/notes --- Record observations on customer profiles ::: :::card --- icon: i-lucide-user-cog title: Customer Info to: https://docs.wiseparts.ai/customers/customer-profile/customer-info --- Edit customer details ::: :::card --- icon: i-lucide-building-2 title: Branches to: https://docs.wiseparts.ai/customers/customer-profile/branches --- Manage customer locations ::: :: # Transaction History ::note Transaction data depends on active integrations with your source system. Available details vary by organization. :: Track all transaction history for a customer in one place β€” from initial quotes through orders, invoices, and outstanding payments. ::callout{icon="i-lucide-zap"} **Quick Overview**: Access Quotes, Orders, Invoices, and Due Documents tabs from the customer profile. Filter by date, warehouse, or brand, expand rows for details, and export data. :: ## Transaction Tabs | Tab | Shows | Source | | ----------------- | -------------------- | ------------------------- | | **Quotes** | Quotations | Created in WiseParts | | **Orders** | Order history | Synced from source system | | **Invoices** | Invoice records | Synced from source system | | **Due Documents** | Outstanding payments | Synced from source system | Tab visibility depends on your organization's settings. ## Quotes View and manage quotations for this customer. Quotes are created in WiseParts and can optionally sync prices and stock availability in real-time with your source system. Each quote has both a **global status** and **per-line status**, letting you track progress at different levels of detail. ::tip{to="https://docs.wiseparts.ai/sales/quotes"} Learn more about creating quotes, status workflows, and conversion to orders. :: ## Orders View the customer's order history with delivery status. Each order shows order number, date, status, total, and warehouse. Expand to see line items with product details, quantities, prices, and delivery status. **Filtering**: Narrow by date range, warehouse, brand, or status. ::callout{icon="i-lucide-lightbulb"} **Tip**: Use the brand filter to quickly see if a customer has ordered a specific product line before. Great for "Have you tried our new X?" conversations. :: ::tip{to="https://docs.wiseparts.ai/sales/orders"} Learn more about order tracking and delivery status. :: ## Invoices View all invoices issued to the customer. Each invoice shows invoice number, date, due date, amount, and status. Expand to see line items, tax breakdown, and related order number. **Filtering**: Narrow by date range, warehouse, or brand. ::tip{to="https://docs.wiseparts.ai/sales/invoices"} Learn more about invoice details and searching by part. :: ## Due Documents Track outstanding payments and receivables. A summary widget shows total outstanding, overdue amounts, and current (not yet due) balances. Documents are color-coded: green (not due), yellow (due soon), red (overdue). **Filtering**: Narrow by date range, due date range, or document type. **Export**: Download for accounts receivable reports or collection follow-ups. ::callout{icon="i-lucide-info"} **Did you know?** The Due Documents export is perfect for collection calls. Filter to overdue items, export the list, and you have a ready-made call sheet with amounts and aging. :: ::tip{to="https://docs.wiseparts.ai/sales/due-documents"} Learn more about company-wide outstanding balances and receivables. :: ## Branch Context When viewing a branch, transaction tabs filter to that branch only. View the main customer for combined data across all locations. ::tip{to="https://docs.wiseparts.ai/customers/customer-profile/branches"} Learn more about managing customers with multiple locations. :: ## Related Features ::card-group :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Sales analysis ::: :::card --- icon: i-lucide-file-text title: Quotes to: https://docs.wiseparts.ai/sales/quotes --- Create price proposals ::: :: # Branches Branches represent different locations of a single customer β€” stores in a retail chain, regional offices, or multiple warehouses. ::callout{icon="i-lucide-zap"} **Quick Overview**: Use the branch selector to switch between locations. Each branch has its own profile, activities, and transaction history. All tabs work the same as the main customer. :: ## What Are Branches? A branch is a sub-location of a customer. Common examples: - **Retail chain** β€” Each store is a branch - **Regional offices** β€” Headquarters plus regional locations - **Warehouses** β€” Central office with distribution centers Branches are created through your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) integration when a customer has multiple ship-to addresses or location hierarchies. ## Switching Branches When a customer has branches, a **branch selector** appears in the profile header. 1. Click the branch selector 2. Choose a branch from the list 3. All tabs update to show that branch's data To return to the main customer, click the selector and choose the parent. ## Branch Data Each branch maintains its own: - Address, contacts, and salespeople - Activities and tasks - Orders, invoices, and quotes - Analytics and KPIs Categories are inherited from the parent customer. ::callout{icon="i-lucide-lightbulb"} **Tip**: When planning visits for a retail chain, switch between branches to check each location's recent activity. Some branches may need more attention than others. :: ## Working with Branch Activities When viewing the parent customer's Activities tab: - Toggle **Include branches** to see activities from all locations - Disable to see only parent-level activities When creating an activity from a branch view, it automatically links to that branch. ::tip{to="https://docs.wiseparts.ai/activities/activities"} Learn more about creating and managing customer activities. :: ::note Branches have their own salesman assignments, independent of the parent customer. :: ## Related Features ::card-group :::card --- icon: i-lucide-user title: Customer Profile to: https://docs.wiseparts.ai/customers/customer-profile --- Profile navigation overview ::: :::card --- icon: i-lucide-map-pin title: Territory Management to: https://docs.wiseparts.ai/customers/territory-management --- Map-based branch assignment ::: :: # Customer List The customer list is your central directory for browsing, searching, and managing customer records. Filter by multiple criteria, export data, and quickly access customer profiles. ::callout{icon="i-lucide-zap"} **Quick Overview**: Search by ID, name, or salesman. Filter by location, segment, or prospect status. Expand rows to see all segments. Export to CSV or Excel. :: ## Accessing the Customer List Navigate to **Customers** in the hub menu to open the customer list. ## List Columns The customer list displays key information at a glance: | Column | Description | | ------------ | ------------------------------------------------------- | | **ID / VAT** | Customer ID (wholesalers) or VAT number (manufacturers) | | **Name** | Customer name (manufacturers also see wholesaler name) | | **City** | Customer location | | **Segment** | Current segment assignment (hover for details) | | **Actions** | Quick actions (view, edit for prospects) | ### Sorting Click column headers to sort: - Click once for ascending - Click again for descending - Sortable columns: ID/VAT, Name ## Searching and Filtering Use the advanced search panel to narrow your customer list. ### Search Fields | Field | Description | Example | | ---------------- | ------------------------------ | -------------------------- | | **ID / VAT** | Search by customer identifier | "12345" or "IT12345678901" | | **Name** | Partial match on customer name | "acme" finds "Acme Corp" | | **Salesman** | Filter by assigned salesperson | Select from dropdown | | **City** | Filter by city name | "Milan" | | **ZIP** | Filter by postal code | "20100" | | **Prospect** | Show only prospects | Toggle on/off | | **Segment Type** | Select segment classification | "Sales Performance" | | **Segment** | Filter by specific segment | "Gold", "Silver" | ### Applying Filters 1. Click the filter/search icon 2. Enter your search criteria 3. Click **Search** to apply 4. Results update immediately ### Clearing Filters - Click **Clear** to reset all filters - Or remove individual filters from the active filter chips ### Segment Filtering Filter by customer segments: 1. Select a **Segment Type** (e.g., "Sales Performance") 2. Select a specific **Segment** value (e.g., "Gold") 3. Only customers in that segment appear ## Expanding Customer Rows View all segment assignments for a customer: 1. Click the **expand icon** on any row 2. The expanded section shows: - All segment types for this customer - Auto-assigned vs manual segment values - Eligible sales amount (if shown) ### Editing Segments from List To edit segments: 1. Expand a customer row 2. Click the segment value you want to change 3. Select a new segment from the dropdown 4. The change saves automatically ### Segment Information The expanded view shows: - **Segment Type** β€” The classification system - **Auto** β€” System-calculated segment based on sales - **Manual** β€” User-assigned override (takes precedence) - **Eligible Sales** β€” Sales amount used for calculation ## Exporting Customer Data Export your customer list for reporting or external use. ### Quick Export Export the current view: 1. Apply any desired filters 2. Click the export menu 3. Choose format: - **CSV** β€” Comma-separated values - **Excel** β€” .xlsx format The export includes: - All visible columns - Applied filters - Current sort order ### Full Export Export all customers: 1. Click export menu 2. Select **Export All** 3. Choose format 4. Export runs in background 5. Download notification appears when ready ### Export Fields Exports include: - Customer ID (from source system) - Name - City, Address, ZIP - VAT - Salesman - Prospect indicator - Segment and eligible sales - Email, Phone, Mobile ## Import Wizards Import customer data from external files. ### Available Importers Depending on configuration, you may see importers for updating existing customer data or adding multiple customers. Available importers are dynamically loaded based on your organization's configuration. ### Using Import Wizard 1. Click the import menu 2. Select the importer type 3. Download the template (if needed) 4. Upload your file 5. Map columns to fields 6. Review and confirm import See **Data > Importers** for import configuration. ## Creating Prospects Add potential customers not yet in your source system. ### Quick Create 1. Click **Create Prospect** button 2. Fill in customer details: - Name (required) - Contact information - Address - Assigned salesman 3. Click **Save** 4. Navigate to the new prospect profile See [Prospects](https://docs.wiseparts.ai/customers/prospects) for detailed prospect management. ## Opening Customer Profiles Click any customer row to open their full profile. ### Quick Actions The actions column provides: - **View** β€” Open customer profile - **Edit** β€” Edit prospect details (prospects only) - **Delete** β€” Remove prospect (prospects only) ### Navigation After Click Clicking a customer opens their profile, typically landing on the Dashboard tab. From there, navigate using the side menu. ## Customer List for Manufacturers ::note Manufacturer-level views are available on Enterprise accounts. :: Manufacturers see additional information: - **Wholesaler name** β€” Shows which wholesaler owns the customer - **VAT as primary ID** β€” VAT number instead of source system ID - **Cross-wholesaler view** β€” Customers across all connected wholesalers ### Filtering by Wholesaler Manufacturers can filter to specific wholesalers using the standard filters. ## Related Features ::card-group :::card --- icon: i-lucide-user title: Customer Profile to: https://docs.wiseparts.ai/customers/customer-profile --- Full customer details ::: :::card --- icon: i-lucide-user-plus title: Prospects to: https://docs.wiseparts.ai/customers/prospects --- Managing potential customers ::: :::card --- icon: i-lucide-pie-chart title: Segments to: https://docs.wiseparts.ai/customers/segments --- Customer classification ::: :::card --- icon: i-lucide-map-pin title: Territory Management to: https://docs.wiseparts.ai/customers/territory-management --- Map-based customer view ::: :: # Prospects Prospects are potential customers that exist in WiseParts but not yet in your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). Use prospects to track leads, plan activities, and prepare for new customer relationships. ::callout{icon="i-lucide-zap"} **Quick Overview**: Create prospects to track potential customers. Log activities and notes before they become real customers. Request account creation when ready, then link the prospect to the new customer record. :: ## What Are Prospects? A prospect represents a potential customer relationship: - **Not in your source system** β€” No account yet - **Full profile capabilities** β€” Create activities, tasks, notes - **Conversion ready** β€” Links to real customer when account is created ### When to Use Prospects Create prospects for: - New leads from trade shows or marketing - Referrals not yet set up in your system - Potential customers you're qualifying - Pre-sales activity tracking ## Creating a Prospect ### From Customer List 1. Go to **Customers** in the hub menu 2. Click **Create Prospect** button 3. Fill in the prospect details 4. Click **Save** ### Required Fields - **Name** β€” Prospect/company name ### Optional Fields | Field | Description | | ----------------- | --------------------- | | **Business Name** | Legal business name | | **Email** | Primary contact email | | **Phone** | Phone number | | **Mobile** | Mobile phone | | **Address** | Street address | | **City** | City | | **ZIP** | Postal code | | **State** | State/Province | | **Country** | Country | | **VAT** | Tax ID (if known) | | **Salesman** | Assigned salesperson | ### GPS Coordinates Add latitude and longitude to: - Enable map display on profile - Allow activity GPS verification - Include in route planning ## Prospect Profile Prospect profiles work like regular customer profiles with some differences. ### Available Features Prospects support: | Feature | Available | | --------------- | ---------------- | | Profile editing | Full editing | | Contacts | Add and manage | | Activities | Create and log | | Tasks | Create and track | | Notes | Add notes | | Dashboard | Limited data | ### Limited Features Prospects don't have: | Feature | Reason | | ------------------ | --------------------------- | | Sales history | No transactions exist | | Analytics 360 | No sales data to analyze | | Orders/Invoices | Not in source system | | Due Documents | No billing relationship | | Automatic segments | Segments require sales data | | Sync | Not in source system | ### Prospect Badge Prospects display a **Prospect** badge in: - Customer list - Profile header - Activity links This helps distinguish prospects from regular customers. ## Working with Prospects ### Logging Activities Track your interactions with prospects: 1. Open the prospect profile 2. Go to **Activities** tab 3. Click **+** to add an activity 4. Select type (visit, call, meeting) 5. Add details and save Activities on prospects work identically to regular customer activities, including: - Activity types - Start/end times - Forms (if forms configured) - GPS verification (if coordinates set) ### Creating Tasks Track follow-ups and to-dos: 1. Go to **Tasks** tab 2. Create tasks for the prospect 3. Set due dates and assignments ### Adding Contacts Build your contact database: 1. Go to **Profile** tab 2. Add contacts with roles ### Assigning Salespeople Assign responsibility: 1. Edit the prospect profile 2. Set Salesman 1 (primary) 3. Optionally set Salesman 2, 3 ## Requesting Account Creation When a prospect is ready to become a customer, request account creation in your source system. ### Request Account Creation 1. Open the prospect profile 2. Click **Request Account Creation** in the header 3. The system sends a notification 4. The account is created in your source system ### What Happens Next After the request: 1. Your team creates the customer in the source system 2. The new customer syncs to WiseParts 3. You can then convert the prospect ### Email Notification The request typically sends an email containing: - Prospect details - Requesting user - Any notes added Check your organization's process for account creation requests. ## Converting Prospects When the prospect exists in your source system, convert the prospect record to link them. ### Conversion Process 1. Open the prospect profile 2. Click **Convert** in the header 3. Enter the Customer ID of the new customer account (from your source system) 4. Confirm the conversion 5. The system links prospect data to the customer ### What Transfers During conversion: - Activities move to the customer record - Tasks move to the customer record - Notes and attachments transfer - Contact information merges ### What Changes After conversion: - Prospect badge is removed - Full customer features become available - Sales data begins accumulating - Segments can be assigned ::caution Conversion cannot be undone. Ensure you're linking to the correct customer account. :: ## Managing Prospects ### Finding Prospects To find all prospects: 1. Go to Customer list 2. Enable the **Prospect** filter 3. The list shows only prospects ### Editing Prospects Unlike regular customers, all prospect fields are editable: 1. Open prospect profile 2. Click edit on any section 3. Update and save ### Deleting Prospects If a prospect won't convert: 1. Open the prospect profile 2. Use delete option from actions menu 3. Confirm deletion ::callout{icon="i-lucide-info"} **Note**: Deleting removes all prospect data including activities and tasks. :: ## Best Practices ### Qualifying Prospects Before investing significant effort: 1. Verify basic contact information 2. Confirm business legitimacy 3. Assess potential value 4. Log qualification activities ### Tracking Progress Use activities to document your sales process: - Initial contact - Qualification calls - Proposals sent - Follow-ups ### Timely Conversion Don't let prospects linger: - Request account creation promptly when qualified - Convert as soon as the source system account exists - Begin tracking real transactions ### Data Quality Ensure prospect data is accurate: - Complete addresses enable route planning - GPS coordinates enable verification - Contacts enable proper communication ## Related Features ::card-group :::card --- icon: i-lucide-users title: Customer List to: https://docs.wiseparts.ai/customers/customer-list --- Browse and filter prospects ::: :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Track prospect interactions ::: :::card --- icon: i-lucide-square-check title: Tasks to: https://docs.wiseparts.ai/workspace/tasks --- Manage follow-ups ::: :::card --- icon: i-lucide-radar title: Prospecting to: https://docs.wiseparts.ai/prospecting/overview --- Discover new leads and convert them into prospects ::: :: # Segments Segments classify customers based on sales performance. Use them to prioritize visits, set goals, and identify your most valuable customers. ::callout{icon="i-lucide-zap"} **Quick Overview**: Create segment types with tiers (A, B, C), set sales thresholds using the recommended 80/15/5 split, and let the system automatically assign customers. Override with manual assignments when needed. :: ## How Segments Work Segments organize customers into tiers based on their sales contribution. The recommended setup follows the **ABC analysis** (Pareto principle): | Segment | % of Sales | Meaning | | ------- | ---------- | ----------------------------------------------------------- | | **A** | 80% | Your highest-value customers (typically \~20% of customers) | | **B** | 15% | Mid-tier customers | | **C** | 5% | Lower-volume customers (typically the majority) | This 80/15/5 split reflects the reality that a small number of customers usually generate most of your revenue. ::callout{icon="i-lucide-lightbulb"} **Tip**: Start with the ABC 80/15/5 setup. It's a proven approach that helps you focus on the customers that matter most. :: The system calculates each customer's share of total sales and assigns them to the appropriate tier. ### Automatic vs Manual - **Auto** β€” Calculated by the system based on sales thresholds - **Manual** β€” Assigned by a user, overrides automatic calculation Manual assignments take precedence. Clear the manual assignment to revert to automatic. ## Segment Types A segment type is a classification system. You might have multiple types: - **Sales Performance** β€” Based on total sales - **Visit Priority** β€” Determines visit frequency ### Managing Segment Types Navigate to **Customers > Segments** to view and manage segment types. Each type shows: - **Name** β€” The segment type name - **Type** β€” ID-based or VAT-based (for manufacturers) - **Default** β€” Whether this is the primary segment shown in lists - **Shared** β€” Whether manufacturers share this with wholesalers ::note Sharing segments is available on Enterprise accounts. :: ### Creating a Segment Type 1. Go to **Customers > Segments** 2. Click **+** to create a new type 3. Configure the settings: - **Name** β€” Descriptive name (e.g., "Sales Performance") - **Type** β€” How customers are identified (ID or VAT; VAT-based is for manufacturer accounts) - **Shared** β€” Share with connected organizations - **Default** β€” Use as the main segment in customer lists 4. Set constraints (optional): - **Branches** β€” Limit to specific branches - **Brands** β€” Limit to specific brand sales - **Minimum Net Sales** β€” Exclude customers below threshold 5. Configure calculation options: - **Timespan** β€” How many months of sales to consider - **Interval** β€” Rolling months or fixed year - **Notify** β€” Get notified when auto-assignment completes 6. Click **Save** ## Creating Segments After creating a segment type, add the individual segments (tiers). 1. Open a segment type 2. Click **Edit** to enter edit mode 3. Click **Add** to create a segment 4. Configure each segment: - **Name** β€” Tier name (e.g., "A", "B", "C") - **% Sales** β€” Sales threshold (recommended: 80/15/5) - **Visit Frequency** β€” Recommended days between visits - **Priority** β€” Order for scheduling/routing - **Default** β€” Fallback for new customers - **Exclude** β€” Exclude from auto-assignment ### Threshold Logic Thresholds represent the percentage of total sales each tier captures. With the recommended ABC setup: - A: 80% - B: 15% - C: 5% The system will: 1. Sort all customers by sales (highest first) 2. Assign customers contributing to the top 80% of sales to A 3. Assign customers contributing to the next 15% of sales to B 4. Assign the remaining customers (bottom 5% of sales) to C ::callout{icon="i-lucide-lightbulb"} **Tip**: Thresholds must total 100%. Drag segments to reorder their priority. :: ### Excluded Segments Mark a segment as **Excluded** to remove it from automatic calculations. Use this for: - Manually managed VIP customers - Customers under special contracts - Internal or test accounts Excluded segments have their threshold set to 0%. ## Auto-Assignment Run automatic segmentation to recalculate all customer segments based on current sales data. ### Running Auto-Assignment 1. Open a segment type (view mode, not edit) 2. Click **Auto Assign Segments** 3. Confirm the action 4. Wait for completion (runs in background) You'll be notified when the process completes (if notifications are enabled). ### When to Run Auto-assignment can be triggered manually from the segment settings page. Consider running auto-assignment: - Monthly or quarterly for routine updates - After significant data imports - When segment thresholds change - At the start of a new sales period ### Clear Manual Segments To reset all manual overrides and return to pure automatic assignment: 1. Open a segment type (view mode) 2. Click **Clear Manual Segments** 3. Confirm the action This removes all manual assignments, allowing the system to recalculate from scratch. ## Manual Overrides Override automatic assignments when needed: ### From Customer List 1. Go to the **Customers** list 2. Expand a customer row 3. Click the segment value 4. Select a new segment from the dropdown ### Clearing Overrides To remove a manual override and revert to automatic: 1. Open the segment dropdown 2. Select the blank/clear option The system will then use the automatically calculated segment. ## Using Segments Segments appear throughout the platform: ### Customer List The main customer list shows the default segment type. Hover over the segment to see: - Segment type name - Auto-assigned value - Manual override (if any) - Eligible sales amount ### Filtering Filter customers by segment in: - Customer list - Reports - Analytics dashboards - Activity planning When a segment type is scoped to manufacturer branches, filters cascade: choose **Segment type**, then **Manufacturer branch** (when applicable), then **Segment**. ### Visit Planning Segments drive visit frequency. Configure **Visit Every X Days** on each segment to: - Schedule more frequent visits for high-value customers - Reduce visits for inactive customers - Balance workload across your team ## Related Features ::card-group :::card --- icon: i-lucide-users title: Customer List to: https://docs.wiseparts.ai/customers/customer-list --- View and filter by segments ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Analyze sales by segment ::: :::card --- icon: i-lucide-map-pin title: Territory Management to: https://docs.wiseparts.ai/customers/territory-management --- Plan visits based on segments ::: :: # Contacts Contacts are the email addresses and phone numbers you use to reach your customers. The Contacts page gives you a single view of every contact across your wholesaler β€” attached to a customer, attached to a specific branch, or unattached. ::callout{icon="i-lucide-zap"} **Quick Overview**: Open **Contacts** from the main menu, search by value or by customer, and create or edit individual contacts inline. For large lists, use the bulk importer. :: --- ## What a Contact Is | Field | Notes | | --------------- | ------------------------------------------------------------------- | | **Type** | `email` or `phone` | | **Value** | The address or number (phones are normalized to international form) | | **Description** | A short label (e.g. "Accounts payable", "Warehouse manager") | | **Linked to** | A customer, a customer branch, or nothing (an unattached contact) | | **Creator** | The user who created the contact (from the UI or via the importer) | ::note Unattached contacts cover cases like a phone number that called you before you matched it to a customer, or a generic mailbox you want to keep on file. :: --- ## Finding a Contact Open the **Contacts** page from the main menu. The list shows the most recent contacts first. ### Search and Filters | Filter | What It Does | | --------------- | ------------------------------------------------------------------------------ | | **Type** | Show only emails or only phones | | **Contact** | Free-text search on the value or the linked customer's name / dms\_id | | **Customer** | Pick a specific customer or branch β€” narrows to contacts linked to that record | | **Description** | Free-text search on the description field | ::tip Phone search matches by the **end** of the number β€” useful when a customer reads back "ending in 4567". Email search matches anywhere in the address. :: --- ## Adding a Contact 1. Click **Create Contact** at the top of the list 2. Pick the **type** (email or phone) 3. Enter the **value** β€” emails are validated, phones are normalized to international form 4. Pick the **customer or branch** to link the contact to 5. Add a **description** (optional) 6. Click **Save** ::callout{icon="i-lucide-info"} The form always asks for a customer or branch. To add an unattached contact, use the bulk importer. :: --- ## Editing or Deleting Use the actions at the end of each row: - **Edit** β€” Change type, value, description, or who the contact is linked to - **Delete** β€” Removes the contact (soft delete; the system remembers it and can restore it on re-import) If you try to save a contact that matches one you previously deleted, you'll be prompted to **Restore** the old one instead of creating a duplicate. --- ## Bulk Import For more than a handful of contacts, use the importer. 1. Open the **Contacts** list 2. Click the import action and choose **Import contacts** 3. Upload a CSV with the columns below 4. Map columns, review, and run | Column | Required | What It Does | | ------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------- | | `type` | Yes | `email` or `phone` | | `value` | Yes | The address or number | | `description` | No | Free-text label | | `customer_dms_id` | No | Identifier from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) β€” links to a customer | | `customer_branch_dms_id` | No | When set, links to a specific branch under the referenced customer (requires `customer_dms_id`) | ### How Rows Resolve | Row pattern | Result | | ------------------------------------------------------- | ---------------------------------------- | | Both dms\_id columns empty | Unattached contact | | `customer_dms_id` matches a customer | Linked to that customer | | `customer_dms_id` + `customer_branch_dms_id` both match | Linked to that branch | | `customer_branch_dms_id` set but doesn't resolve | **Row is rejected** (no silent fallback) | ::tip{to="https://docs.wiseparts.ai/data/importers"} Download the template from the import wizard to see a working example for every row pattern. :: ### What Re-Importing Does The importer is idempotent. Re-running the same file: - Does nothing for rows that already exist - Updates the description if the file's value is different from what's stored - Restores a contact you previously deleted - Cleans up any unattached contact whose value gets linked to a customer You'll never end up with duplicates from re-importing. --- ## Permissions | Action | Required Permission | | ------------------ | ------------------------ | | View Contacts list | View customer contacts | | Create a contact | Create customer contacts | | Edit a contact | Update customer contacts | | Delete a contact | Delete customer contacts | --- ## Related Features ::card-group :::card --- icon: i-lucide-users title: Customer List to: https://docs.wiseparts.ai/customers/customer-list --- See contacts in context on each customer profile. ::: :::card --- icon: i-lucide-upload title: Importers to: https://docs.wiseparts.ai/data/importers --- Bulk-load contacts and other data from CSV files. ::: :::card --- icon: i-lucide-message-square title: Conversations to: https://docs.wiseparts.ai/communication --- Inbound messages create unattached contacts automatically. ::: :: # Territory Management Visualize your customers on a map and manage sales territory assignments. See coverage gaps, rebalance workloads, and reassign customers between salespeople. ::callout{icon="i-lucide-zap"} **Quick Overview**: Filter customers by team, salesperson, and sales volume. View them on a map and reassign to different salespeople as needed. :: ## Accessing Territory Management ::note Territory Management is accessed from the hub menu. It is not located under Customer Management directly -- it uses the segments system for customer classification. :: Navigate to **Customers Management** in the hub menu to open the territory management view. This feature requires: - Customers with valid GPS coordinates - Salespeople assigned to customers - Segments configured for customer classification ## Filtering Customers Before viewing the map, filter to the customers you want to see. ### Filter Options - **Team** β€” Select a sales team to focus on - **Salesmen** β€” Choose specific salespeople (or "No Salesman" for unassigned) - **Sales Threshold** β€” Filter by sales volume (≀ or β‰₯ a value) - **Brand** β€” Limit to customers purchasing specific brands - **Exclude Inactive** β€” Hide inactive customers ### Applying Filters 1. Select a **Team** (required) 2. Choose one or more **Salesmen** 3. Optionally set a sales threshold 4. Click **Submit** to load customers on the map Click **Clear** to reset all filters. ## Map View After applying filters, customers appear as markers on the map. ### Map Features - **Zoom** β€” Use controls or scroll to zoom in/out - **Pan** β€” Click and drag to move the map - **Fullscreen** β€” Expand to full screen for better visibility - **Clustering** β€” Nearby customers group together at lower zoom levels ### Customer Markers Click any marker to see customer details in the info panel: - **Name** β€” Customer name and business name - **Customer ID** β€” System identifier - **VAT** β€” Tax ID (if available) - **Assigned Salesmen** β€” Current salesperson assignments - **Status** β€” Active or inactive indicator ## Reassigning Customers Change which salesperson is assigned to a customer directly from the map. ### To Reassign 1. Click a customer marker on the map 2. In the info panel, find the salesperson row 3. Click the **edit** icon next to the salesperson 4. Select a new salesperson from the dropdown 5. Confirm the change The marker will update to reflect the new assignment. ::note Reassigning salesmen may be restricted if your organization's sync settings lock the salesman field. Check [Customers > General](https://docs.wiseparts.ai/customers/customer-settings) for sync configuration. :: ### Multiple Salespeople Some customers may have multiple salesperson assignments (Salesman 1, Salesman 2, etc.). Each can be edited independently. ### Unassigned Customers To find customers without a salesperson: 1. In the filter panel, check **No Salesman** 2. Click **Submit** 3. All unassigned customers appear on the map 4. Click each to assign a salesperson ## Salesman Stats Below the map, a stats panel shows the distribution of customers and sales across your selected salespeople. ### Stats Shown - **Salesperson Name** β€” The team member - **Customer Count** β€” Number of assigned customers - **Total Sales** β€” Combined sales value Use this to identify: - **Imbalances** β€” One person has too many or too few customers - **High-value territories** β€” Where the revenue is concentrated - **Coverage gaps** β€” Areas without adequate coverage ## Best Practices ### Territory Rebalancing When rebalancing territories: 1. Start with sales threshold filters to identify high/low value customers 2. Look for geographic clusters that could be served by one person 3. Consider travel efficiencyβ€”nearby customers should share a salesperson 4. Balance customer counts and total sales value across the team ### New Salesperson Onboarding When a new salesperson joins: 1. Filter to show customers currently assigned to others 2. Identify a geographic area for the new person 3. Reassign customers in that area 4. Use stats to ensure fair distribution ### Salesperson Departure When someone leaves the team: 1. Filter to show only their customers 2. Reassign each to remaining team members 3. Consider geography and workload balance ## Related Features ::card-group :::card --- icon: i-lucide-users title: Customer List to: https://docs.wiseparts.ai/customers/customer-list --- Browse and filter customers ::: :::card --- icon: i-lucide-user-cog title: Profile Details to: https://docs.wiseparts.ai/customers/customer-profile/ --- Manage salesman assignments ::: :::card --- icon: i-lucide-pie-chart title: Segments to: https://docs.wiseparts.ai/customers/segments --- Prioritize customers by segment ::: :::card --- icon: i-lucide-users-round title: Teams to: https://docs.wiseparts.ai/organization/teams --- Manage sales teams ::: :::card --- icon: i-lucide-route title: Traveller to: https://docs.wiseparts.ai/customers/traveller --- Plan optimized visit routes from your territories ::: :::card --- icon: i-lucide-map title: Territory Studio to: https://docs.wiseparts.ai/customers/territory-studio --- Design polygon territories with capacity analysis and coaching ::: :: # Territory Studio Territory Studio is the command centre for sales managers who need to shape where each rep works, who they visit, and how full their plate is. Draw territories on the map, let the system suggest them for you, resolve overlaps and gaps, and watch utilisation in real time. ::callout{icon="i-lucide-zap"} **Quick Overview**: Build polygon territories on an interactive map, assign them to sales reps, and use built-in capacity analysis and coaching to keep workloads balanced and coverage tight. :: ::note Territory Studio must be enabled for your organisation. If you don't see it in the menu, it hasn't been turned on yet. :: ## The Studio Layout Open Territory Studio from the **Customers** area of the hub menu. The workspace is organised into three zones: | Zone | Purpose | | ---------------- | --------------------------------------------------------------------------------------------------------- | | **Left sidebar** | Team selector, filter presets, roster of sales reps with inline capacity bars, and an Unassigned shortcut | | **Central map** | Interactive map with territory polygons and customer markers | | **Right rail** | Toggle between Capacity Analysis, Assignments, Coach, and the analytical Unassigned panel | Each territory is drawn in the colour of its assigned rep. Customers appear as markers coloured to match their rep β€” unassigned customers stand out in red, and outliers (customers far from their rep's main cluster) are marked with a dashed ring. ::tip Zoom out to see customers clustered into counts; zoom in to see each pin individually. The map switches automatically when you pass around 1,500 visible customers to keep things responsive. :: --- ## Creating Territories There are three ways to start a territory. ### Draw it yourself 1. Click **Draw Territory** in the left sidebar 2. Click on the map to place each corner of the polygon 3. Close the shape by clicking the first point again 4. Pick a name, colour, and assigned rep, then **Save** Use freehand clicks for rough shapes or place corners carefully for precise boundaries. ### Auto-build from customer clusters Click **Auto Build** to let the system generate polygons that group each rep's existing customers. | Setting | What it does | | -------------------- | ------------------------------------------------ | | **Buffer (km)** | How much padding to add around customer clusters | | **Include branches** | Include customer branches alongside head offices | | **Reps to include** | Pick specific team members or all reps | Preview the suggested shapes before accepting β€” you can still fine-tune them afterwards. ### Auto-build for a single rep Open a rep's panel from the sidebar and click **Auto-build for Rep**. This is useful when onboarding a new team member or redrawing coverage for one person without touching the rest of the team. ::tip Start with Auto Build to get a sensible baseline, then edit individual territories where you know the business better than the algorithm. :: --- ## Editing Territories Click a territory polygon on the map to select it. Enter edit mode to: - Drag corner points to reshape the boundary - Add or remove corners - Change the assigned rep - Rename the territory or change its colour ### Review Changes Before saving edits, the **Review Changes** panel shows a before-and-after comparison: | Metric | Before | After | | ---------------- | ---------------------- | ------------------------ | | Customers inside | Count at start of edit | Count after your changes | | 12-month sales | Revenue at start | Revenue after | This makes it easy to see whether a reshape is moving meaningful revenue or just cleaning up a boundary. --- ## Assigning Sales Reps Click a rep's name in the sidebar to open the **Rep Panel** on the right. You'll see: - **Utilisation** β€” how full their visit schedule is, as a percentage of monthly capacity - **12-month sales** β€” total revenue from their customers - **Customer count** β€” how many accounts they cover - **Territory history** β€” every saved version of their territory, with revert buttons For a rep without a territory, the panel offers quick actions: **Create Territory** (opens the draw tool) or **Auto-build for Rep**. ::tip The rep list in the left sidebar shows each rep with a mini capacity bar and percentage next to their name β€” a quick way to spot over- or under-loaded reps without opening the full panel. :: ### Moving Customers Between Reps Click any customer marker on the map to open a popup with options to: - Reassign the customer to a different rep - Unassign them completely - See their recent sales and last visit Changes take effect immediately and the marker recolours to match the new rep. --- ## Capacity Analysis Open the **Capacity Analysis** panel from the right rail to see your team's workload at a glance. Each rep appears in a table showing: | Column | Meaning | | --------------- | --------------------------------------------------------- | | **Customers** | Accounts currently assigned | | **12M sales** | Revenue over the last 12 months | | **Utilisation** | Required visits as a percentage of their monthly capacity | Utilisation is colour-coded: blue for under-covered reps with spare capacity, red for over-loaded reps who can't realistically cover their book. ### Capacity Defaults Click **Capacity Defaults** to configure the numbers behind utilisation: | Setting | Description | Default | | ----------------------------- | ----------------------------------------------------------------------- | ------- | | **Visits per day** | Target customer visits in a working day | 8 | | **Working days per month** | Effective selling days per month | 22 | | **Fallback visit frequency** | How often to visit a customer without a segment | 30 days | | **Segment visit frequencies** | Per-segment visit cadence (A-segment weekly, C-segment quarterly, etc.) | | Changes apply to the whole team's capacity calculations. --- ## Smart Assignments The **Assignments** panel is a single triage surface for anything that needs rep attention. Three filter chips let you focus on a specific problem or mix them: | Chip | What it covers | | -------------- | ---------------------------------------------------------------------------- | | **Overlap** | Customers that two or more territories claim | | **Gap** | Customers inside a territory but wrongly assigned (or unassigned within one) | | **Unassigned** | Customers with no rep at all | Chips are multi-select β€” all three are on by default. Toggle any off to narrow your focus, or click again to re-enable. Turn all three off and they snap back to all-on. ### Suggesting and Accepting Click **Suggest assignments** to generate a plan for every row in view. Review each proposal individually, or click **Accept all** to apply every visible suggestion at once. While in review, tapping any chip returns you to the queue view. Suggestions use one of two rules: ::tabs :::tabs-item{label="Closest rep centroid"} Assign each customer to the rep whose territory centre is nearest. Good for clean geographic balancing when territories are well-shaped. ::: :::tabs-item{label="Owner priority"} Keep customers with whoever already has them in the source system. Falls back to nearest centroid when there's no existing owner. Good when you want to minimise disruption. ::: :: --- ## Bulk Operations When you need to move many customers at once, use the filter-and-apply flow from the sidebar. ### Filter the Working Set Use preset chips for common filters: - **Unassigned** β€” customers with no rep - **Stale 90 days** β€” customers with no visit in the last 90 days Open the **Customer Filters** dialog for more control: prospect stage, sales thresholds, visit recency, specific rep, and more. ### Preview Before Applying Every bulk action goes through a preview step so you can see the impact before it's permanent: | Action | What it does | | --------------- | ------------------------------------------------------------------ | | **Assign** | Move all matching customers to a chosen rep | | **Auto-assign** | Move each customer to whichever territory polygon they fall inside | | **Unassign** | Clear the assigned rep from each customer | The preview shows how many customers will move, which reps will gain or lose accounts, and which rows will be skipped (missing coordinates, conflicts, or other issues). ::caution Bulk operations on more than 5,000 customers aren't allowed in one go. Narrow your filters first. Jobs between 1,000 and 5,000 customers run in the background β€” you'll see a notification when they finish. :: --- ## Coach Recommendations The **Coach** panel proactively surfaces things that need attention. | Recommendation | What it means | Colour | | ------------------- | ---------------------------------------------------- | ------ | | **Cover gap** | Cluster of customers with no territory covering them | Purple | | **Under covered** | Rep has significant spare capacity | Blue | | **Over loaded** | Rep can't realistically visit all their customers | Red | | **Resolve overlap** | Multiple territories claim the same customers | Amber | Click any recommendation to zoom the map to the affected area and jump straight into the relevant tool (assignments, conflicts, or rep panel). --- ## Unassigned Panel Click the **Unassigned** row at the bottom of the rep list to open the analytical unassigned panel. It's a diagnostic view β€” no buttons, no bulk actions β€” designed to help you see *where* the unassigned customers sit before acting on them: - **Summary** of how many unassigned customers are inside vs. outside existing territories, with total sales at stake - **Breakdown by containing territory** β€” nested per-rep rows under "Inside a territory" show how many unassigned customers fall inside each rep's polygon, so you can spot which rep "should" own them - **Drill-down list** of customers in the selected bucket, clickable to focus them on the map When you're ready to act, switch to the **Assignments** panel β€” it carries the same Unassigned bucket as a filter chip. --- ## Version History Every save creates a snapshot of the territory's shape. Open a territory and click **Version History** to see: - Who saved each version, and when - A short note describing what changed - A **Revert** button to restore any previous version Reverting creates a new version rather than deleting the current one β€” your full history stays intact. --- ## Templates Turn a well-designed territory into a reusable **template** by toggling the template flag. Templates appear in a dedicated list when creating new territories and let you clone a proven shape for a new team member or region. --- ## Best Practices ### Starting Fresh 1. Select the team you want to plan for 2. Run **Auto Build** to get a baseline based on current customer distribution 3. Open **Coach** and resolve the biggest overlaps and gaps 4. Review **Capacity Analysis** to spot reps who are clearly over- or under-loaded 5. Fine-tune boundaries by hand where local knowledge matters ### Onboarding a New Rep 1. Use **Auto-build for Rep** or draw a territory covering the area they'll own 2. Move customers into it using bulk **Assign** with a geographic filter 3. Check their utilisation is in a reasonable range (typically 70-90%) ### Offboarding a Rep 1. Open the departing rep's panel to see every customer they own 2. Use **Suggest Assignments** with the "closest rep centroid" rule to redistribute 3. Review the plan and adjust any customers you'd rather keep with a specific person 4. Apply, then delete the rep's old territory ### Seasonal Rebalancing 1. Run **Coach** to spot recent imbalances (utilisation drifts as sales shift) 2. Use **Review Changes** when reshaping borders β€” it tells you exactly how much revenue is moving 3. Save versions frequently so you can roll back if a change doesn't land well --- ## Related Features ::card-group :::card --- icon: i-lucide-map-pin title: Territory Management to: https://docs.wiseparts.ai/customers/territory-management --- Classic map-based customer reassignment view ::: :::card --- icon: i-lucide-route title: Traveller to: https://docs.wiseparts.ai/customers/traveller --- Plan optimised visit routes inside each territory ::: :::card --- icon: i-lucide-users title: Customer List to: https://docs.wiseparts.ai/customers/customer-list --- Browse and filter customers by assignment ::: :::card --- icon: i-lucide-pie-chart title: Segments to: https://docs.wiseparts.ai/customers/segments --- Define visit cadence per customer segment ::: :::card --- icon: i-lucide-users-round title: Teams to: https://docs.wiseparts.ai/organization/teams --- Organise reps into sales teams ::: :: # Traveller Build optimized visit plans for your sales territory. The Traveller wizard guides you through four steps: set up your schedule, draw areas on the map, calculate the best routes, and save everything to your calendar. ::callout{icon="i-lucide-zap"} **Quick Overview**: Plan multi-day customer visits by drawing service areas, letting the system rank customers by urgency and sales trends, then generating optimized driving routes. :: ::note Traveller must be enabled for your organization. If you don't see it in the menu, it may not be enabled on your plan. :: ## Getting Started Navigate to **Traveller** from the main menu. The wizard has four steps shown as an accordion on the left, with an interactive map on the right. --- ## Step 1: Planning Setup Configure the basic parameters for your route plan. ### Select a Salesperson Choose which salesperson to plan routes for. Managers can plan on behalf of team members. ### Choose Planning Days Use the calendar to select which days to include in the plan. Quick shortcuts help select common ranges like "This week" or "Next 5 days". ::warning If selected days already have planned visits, you'll see a warning. Existing visits won't be removed automatically. :: ### Set Departure & Arrival Points Define where the salesperson starts and ends each day: - **Drop a pin** on the map - **Search** for an address - **Use a saved pair** from previous plans Enable **linked anchors** to make the arrival point match the departure (round trip back home). You can save frequently used departure/arrival pairs with a name for quick reuse. ### Visit Windows & Capacity | Setting | Description | Default | | ----------------- | ---------------------------------------------------------- | ----------- | | **Visit windows** | Time ranges when visits can happen (supports lunch breaks) | 09:00–18:00 | | **Dwell time** | Average minutes spent per customer visit | 30 min | | **Daily cap** | Maximum customers to visit per day | 10 | --- ## Step 2: Area Assignments Draw geographic service areas and assign planning days to them. ### Draw Areas on the Map Use the drawing tools to create areas: - **Polygon mode** β€” click to place corners, press Enter to finish - **Freehand mode** β€” draw smooth shapes with your mouse Each area gets a unique color. Click an area name to rename it. ### Assign Days to Areas Drag planning day cards onto areas to assign them. One day can cover multiple areas, and one area can span multiple days. The system shows how many eligible customers fall within each area. ### Smart Suggestions Click **Smart territory** to let the system auto-generate balanced areas based on customer locations. This is a great starting point β€” you can adjust the suggested areas manually afterward. ::callout{icon="i-lucide-lightbulb"} **Tip**: Start with smart suggestions, then fine-tune the areas. This saves time while keeping you in control. :: ### Customers Outside Areas A panel shows customers that don't fall within any drawn area. You can expand your areas to include them or leave them for a future plan. --- ## Step 3: Calculate Routes The system ranks customers and builds optimal driving routes. ### Customer Ranking Two factors determine which customers are prioritized: | Factor | What It Measures | | ----------------- | ------------------------------------------------------------------------- | | **Visit cadence** | How overdue the customer is for a visit based on their expected frequency | | **Sales trend** | Recent purchasing changes β€” declining customers get higher priority | Use the **priority slider** to adjust the balance between these factors. ### Scheduled vs. Available Customers - **Scheduled** β€” customers selected for the route (up to the daily cap) - **Available** β€” ranked customers that didn't fit, which you can swap in manually ### Route Modes Choose how the multi-day plan is structured: ::tabs :::tabs-item{label="Day-by-Day"} Return to your departure point each evening. Best for sales reps who go home every night. Each day is routed independently. ::: :::tabs-item{label="Span"} Continue from where you end each day β€” a continuous multi-day journey. Best for large territories that require overnight stays. ::: :: ### Cost Comparison The system compares both modes side by side: | Metric | Day-by-Day | Span | | ------------------ | --------------------------- | ------------------------ | | **Total distance** | Higher (daily return trips) | Lower (no backtracking) | | **Hotel costs** | None | Per overnight stay | | **Total cost** | Distance only | Distance + accommodation | This helps you pick the most cost-effective approach for each plan. --- ## Step 4: Review & Save Review the complete plan before saving it to your calendar. ### Route Summary | Stat | Description | | ------------------ | ------------------------------- | | **Planning days** | Number of days covered | | **Total stops** | Customer visits across all days | | **Total distance** | Kilometers to drive | | **Driving time** | Estimated time on the road | ### Calendar Preview See all planned visits on a calendar view with scheduled times and customer names. You can make manual adjustments β€” reorder stops, swap customers, or change times β€” before saving. ### Save to Calendar Click **Save** to create Planned Visit activities for each stop. Every visit is linked to the assigned customer with the optimized start and end times. ::tip{to="https://docs.wiseparts.ai/workspace/schedule"} View your planned visits on the schedule calendar. :: --- ## Saved Preferences Traveller remembers your settings between sessions, including priority weights, dwell time, daily cap, and saved departure/arrival pairs. --- ## Related Features ::card-group :::card --- icon: i-lucide-calendar title: Schedule to: https://docs.wiseparts.ai/workspace/schedule --- View planned visits on your calendar ::: :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Manage visit activities and forms ::: :::card --- icon: i-lucide-map title: Territory Studio to: https://docs.wiseparts.ai/customers/territory-studio --- Design sales territories with capacity analysis and coaching ::: :::card --- icon: i-lucide-map-pin title: Territory Management to: https://docs.wiseparts.ai/customers/territory-management --- Visualize customer territories on a map ::: :::card --- icon: i-lucide-pie-chart title: Segments to: https://docs.wiseparts.ai/customers/segments --- Prioritize customers by segment ::: :::card --- icon: i-lucide-radar title: Prospecting to: https://docs.wiseparts.ai/prospecting/route-planning --- Include new leads in your planned routes ::: :: # Settings Control how customers are displayed, who can access them, and how salesman assignments sync. ::callout{icon="i-lucide-zap"} **Quick Overview**: Control what sales reps can see, manage salesman sync behavior, and set data export permissions. :: ## Visibility Rules | Setting | Description | | ------------------------------------------------ | --------------------------------------------------------- | | **Sales rep can see all customers** | View the full customer list regardless of assignment | | **Sales rep can see customers without salesman** | View unassigned customers | | **Sales rep can see all sales** | View sales data for all customers, not just assigned ones | ## Data Permissions | Setting | Description | | --------------------------------------------- | ------------------------------------- | | **Sales rep can update customer coordinates** | Allow GPS location corrections | | **Allow customers export** | Enable CSV export from customer lists | ## Prospect Settings | Setting | Description | | ------------------------- | ---------------------------------------------- | | **Prospect VAT required** | Require VAT number when creating new prospects | ## Salesman Assignment | Setting | Description | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | **Allow multiple salesman IDs** | Support up to 3 salesmen per customer (requires [source system](https://docs.wiseparts.ai/getting-started/data-integrations) support) | ### Salesman Sync This setting controls whether salesmen assignments can be edited manually in WiseParts or if they are managed exclusively through integrations (e.g., file imports). When sync is enabled, manual edits to salesmen fields will be overwritten on the next import. For each salesman slot, configure how changes propagate: | Option | Description | | --------------------------------------- | ---------------------------------------------------------------------------------------- | | **Sync between customers and branches** | Changes to customer assignments automatically update branch assignments (and vice versa) | | **Allow manual update** | Users can manually change salesman assignments | --- ## Related Settings ::card-group :::card --- icon: i-lucide-route title: Visit Routes to: https://docs.wiseparts.ai/customers/customer-profile/routes --- Plan optimized visit sequences. ::: :::card --- icon: i-lucide-tag title: Categories to: https://docs.wiseparts.ai/customers/categories --- Classify customers with custom tags. ::: :: # Categories Group customers by business type or custom criteria. ::callout{icon="i-lucide-zap"} **Quick Overview**: Categories let you tag customers with custom labels like industry, tier, or region. Use them to organize and filter your customer base. :: ## Category Types Define categories like: - Industry (Automotive, Retail) - Tier (Premium, Standard) - Region (North, South) ## Managing Categories Navigate to **Customers > Categories** to: 1. Create category types 2. Add categories within each type 3. Configure display options ## Using Categories Assign categories from customer profiles to unlock these capabilities: | Use Case | Description | | ---------------- | ------------------------------------------------- | | **Organization** | Structure your customer base by business criteria | | **Filtering** | Narrow down customer lists by category | Categories can also be imported via file uploads, not just created manually. # Custom Fields Define custom fields to capture organization-specific data on customer profiles. ::callout{icon="i-lucide-zap"} **Quick Overview**: Create fields for any data your business needs to track β€” industry attributes, external IDs, compliance info. Fields can be text, numbers, dates, dropdowns, or checkboxes. :: ## Creating a Custom Field 1. Navigate to **Features > Custom Fields** 2. Click **Add Field** 3. Configure the field settings 4. Save | Setting | Description | | ---------------------- | ---------------------------------------------------------------------------------------------------- | | **Name** | Field label shown on profiles | | **Type** | Data type (text, number, date, dropdown, checkbox, multi-select) | | **Hint** | Help text shown when users fill the field | | **Required** | Whether the field must have a value | | **Read only** | When enabled, users cannot edit the value on profiles β€” imports and integrations can still update it | | **Removable** | Whether users can clear the field from a submission | | **Discard when empty** | Do not save the field when left blank | ## Field Types | Type | Use Case | | ---------------- | ------------------------------------------------- | | **Text** | Free-form entry (names, IDs, notes) | | **Number** | Numeric values (fleet size, square footage) | | **Date** | Date picker (certification expiry, contract date) | | **Dropdown** | Single selection from predefined options | | **Checkbox** | Yes/no toggle | | **Multi-select** | Multiple selections from predefined options | ## Dropdown Options For dropdown and multi-select fields, define the available options: 1. Select **Dropdown** or **Multi-select** as the type 2. Add options in the **Choices** section 3. Set a default value if needed ## Field Order Drag fields to reorder how they appear on customer profiles. ## Integration Sync Custom fields can be populated automatically from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). Map external data columns to custom fields during integration setup. ## Using Custom Fields Once configured, custom fields: - Appear on customer profiles in the Custom Fields section - Are included in customer exports - Can appear as optional columns in [Analytics 360](https://docs.wiseparts.ai/sales/analytics-360) when customers or branches are in scope --- ## Related ::card-group :::card --- icon: i-lucide-user title: Custom Fields on Profiles to: https://docs.wiseparts.ai/customers/customer-profile/custom-fields --- How custom fields appear on customer profiles. ::: :::card --- icon: i-lucide-plug title: Data Integrations to: https://docs.wiseparts.ai/getting-started/data-integrations --- Sync custom fields from external systems. ::: :: # Quotes Quotes are price proposals you create for customers. Depending on your setup, you can build quotes with real-time product search and pricing from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations), or create them manually with free-text line items. ::note Available quote features depend on your active integrations. Some organizations use real-time product search while others use manual entry. :: ::callout{icon="i-lucide-zap"} **Quick Overview**: Create quotes with integrated or manual line items, share them for customer approval via email, WhatsApp, or a secure link, and convert accepted quotes to orders. :: ## Viewing Quotes Access quotes from **Quotes** in the menu or from a customer profile's **Quotes** tab. | Column | Description | | ------------ | ------------------------------------- | | **ID** | Unique quote identifier | | **Status** | Current workflow status | | **Customer** | Customer name (click to open profile) | | **Info** | Plate, VIN, brand, or requester | | **Ordered** | Badge if converted to order | Filter by date range, status, customer, brand, or user. --- ## Creating a Quote Click **New order** from the menu, or **New Quote** from a customer profile. ### Header Fields | Field | Description | | ---------------- | ----------------------------------------- | | **Customer** | Auto-filled from profile, or search by ID | | **Branch** | Select if customer has multiple locations | | **Plate / VIN** | Vehicle identification | | **Request #** | Optional reference number | | **Requested by** | Person who requested the quote | | **Channel** | How the request came in | | **Contact** | Customer contact for this quote | | **Observation** | Internal notes | ### Adding Lines β€” Integrated Mode When your organization has a product integration, each line fetches real-time data: 1. Enter the **Reference** (part number) and press Tab 2. The system fetches pricing and stock from your source system 3. Adjust **Quantity** as needed 4. Select **Warehouse** if multiple available 5. Choose **Order Type** (standard, urgent, etc.) | Column | Description | | --------------- | ----------------------- | | **Reference** | Part number | | **Description** | Part name (auto-filled) | | **Stock** | Available quantity | | **Qty** | Requested quantity | | **Gross** | List price | | **Net** | Price after discount | ::callout{icon="i-lucide-info"} A green dot indicates real-time data. Prices and stock update as you add lines, so customers always see accurate availability. :: ### Adding Lines β€” Manual Mode When using manual entry, you type the line details directly: 1. Enter a **Reference** or description in free text 2. Set the **Quantity** and **Price** manually 3. Add as many lines as needed This mode is useful when products are not managed in a source system or when creating quick proposals. ### Discounts Apply discounts to individual lines. If enabled, special discounts may require manager approval before the quote can be finalized. ### Saving - **Save as Quote** β€” Saves the proposal for sharing with the customer - **Save as Order** β€” Sends directly to your source system as a confirmed order --- ## Sharing Quotes Share quotes with customers for review and approval. | Method | Action | | ------------- | ---------------------------------------- | | **Email** | Sends quote details with acceptance link | | **SMS** | Sends link to view and approve | | **WhatsApp** | Sends formatted message with link | | **Copy Link** | Copies public URL to clipboard | When you share by WhatsApp or SMS, WiseParts can open [Conversations](https://docs.wiseparts.ai/communication/conversations#sharing-quotes-and-orders-in-the-thread) to deliver the quote in the customer's thread using a channel template β€” including WhatsApp templates with an **Order** button for one-tap acceptance. ### Email Sharing 1. Click **Share** on a quote 2. Select **Share by Email** 3. Choose email type (New Quote, Quote Recovery, etc.) 4. Verify recipient and add CC if needed 5. Preview and click **Send** The customer receives a link to the **Customer Portal** where they can interact with the quote. --- ## Customer Portal When customers click the quote link, they access a secure portal without needing to log in. From there they can: - **View the quote** β€” See all line items, prices, totals, and **shipping** when a carrier was selected in the builder - **Approve or reject** β€” Accept the entire quote or decline it - **Approve/reject individual lines** β€” Accept some items while rejecting others - **Add comments** β€” Leave notes or questions about specific items ::callout{icon="i-lucide-info"} Customers can partially approve quotes β€” accepting available items while rejecting others. You'll see which lines were approved and can follow up on the rejected ones. :: ::tip{to="https://docs.wiseparts.ai/automations/getting-started"} Set up automations to send follow-ups automatically when quotes are pending, or notify your team when customers approve or reject. :: --- ## Quote Statuses | Status | Meaning | | --------------------- | ------------------------- | | **Pending** | Draft, not yet shared | | **Pending Approval** | Shared, awaiting response | | **Customer Approved** | Customer accepted | | **Customer Rejected** | Customer declined | | **Ordered** | Converted to order | | **Cancelled** | Cancelled by user | Status changes automatically when: - Sharing sets **Pending Approval** - Customer clicking approve sets **Customer Approved** - Converting to order sets **Ordered** --- ## Tips - **Keyboard navigation** β€” Use Tab to move between fields - **Paste multiple lines** β€” Copy from a spreadsheet and paste into the reference field - **History panel** β€” Toggle Logs and Events to see quote activity --- ## General Settings | Setting | Description | | ------------------ | ------------------------------------------------------------------------ | | **Reject Reasons** | Define rejection reasons customers can select when declining quote lines | --- ## Warehouses & Orders ### Order Types Define the types of orders your team can create and their behaviors. | Field | Description | | ------------------------ | ----------------------------------------------------------------------------------------------------------- | | **Value** | Order type identifier | | **Type of Order** | Classification for [source system](https://docs.wiseparts.ai/getting-started/data-integrations) integration | | **Read Only** | Orders cannot be edited after creation | | **Available Stock Only** | Only allow items currently in stock | | **Use Stock Price** | Use warehouse stock price instead of customer pricing | | **Brand** | Restrict to a specific brand | | **Branch** | Restrict to a specific warehouse | | **Description** | Customer-facing description | | **Default** | Use as the default order type | | **Active** | Enable or disable the type | ::note Updates to order types can affect shared and active quotes. Types currently in use cannot be deleted. :: ### Brands Restrictions by Warehouse Define which brands each warehouse can fulfill. When an order contains items from a specific brand, only linked warehouses are eligible. ### Routes Restrictions by Warehouse Link warehouses to customer routes for geographic distribution. Orders from customers on specific routes are directed to linked warehouses. ### Warehouse Priority Configure the order in which warehouses are considered for automatic fulfillment. **Default Priority**: Drag and drop warehouses to set their order. Toggle "Shipping Warehouse" to include/exclude from automatic fulfillment. **Additional Priority Rules**: Create custom rules that override the default priority for specific conditions (routes, brands, customers). ::callout{icon="i-lucide-info"} Only warehouses marked as "Shipping Warehouse" are considered for automatic fulfillment. Stock in other warehouses requires manual selection. :: ### Warehouse Transfers | Setting | Description | | -------------------------------------- | -------------------------------------------------- | | **Warehouse transfer support enabled** | Enable inter-warehouse transfers | | **Transfer restrictions** | Define which warehouses can transfer to each other | --- ## Order Constraints ### Field Requirements Control which fields are required when creating orders: | Setting | Description | | ----------------------------- | --------------------------------------------------------------------- | | **Vehicle Plate Required** | Require vehicle plate number | | **Vehicle Plate Pattern** | Regex pattern for plate validation (e.g., `/^\d{2}-[A-Z]{2}-\d{2}$/`) | | **VIN Required** | Require Vehicle Identification Number | | **VIN Pattern** | Regex pattern for VIN validation | | **Request Number Required** | Require a request/reference number | | **Request Number Pattern** | Regex pattern for request number | | **Requested By Required** | Require the requester's information | | **Requested By Pattern** | Regex pattern (e.g., email format) | | **Contact Required** | Require contact information | | **Delivery Address Required** | Require delivery address when available | ### Order Behavior | Setting | Description | | ------------------------------------ | ----------------------------------------- | | **Allow Full Shipment** | Enable the full shipment option | | **Share References** | Enable reference sharing between orders | | **Public sharing enabled** | Allow public sharing of order links | | **Enable Routes Selection** | Allow manual selection of delivery routes | | **Enable Automatic Route Selection** | Auto-assign routes based on configuration | ### Fulfillment Strategies | Setting | Description | | ---------------------------------------- | --------------------------------------- | | **Stock fulfilment strategy** | How stock is selected for orders | | **Default warehouse selection strategy** | How the default warehouse is chosen | | **Strategy for displaying warehouses** | How warehouses appear in product search | ### Validation & Workflow | Setting | Description | | ------------------------------------- | ---------------------------------------------------------------- | | **Customer order validation enabled** | Require validation before processing | | **Customer order rejection enabled** | Allow customers to reject orders | | **Order value validation threshold** | Order amount above which validation is required (creates a task) | | **Order lines limit** | Number of lines above which orders are queued for processing | | **Customer order failure handling** | How failed orders are handled in backoffice | When enabled, customers receive a secure link (magic link) to a quote portal where they can review, accept, or reject quotes β€” potentially resulting in automatic order creation in your source system without manual intervention. ### Task Automation When certain order events occur, the system can automatically create tasks: | Setting | Description | | ------------------------------- | ------------------------------------------- | | **Approved lines task type** | Task created when order lines are approved | | **Rejected lines task type** | Task created when lines are rejected | | **Failed lines task type** | Task created when order processing fails | | **Discount approval task type** | Task created for discount approval requests | ### Discounts | Setting | Description | | ------------------------------- | --------------------------------------------------------------------------- | | **Discounts** | Control how discounts are handled (requires approval, freely allowed, etc.) | | **Discount approval task type** | Task type for discount approval workflow | When discount approval is enabled, a manager receives a task to approve or reject the discount before the quote can be sent with the adjusted value. ### Integration Settings | Setting | Description | | ------------------------------------ | ------------------------------------------------------------------------------------------------------------ | | **Enable source system integration** | Enable direct [source system](https://docs.wiseparts.ai/getting-started/data-integrations) order integration | | **User restriction** | Limit source system integration to specific users | | **Default customer ID** | Customer identifier used for quick queries without a selected customer | --- ## How Warehouse Selection Works When creating an order, the system suggests a warehouse based on: 1. **Additional priority rules** β€” Custom rules are evaluated first 2. **Default warehouse priority** β€” Standard warehouse order 3. **Brand restrictions** β€” Only warehouses linked to ordered brands 4. **Route restrictions** β€” Only warehouses serving the customer's route 5. **Stock availability** β€” Warehouses with available stock 6. **User team preferences** β€” Team-based warehouse preferences --- ## Related Features ::card-group :::card --- icon: i-lucide-shopping-cart title: Orders to: https://docs.wiseparts.ai/sales/orders --- Confirmed purchases ::: :::card --- icon: i-lucide-message-square title: Conversations to: https://docs.wiseparts.ai/communication/conversations --- Follow up via email or WhatsApp ::: :::card --- icon: i-lucide-user title: Customer Profile to: https://docs.wiseparts.ai/customers/customer-profile/ --- View customer order history and set customer-specific constraints. ::: :::card --- icon: i-lucide-route title: Visit Routes to: https://docs.wiseparts.ai/customers/customer-profile/routes --- Plan optimized visit sequences. ::: :::card --- icon: i-lucide-building title: Branches to: https://docs.wiseparts.ai/organization/branches --- Manage warehouse/branch settings. ::: :::card --- icon: i-lucide-list-checks title: Task Types to: https://docs.wiseparts.ai/workspace/tasks --- Configure task types for order workflows. ::: :: # Orders Orders are confirmed purchases sent to your source system. They can originate from converted quotes or be created directly. ::note Order data and push behaviour depend on active integrations with your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). :: ::callout{icon="i-lucide-zap"} **Quick Overview**: Build orders in the quote builder, choose delivery and payment when your integration supports them, push to your source system, and track status from the order list or customer profile. :: ## Viewing Orders Access orders from **Orders** in the menu or from a customer profile's **Orders** tab. | Column | Description | | ------------- | ------------------------- | | **Order ID** | Unique identifier | | **Date** | When the order was placed | | **Status** | Current order status | | **Total** | Order value | | **Warehouse** | Fulfillment location | Click any order to expand and see line items with product details, quantities, prices, and delivery status. ### Filtering Narrow by: - Date range - Warehouse - Brand - Status ::callout{icon="i-lucide-lightbulb"} **Tip**: Use the brand filter to quickly see if a customer has ordered a specific product line before. Great for "Have you tried our new X?" conversations. :: ## Creating Orders ### From a Quote 1. Create and share a quote 2. Customer approves 3. Open the quote and click **Save as Order** 4. The order is sent to your source system ### Direct Order From the quote builder, click **Save as Order** instead of **Save as Quote** to skip the approval workflow. ::callout{icon="i-lucide-info"} **Did you know?** Direct orders bypass customer approval. Use this for phone orders where the customer has already confirmed verbally. :: ### From Conversations When **Orders** is enabled, open a conversation and click **Create order** in the details panel. If the contact is not linked to a customer yet, WiseParts creates a prospect first, then opens the quote builder with the conversation channel pre-filled. See [Conversations](https://docs.wiseparts.ai/communication/conversations#quotes-and-orders-from-conversations). ## Delivery and Payment When your source system exposes carriers or payment modules, a **Delivery** section appears in the quote builder before you save or push the order. | Option | Description | | ------------------- | -------------------------------------------------------------------------------- | | **Route / carrier** | Per warehouse, pick from available routes. Cutoff times appear when configured. | | **Payment** | Choose a payment method when your integration lists options. | | **Full shipment** | When enabled for your organization, request shipping everything in one shipment. | Selected carrier shipping appears as its own line in the order summary. The same shipping total is shown on the **public order and quote views** customers open from share links. ::note If no routes or payment methods appear, your integration may not expose them yet, or carriers may not be mapped to warehouses yet. See [Integrations](https://docs.wiseparts.ai/data/integrations). :: ## Order Lines ### Catalogue lines With a product integration, enter a reference to fetch live price and stock. Adjust quantity, warehouse, and order type per line. ### Manual (operator-priced) lines Some integrations support **manual lines** β€” free-text references with prices you enter instead of catalogue parts. Taxes follow the price you set. Your organization may cap how many manual lines a single order can contain. When the source system recalculates prices on push, **price pinning** settings (configured on the integration) control whether your entered prices are preserved so the push is not rejected for total mismatches. ## Order Types Order types are configurable by your organization. They define categories like standard orders, urgent orders, or classifications your source system expects (**type of order** when the integration supports it). Select order type per line when creating quotes or orders. ## Order Channels Track how orders originated: | Channel | Source | | ---------- | ------------------------ | | **Phone** | Call center order | | **Email** | Email request | | **Web** | Online portal | | **Shop** | In-store purchase | | **Social** | WhatsApp or social media | Channels help analyze sales performance by origin. Orders started from Conversations inherit the conversation channel. ## Sharing and Public Views Share quotes and orders by email, SMS, WhatsApp, or copy link from the quote or order screen. When you share by WhatsApp or SMS and conversation senders are configured, WiseParts opens [Conversations](https://docs.wiseparts.ai/communication/conversations#sharing-quotes-and-orders-in-the-thread) so you can pick the thread and send with a template. Email and copy-link sharing work from the order directly. Customers opening a public link see line items, totals, and **shipping** when a carrier was selected. They can approve, reject, or partially approve depending on your workflow settings. ### Quote recovery For pending quotes, use **quote recovery** share types (email or SMS) to send a follow-up with the acceptance link. ## Failed Pushes and Logs If pushing to your source system fails, the order remains in WiseParts with details in the **Logs** panel. Fix lines, delivery, or payment selections and retry. Integration-specific recovery options (for example re-submitting after a partial push) depend on your connector β€” see [Integrations](https://docs.wiseparts.ai/data/integrations). ## Data Source Orders sync from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). Use **Sync** on the customer profile to refresh order data. ::tip{to="https://docs.wiseparts.ai/sales/invoices"} View invoices generated from orders. :: ## Related Features ::card-group :::card --- icon: i-lucide-file-text title: Quotes to: https://docs.wiseparts.ai/sales/quotes --- Create price proposals ::: :::card --- icon: i-lucide-receipt title: Invoices to: https://docs.wiseparts.ai/sales/invoices --- Billing records ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Order analysis ::: :::card --- icon: i-lucide-message-circle title: Conversations to: https://docs.wiseparts.ai/communication/conversations --- Create and share orders from customer threads ::: :: # Invoices Invoices are billing records synced from your source system. Track invoice history by customer, search by part number, and link back to original orders. ::note Invoice data requires an active integration with your source system. :: ::callout{icon="i-lucide-zap"} **Quick Overview**: View invoice history, filter by customer or part, and drill into line-item details. Invoices sync from your source system. :: ## Viewing Invoices Access invoices from **Invoices** in the menu or from a customer profile's **Invoices** tab. ### Filtering | Filter | Description | | -------------- | --------------------------- | | **Customer** | Specific customer or branch | | **Date range** | Invoice date period | | **SKU** | Part number search | | **Warehouse** | Your fulfillment location | | **Brand** | Product brand | ### Invoice List Each invoice shows: - Invoice number and date - Customer name - Due date - Amount - Status (paid, pending, overdue) ## Invoice Details Click an invoice to view: - **Header** β€” Invoice number, date, customer, branch - **Line items** β€” Products with quantities, prices, discounts - **Order reference** β€” Link to the original order - **Totals** β€” Gross, net, VAT breakdown ::callout{icon="i-lucide-lightbulb"} **Tip**: Click the order reference to jump directly to the order that generated this invoice. :: ## Searching by Part Enter a SKU in the filter to find all invoices containing that part. Useful for: - Warranty claims - Part history research - Customer purchase patterns ::callout{icon="i-lucide-info"} **Did you know?** The SKU search finds every invoice where that part was sold. Great for identifying which customers buy specific products. :: ## Data Source Invoices sync from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). They're read-only in WisePartsβ€”all billing is managed in your source system. ::tip{to="https://docs.wiseparts.ai/sales/due-documents"} Track outstanding payments and overdue invoices. :: ## Related Features ::card-group :::card --- icon: i-lucide-shopping-cart title: Orders to: https://docs.wiseparts.ai/sales/orders --- View original orders ::: :::card --- icon: i-lucide-wallet title: Due Documents to: https://docs.wiseparts.ai/sales/due-documents --- Outstanding payments ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Sales analysis ::: :: # Due Documents Due Documents shows outstanding payments across your organization. Monitor aging receivables, track overdue invoices, and export data for collection follow-ups. ::note Due document tracking requires an active integration with your source system. :: ::callout{icon="i-lucide-zap"} **Quick Overview**: View all unpaid documents company-wide or drill down to individual customers. :: ## Company-Wide View Access from **Outstanding Balances** in the menu to see all customers with unpaid documents. | Column | Description | | ------------------ | ----------------------------------- | | **Customer** | Name and ID (click to open profile) | | **Period columns** | Outstanding amounts by month | ### Filtering Select a date to show documents due until that date. The table displays customers with outstanding balances, organized by due date periods. ::callout{icon="i-lucide-lightbulb"} **Tip**: Export this view for accounts receivable meetings. Sort by oldest amounts to prioritize collection efforts. :: ## Customer View Due documents also appear on individual customer profiles. See [Customer Dashboard](https://docs.wiseparts.ai/customers/customer-profile/dashboard) for details. ## Filtering Options | Filter | Description | | -------------------- | ------------------------ | | **Branches** | Your wholesaler branches | | **Expiration until** | Documents due by date | ## Exporting 1. Click the actions menu 2. Select **Excel** or **CSV** 3. Download includes all visible data ::callout{icon="i-lucide-info"} **Did you know?** The export is perfect for collection calls. Filter to overdue items, export the list, and you have a ready-made call sheet with amounts and aging. :: ## Data Source Due documents sync from your [source system](https://docs.wiseparts.ai/getting-started/data-integrations). Payment status updates when invoices are marked paid in your source system. ::tip{to="https://docs.wiseparts.ai/customers/customer-profile/credit-limits"} Check customer credit limits alongside due documents. :: ## Related Features ::card-group :::card --- icon: i-lucide-receipt title: Invoices to: https://docs.wiseparts.ai/sales/invoices --- View invoice details ::: :::card --- icon: i-lucide-wallet title: Credit Limits to: https://docs.wiseparts.ai/customers/customer-profile/credit-limits --- Customer credit status ::: :: # Agreements Agreements track sales metrics and send digest emails about customer performance. Define sales performance bonuses, assign customers, monitor progress, and share performance reports. ::callout{icon="i-lucide-zap"} **Quick Overview**: Create agreements with sales targets and bonus levels, assign customers, track performance against goals, and share email digests with stakeholders. :: ## What Are Agreements? Agreements define measurable sales targets: - **Sales targets** β€” Goals for quantity, gross, net, or margin - **Bonus tiers** β€” Different sales performance bonus levels based on thresholds reached - **Time periods** β€” Defined start and end dates - **Filtering** β€” Limit to specific brands or product families Agreements are for **performance monitoring**β€”they don't automatically affect order bonuses. ## Viewing Agreements Access from **Agreements** in the menu to see all agreements, or view customer-specific agreements from a customer profile. | Column | Description | | --------------- | --------------------------------------------------- | | **Description** | Agreement name | | **Period** | Start and end dates | | **Metric** | What's being tracked (quantity, gross, net, margin) | | **Customers** | Number of customers in the agreement | | **Status** | Active, upcoming, or expired | ## Creating an Agreement Create agreements through a step-by-step wizard: ### Step 1: Setup | Field | Description | | ------------------- | ------------------------------- | | **Description** | Agreement name | | **Metric** | Quantity, Gross, Net, or Margin | | **Start/End dates** | Agreement validity period | | **Customers** | Which customers are included | | **Observations** | Notes about the agreement | ### Step 2: Bonus Levels Define tiered sales performance bonus thresholds: | Level | Threshold | Bonus | | ------- | --------- | ----- | | Level 1 | €0+ | 5% | | Level 2 | €5,000+ | 8% | | Level 3 | €10,000+ | 12% | The progress bar shows which bonus level has been achieved and proximity to the next tier. ::callout{icon="i-lucide-lightbulb"} **Tip**: Set achievable first-tier thresholds to motivate customers. Seeing progress toward the next bonus level encourages larger orders. :: ### Step 3: Options Filter which sales count toward the agreement: | Option | Description | | ----------------------- | ---------------------------------- | | **Brands** | Include or exclude specific brands | | **Brand families** | Product family groupings | | **Wholesaler branches** | Sales from specific locations | ### Step 4: Notifications Configure email digest delivery: | Setting | Description | | -------------- | ------------------------------------ | | **Recipients** | Email addresses to notify | | **Interval** | Daily, weekly, monthly, or quarterly | ### Step 5: Review Confirm all settings and save the agreement. ## Tracking Performance ### Agreement Dashboard Each agreement shows: - **Turnover** β€” Actual sales during the period - **Forecast** β€” Projected sales based on elapsed time - **Current level** β€” Which bonus tier has been reached - **Progress bar** β€” Visual representation against targets ### Performance Indicators | Indicator | Meaning | | -------------- | ------------------------------------ | | πŸ‘ Thumbs up | Actual sales meet or exceed forecast | | πŸ‘Ž Thumbs down | Actual sales below forecast | ## Sharing Performance Share agreement performance via email: | Action | Description | | ------------ | -------------------------------------- | | **Preview** | See how the digest email will look | | **Send** | Manually send to configured recipients | | **Schedule** | Automatic delivery at set intervals | ::callout{icon="i-lucide-info"} **Did you know?** You can preview the digest before sending. Click the email icon on any agreement to see exactly what recipients will receive. :: ## Customer View Agreements also appear on customer profiles under the **Agreements** tab, providing a brief overview of that customer's agreement performance. ::tip{to="https://docs.wiseparts.ai/customers/customer-profile/agreements"} View agreements from the customer profile perspective. :: ## Related Features ::card-group :::card --- icon: i-lucide-target title: Goals to: https://docs.wiseparts.ai/sales/goals --- Team and individual sales targets ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Sales analysis ::: :::card --- icon: i-lucide-pie-chart title: Segments to: https://docs.wiseparts.ai/customers/segments --- Customer classification ::: :: # Goals Goals let you set targets at different organizational levels and track performance over time. Define what to measure, who is responsible, and over which period. ::callout{icon="i-lucide-zap"} **Quick Overview**: Create goals for sales revenue, activity completion, or order volume. Distribute targets across time periods and team members, then track actual vs. forecast performance. :: ## Goal Categories Goals support three categories, each suited to different business objectives: | Category | Use Case | Metrics | | -------------- | ---------------------------------------- | ----------------------------------- | | **Sales** | Revenue and volume targets | Net, Gross, Quantity, Margin | | **Activities** | Visit, call, and task completion targets | Count | | **Orders** | Order volume and value targets | Count, Net, Gross, Quantity, Margin | ::note The **Orders** category is available when the Orders feature is enabled for your organization. :: ## Creating a Goal 1. Navigate to **Goals** from the sales menu 2. Click **Create** 3. Choose a **Category** β€” this determines which metrics and options are available 4. Fill in the details: - **Description** β€” A descriptive title for the goal - **Date Range** β€” The goal period (shortcuts available: This month, This quarter, This semester, This year) - **Metric** β€” What to measure (auto-set to Count for Activities) - **Aim** β€” The target value (hidden for Activities β€” calculated from intervals) - **Team** β€” Assign to a specific team to restrict tracking to its members 5. Choose whether to **Split into sub-periods** for granular interval tracking 6. Configure **Additional options** specific to the category ### Activity Goals Activity goals have special features: - **Goal Mode** β€” Choose between a total for the period or a daily target per business day - **Per Business Day** β€” Enter the daily target (e.g., 10 visits/day) and the system calculates the effective total by multiplying by business days in each period - **Activity Types** β€” Select which activity types count toward the goal (e.g., Visit, Inbound call) - **Verified Only** β€” Only count activities verified via GPS check-in - No main aim is needed β€” it's calculated automatically from intervals and user allocations ### Order Goals Order goals share the same brand and customer filters as sales goals, plus: - **Ordered Only** β€” Count only confirmed orders (excludes pending quotes) - **Channel** β€” Filter by order channel (Phone, Email, Web, Shop, Social) ## Intervals Goals can be divided into time-based intervals for granular tracking. ### Single Period When "Split into sub-periods" is disabled, a single interval covering the full date range is created automatically. This is the simplest setup β€” one target for the entire period. ### Multiple Periods Enable "Split into sub-periods" to create monthly intervals within the goal range. For each interval, you can set a specific target. ::callout{icon="i-lucide-lightbulb"} **Tip**: For annual goals, split into monthly intervals. It's easier to course-correct monthly than to realize in December you're behind. :: ### Copying Intervals For activity goals, use the duplicate icon on any interval row to copy its values to all other periods. This saves time when targets are consistent across months. ## Distributing to Team Members When a goal is assigned to a team with "Split by team members" enabled, you can allocate targets to individual members. ### Distribution Strategies | Strategy | How It Works | | ------------------ | -------------------------------------------------------------------------------------- | | **Equal Split** | Divides the goal evenly among team members, distributing remainder one-by-one | | **Proportional** | Distributes based on values from the preceding period | | **Copy to Others** | Copy one user's value to all other team members (available per-user via the copy icon) | For activity goals, instead of splitting a fixed total, you set each member's target directly. The interval total is calculated automatically. ### Exceeding the Goal If allocations exceed the interval or goal aim, a confirmation prompt asks whether to update the target. This cascades: the interval aim updates, then the goal aim adjusts to match. ## Recurring Goals Activity goals can be set to recur automatically: | Recurrence | Creates a new goal every... | | ------------- | --------------------------- | | **Monthly** | 1st of each month | | **Quarterly** | 1st of each quarter | | **Semester** | 1st of each semester | | **Yearly** | January 1st | ### How Recurrence Works 1. Create an activity goal and select a recurrence frequency 2. The date range auto-fills to the current period 3. At the start of each new period, the system automatically creates a clone with the same settings 4. Each clone is fully independent β€” edit without affecting other periods 5. The recurrence flag passes forward to the latest clone ### New Team Members When recurring goals are cloned: - If all existing members have the **same target**, new members automatically get that target - If members have **different targets**, new members get a zero target and the goal creator receives a notification to review ### Ending Recurrence Set an optional **Recurring until** date to stop automatic creation. When the end date passes, the recurrence flag is removed. ## Goal Dashboards ### Team Goals Widget Shows team performance at a glance: - Current value vs. target - Forecast based on current pace - Achievement percentage - Goals grouped by category (Sales, Orders, Activities) ### Individual Goals Widget Shows personal performance: - Your target for the period - Current achievement - Projected end-of-period result ::callout{icon="i-lucide-info"} **Did you know?** The forecast shows where you'll end up if current pace continues. Use it to identify if you need to push harder mid-period. :: ## Filtering Options ### Sales & Orders Goals | Filter | Description | | ----------------------- | -------------------------------------------------- | | **Brands** | Include or exclude specific brands | | **Brand Families** | Include or exclude brand families | | **Customers** | Include or exclude specific customers | | **Customer Branches** | Include or exclude customer branches | | **Wholesaler Branches** | Scope to specific branches (when no team assigned) | ### Activity Goals | Filter | Description | | --------------------- | ------------------------------------- | | **Activity Types** | Which types count (Visit, Call, etc.) | | **Verified Only** | Only GPS-verified activities | | **Customers** | Include or exclude specific customers | | **Customer Branches** | Include or exclude customer branches | ### Order Goals All sales filters plus: | Filter | Description | | ---------------- | --------------------------------------- | | **Ordered Only** | Only confirmed orders (excludes quotes) | | **Channel** | Filter by order channel | ## Migrating from Legacy Goals If your organization previously used the team-level activity goals (daily visit targets configured on team settings), these can be migrated to the new goal system. Contact your administrator to run the migration, which creates recurring monthly goals preserving all existing daily targets per user. ## Related Features ::card-group :::card --- icon: i-lucide-handshake title: Agreements to: https://docs.wiseparts.ai/sales/agreements --- Customer-level performance tracking ::: :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Deep sales analysis ::: :::card --- icon: i-lucide-users title: Teams to: https://docs.wiseparts.ai/organization/teams --- Team management and configuration ::: :: # Analytics 360 Analyze sales from every angle. Pick a period, choose what to measure, group by customers, brands, channels, or sales segments, then drill into the rows that matter. ::callout{icon="i-lucide-zap"} **Quick Overview**: Filter and group sales data, compare up to three years side by side, add forecast and projection columns, drill from customers to products, save views, share links, ask Henry AI, and set alerts when metrics cross thresholds. :: ## Accessing Analytics Analytics 360 is available in several places: | Location | Scope | | ------------------------------------ | ------------------------------------------------------- | | **Hub > Analytics 360** | All sales across your organization | | **Customer Profile > Analytics 360** | Sales for one customer (customer is locked as a filter) | | **Branch Profile > Analytics 360** | Sales for one branch location | The interface is the same everywhere β€” only the data scope changes. ::note If you have no sales data imported yet, Analytics shows a setup message instead of the table. Connect your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) to get started. :: ## The control bar The top bar is built from chips you can click to change the analysis. On desktop, filters and grouping live in this bar; on mobile, use **Filters** and **Actions** to open the same controls in bottom sheets. | Chip | What it controls | | ------------ | -------------------------------------------------------------------------------- | | **Period** | Start and end of the analysis window (within one calendar year, up to 12 months) | | **Compare** | Optional comparison period (year over year, previous period, or custom) | | **Metric** | Primary measure for ranking rows and the main value columns | | **Group by** | How rows are grouped (customer, brand, sales segment, etc.) | | **Filters** | Narrow which sales are included | | **Drill** | Breadcrumb trail as you click into rows | Use **Clear filters** to reset the view β€” period, comparison, metric, grouping, filters, columns, sort, and drill trail return to defaults. On a customer profile, the pinned customer stays locked. ## Metrics Choose the primary metric from the **Metric** chip. It drives row sorting, totals, and the main value columns. | Metric | Measures | | ------------------- | ----------------------------------------------------- | | **Net** | Net revenue after discounts | | **Margin** | Profit margin on sales | | **Quantity** | Number of items sold | | **Gross** | Gross revenue before discounts | | **Relative margin** | Margin as a percentage of net sales (optional column) | Open **Columns** to add extra metrics, custom fields, or **Market share** (% of total in the current view). ### Show alongside On any value column, click the **filter** icon in the column header to open **Filter by value** and **Show alongside**. A second metric appears next to the primary value for the same period β€” useful for comparing net revenue and quantity on one row. You can also filter rows by a metric value (greater than, less than, between) from the same menu. ## Grouping dimensions Use **Group by** to change what each row represents. | Dimension | Groups by | | --------------------- | ----------------------------------------------------------------------------------------- | | **Customers** | Customer accounts | | **Customer branches** | Individual delivery or billing locations | | **Brands** | Product brands | | **Brand families** | Brand groupings | | **Warehouse** | Your warehouse or branch locations | | **Operators** | Users who handled the sale | | **Discount codes** | Promotional codes used | | **Channels** | Sales channel (phone, email, web, etc.) | | **Sales segment** | Buckets from a configured [sales grouping](https://docs.wiseparts.ai/sales/sales-filters) | | **Salesmen** | Sales representatives (requires a **Team** filter first) | ### Manufacturer views ::note Manufacturer views are available on Enterprise accounts with multi-tenant access. :: | Dimension | Groups by | | ------------------------- | ---------------------------------------- | | **Wholesalers** | Dealer network | | **Manufacturer branches** | Your regional or organizational branches | | **Wholesaler branches** | Individual dealer locations | ### SKU (products) **SKU** is not in the default group-by list because product-level data is very large. It becomes available when you have already narrowed the view β€” for example by drilling into a brand, or by applying a **Brand** or **Brand family** filter. Then you can group or drill down to individual products. ## Customer categories, segments, and sales segments Analytics 360 offers built-in grouping dimensions plus **sales segments** for custom buckets you define. Three related ideas β€” keep them distinct: | Concept | What it is | Where to manage it | | -------------------------------- | ----------------------------------------------------------- | ----------------------------- | | **Customer categories** | Static labels on customer profiles (industry, region, type) | **Customers > Categories** | | **Segments** | Automatic ABC performance tiers based on sales share | **Segments** | | **Sales segment** (in Analytics) | Custom sales buckets you define for analysis | **Settings > Sales grouping** | **Customer categories** are not a **Group by** option in Analytics 360. To compare sales across business-defined buckets (for example original vs aftermarket parts, or sales regions), create a **sales grouping** and then use **Group by > Sales segment**. ::tip{to="https://docs.wiseparts.ai/customers/categories"} Learn how customer categories work on profiles. :: ::tip{to="https://docs.wiseparts.ai/customers/segments"} Learn how ABC segments classify customers by performance. :: ## Sales segments A **sales segment** groups sales into buckets defined under **Settings > Sales grouping** (see [Sales grouping](https://docs.wiseparts.ai/sales/sales-filters)). ### View by sales segment 1. Click **Group by** and choose **Sales segment** 2. Pick which sales grouping to use β€” the picker title is **Pick a segment to view by** 3. The table shows one row per bucket (for example "Original parts", "North region", "Phone channel") 4. Click a row to drill into customers, brands, or the underlying dimension for that bucket An **Other** row captures sales that do not match any bucket, including unmapped salesman codes when grouping by salesman. ### After drilling into a segment When you drill into a segment row, a **Sales segment** filter chip appears. Use it to toggle which buckets stay in scope, or remove the chip to step back. ### Example sales groupings | Grouping name | Based on | Example buckets | | --------------------------- | ------------ | ------------------------------ | | **Original vs aftermarket** | Brand | OEM brands, aftermarket brands | | **Sales regions** | Customer ZIP | North, South, East, West | | **Channels** | Channel | Phone, email, web | ::tip{to="https://docs.wiseparts.ai/sales/sales-filters"} Learn how to create and manage sales groupings. :: ## Date range and comparison ### Period 1. Click the **Period** chip 2. Pick a start month and end month within the same calendar year 3. Apply β€” the range can span at most 12 months When the range covers whole months, the table can show **monthly** columns for each month in the window. ### Compare Click **Compare** to add a second period for variation columns: | Option | Compares against | | ------------------- | -------------------------------------------- | | **Year over year** | Same months in the previous year | | **Previous period** | The period immediately before your selection | | **Custom** | A period you choose | | **None** | No comparison β€” variation columns are hidden | With comparison enabled, you also get **vs LY** (or vs your chosen baseline) absolute and percentage change columns. ### Three-year view By default the table includes **This year**, **Last year**, and **2 years ago** totals for the selected window, plus variation vs each prior year. This gives a three-year snapshot without changing the period chip. ## Filtering Click **Add filter** (or the filter area on mobile) to narrow sales before grouping. ### Dimension filters | Filter | Use for | | ---------------------------- | -------------------------- | | **Customer** | Specific accounts | | **Customer branch** | Specific locations | | **Brand** / **Brand family** | Product lines | | **Warehouse** | Your fulfillment locations | | **SKU** | Product reference fragment | | **Operator** | Who processed the sale | | **Discount code** | Promotions used | | **Channel** | How the sale arrived | Filters use search for long lists β€” type to find customers, brands, and similar values. ### Team filter **Team** is a single-select filter. It scopes sales to one sales team and unlocks the **Salesmen** grouping dimension. ### Metric value filters Filter rows by numeric thresholds on **Net**, **Quantity**, **Margin**, or **Gross** β€” for example net greater than 10,000 or margin between two values. Apply and clear filters from the dropdown footer without leaving the menu. ## Drilling down Click any row to drill deeper. Each click moves one step down the hierarchy β€” for example customers β†’ branches β†’ brands β†’ brand families β†’ products. ### Breadcrumbs The **Drill** chip shows where you are: ```text Customers > Acme Corp > AutoParts Brand > Brake Pads ``` Click any breadcrumb step to jump back to that level. Remove a **Drill** chip to unwind part of the path. ### Example path 1. **Group by** Customers 2. Click a customer β†’ see brands they buy 3. Click a brand β†’ see brand families or SKUs (when available) 4. Continue until you reach product level Drilling from **Salesmen** opens that rep's customers. Drilling from **Operators**, **Discount codes**, or **Channels** moves into brands sold under that value. Drilling from a **Sales segment** row opens the underlying dimension (customers, operators, brands, etc.) while keeping the segment filter active. ## Table columns Open **Columns** to customize what appears besides the row label. ### Time and comparison columns Depending on period and comparison settings, you may see: | Column | Shows | | -------------------------- | ----------------------------------------------------- | | **This year** | Total for the selected period (current year window) | | **Last year** | Same window one year ago | | **2 years ago** | Same window two years ago | | **vs LY** / **vs 2Y** | Absolute and % change vs those years | | **Total** | In-range total for the pivot metric | | **Var.** / **Var. %** | Change vs the comparison period (when Compare is set) | ### Forecast and projection For in-progress periods: | Column | Shows | | -------------- | -------------------------------------------------------- | | **Month fcst** | Projected total for the current month | | **Year fcst** | Projected year-end total at current pace | | **Projection** | Run-rate extrapolation to the end of the selected window | ### Custom fields If your organization defines custom fields on customers or branches, they can appear as optional columns when those entities are in scope. ### Market share Toggle **Market share** in **Columns** to add the **Share** column β€” each row's percentage of the total for the full filtered population, not just the current page. ## Sorting and pagination Click a column header to sort. Click again to reverse. The table paginates large result sets β€” use the pager at the bottom to move between pages. Footer totals always reflect the **full filtered dataset**, not just the current page. ## Saved views Click **Views** to save the current setup β€” period, filters, grouping, columns, and sort. - **Save current view** β€” name it for quick access later - **Shared with team** β€” let colleagues apply the same view - **Apply** β€” restore a saved configuration - **Manage views** β€” rename or delete saved views ## Share view Click the link icon (**Share view**) to copy a URL that reproduces your current analysis. Share it with colleagues so they open the same period, filters, and drill state. ## Ask AI Click **Ask AI** to open Henry and question your live sales data β€” top customers, brand margins, year-over-year comparisons, and more. Henry can suggest views to apply or alerts to create. Verify suggestions before acting on them. ::tip{to="https://docs.wiseparts.ai/getting-started/henry-ai"} Learn more about Henry AI across WiseParts. :: ## Alerts Click the alerts badge to open the **Alerts** center. Create definitions that watch metrics in this view and notify you when conditions are met. ### Creating an alert - From the **Alerts** center β€” define triggers for the current view - From a table cell β€” use the cell menu to start an alert prefilled with that row and metric You can scope alerts to specific rows, set thresholds (above, below, change vs baseline), pause or run them on demand, and review matched rows when an alert fires. ::callout{icon="i-lucide-lightbulb"} **Tip**: Tighten filters before creating row-scoped alerts so evaluations stay focused and fast. :: ## Exporting Open **Export** from the toolbar (or **Actions** on mobile): - **Excel (.xlsx)** - **CSV** Large exports are queued β€” you receive a notification when the file is ready. ## Mobile On smaller screens: - **Filters** opens period, compare, metric, group by, and filters in a bottom sheet - **Actions** opens columns, export, saved views, share, Ask AI, and alerts - Chips scroll horizontally so you can review the full context ## Related features ::card-group :::card --- icon: i-lucide-filter title: Sales grouping to: https://docs.wiseparts.ai/sales/sales-filters --- Create sales groupings used by sales segments in Analytics 360. ::: :::card --- icon: i-lucide-user title: Customer Profile to: https://docs.wiseparts.ai/customers/customer-profile --- View analytics scoped to one customer. ::: :::card --- icon: i-lucide-pie-chart title: Segments to: https://docs.wiseparts.ai/customers/segments --- Classify customers by ABC sales performance. ::: :::card --- icon: i-lucide-tag title: Categories to: https://docs.wiseparts.ai/customers/categories --- Define static category labels on customer profiles. ::: :::card --- icon: i-lucide-file-text title: Reports to: https://docs.wiseparts.ai/reports --- Generate scheduled visit and activity reports. ::: :: # Sales grouping Sales groupings let you bucket sales data for analysis in **Analytics 360** as **Sales segment** rows. ## Creating a sales grouping 1. Go to **Settings > Sales grouping** 2. Click **+** 3. Enter a name 4. Select the column to group by 5. Add bucket details (values to include in each group) 6. Save You can also import buckets in bulk from the actions menu on the same page. ## Grouping columns | Column | Groups by | | --------------------- | ---------------------------- | | **Customer** | Customer identifier | | **Customer Branch** | Customer branch identifier | | **Customer ZIP** | Customer postal code | | **Brand** | Product brand | | **Brand Family** | Brand family grouping | | **Operator** | Sales operator | | **Salesman** | Sales representative | | **Wholesaler Branch** | Warehouse or branch location | | **Channel** | Sales channel | | **Discount Code** | Applied discounts | ::note **Salesman** is available for manufacturer accounts and for wholesalers that attribute sales to individual salesmen. :: ## Using sales groupings in Analytics 360 1. Open [Analytics 360](https://docs.wiseparts.ai/sales/analytics-360) 2. Click **Group by** and choose **Sales segment** 3. Pick which sales grouping to use β€” the picker title is **Pick a segment to view by** 4. Analyze one row per bucket; drill into customers, brands, or other dimensions An **Other** row captures sales that do not match any bucket. ::tip{to="https://docs.wiseparts.ai/sales/analytics-360"} Full Analytics 360 guide β€” metrics, filters, drill-down, and alerts. :: # Stock Analytics Understand what is on your shelves, what is moving, and what needs attention. Stock Analytics groups inventory by brand, warehouse, rotation category, or SKU, then lets you drill, filter, export, and ask Henry AI. ::callout{icon="i-lucide-zap"} **Quick Overview**: Open **Hub > Stock Analytics**, review KPIs and the rotation health mix, group and filter stock, drill into SKUs, share views, set alerts, and use **Ask AI** or the **Daily Brief** for AI-powered highlights. :: ## Accessing Stock Analytics | Location | Scope | | ------------------------- | ---------------------------------- | | **Hub > Stock Analytics** | All stock across your organization | If enabled, Stock Analytics appears in your **Hub** menu. ::note If no stock data has been imported yet, Stock Analytics shows a setup message instead of the table. Connect your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) and ensure stock snapshots are being imported. :: ## KPI bar The top row summarizes the current view: | KPI | What it shows | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | **Daily Brief** | AI-picked SKUs worth reviewing today β€” click a pick to filter the table | | **At Risk** | Active SKUs projected to stock out within 15 days at current sales velocity | | **Stock Value** | Total value of stock on hand at cost | | **Total Quantity** | Sum of quantities across SKUs and warehouses | | **Dead Stock** | Value of stock with no sale during the selected period that was already on the shelf before it began β€” just-arrived stock is excluded | | **Rotation Health Mix** | Share of stock value across High, Regular, Moderate, and Low rotation categories β€” click a segment to filter | Click any KPI where supported to apply a matching filter. ### Rotation categories Rotation is computed from sales activity in the last six months: | Category | Meaning | | ------------ | ---------------------------------------------------------------------------------- | | **High** | Active sellers β€” sold within the last 6 months with high velocity (β‰₯2 units/month) | | **Regular** | Steady movers β€” sold recently but below the high-velocity threshold | | **Moderate** | Slow β€” last sale 6–12 months ago and low velocity (<0.5 units/month) | | **Low** | Low-rotation stock β€” no sale in the last 365+ days | Open the help icon on the rotation health bar for the same definitions in the product. ::note **Dead Stock vs. low-rotation stock**: Dead Stock is period-scoped β€” the value of stock with no sale in your selected date range, excluding stock that only just arrived. Low rotation is structural β€” a rotation band based on little sales movement over the last six months. They measure different things. :: ## The control bar The bar below the KPIs is built from chips you can click to change the analysis. On desktop, filters and grouping live in this bar; on mobile, use **Filters** and **Actions** for the same controls in bottom sheets. | Chip | What it controls | | ---------------------- | ------------------------------------------------------------------------------------------------- | | **Period** | Snapshot date range for the analysis | | **Compare** | Optional comparison period (year over year, previous period, previous month, or previous quarter) | | **Group by** | How rows are grouped | | **Filters** | Narrow which SKUs are included | | **Drill** | Breadcrumb trail as you click into rows | | **Adjustments** | Value-column adjustments (e.g. cost basis tweaks) | | **Including sold-out** | Whether zero-quantity SKUs are included | Use **Clear filters** to return period, comparison, grouping, filters, columns, sort, drill trail, and adjustments to defaults. ## Grouping dimensions | Dimension | Groups by | | ------------- | ------------------------------------------------ | | **Brand** | Product brand | | **Family** | Brand family | | **Warehouse** | Warehouse or branch location | | **Rotation** | Rotation category (High, Regular, Moderate, Low) | | **SKU** | Individual product reference | ## Filters Built-in filters include: | Filter | Use it to | | ------------------------ | ------------------------------------------------------ | | **Days since last sale** | Find SKUs with no recent sales (minimum day threshold) | | **Stockout risk** | Show only SKUs at risk of stocking out soon | | **Rotation category** | Limit to one or more rotation bands | | **SKU** | Search for a specific product reference | | **Brand / Warehouse** | Pick from values in your data | Custom fields on products can appear as additional filters and columns when configured for your organization. ## Metrics and columns Open **Columns** to add or remove measures. Defaults include stock value, quantity, SKU count, dead stock, and dead stock percentage. Additional columns cover average cost, rotation value by category, velocity, coverage days, inventory turnover, and sell-through rate. Custom product fields can appear as optional columns with color rules and shared team settings. ### Value adjustments On the **Stock Value** column header, open adjustment settings to tweak how value is calculated for the current view. ## Drilling down Click any row to drill deeper. Typical paths: - **Brand** β†’ **Family** β†’ **SKU** - **Warehouse** β†’ **SKU** - **Rotation** β†’ **Brand** The **Drill** chip shows your path. Click a breadcrumb step to jump back, or remove a drill chip to unwind part of the path. ## Sorting and export Click a column header to sort; click again to reverse. The table paginates large result sets β€” footer totals reflect the **full filtered dataset**, not just the current page. Use **Export** to download the current analysis. ## Saved views and share - **Views** β€” save, apply, share with your team, or manage named configurations (period, filters, grouping, columns, sort) - **Share view** (link icon) β€” copy a URL that reproduces your current analysis for colleagues ## Ask AI Click **Ask AI** to question your live stock data β€” dead stock by warehouse, rotation trends, SKUs at risk, and more. Henry can suggest filters or views to apply. Verify suggestions before acting on them. Each AI reply may use up to **two credits** when both the planning and response phases run. See [Credits](https://docs.wiseparts.ai/billing/credits) for details. ::tip{to="https://docs.wiseparts.ai/getting-started/henry-ai"} Learn more about Henry AI across WiseParts. :: ## Daily Brief The **Daily Brief** widget in the KPI bar highlights a short list of SKUs Henry flags for review each day after stock data is ingested. Click a pick to filter the table to that SKU, or dismiss the widget for the session. The brief regenerates when new stock snapshots arrive. Generating a brief uses **1 credit** per run. ## Alerts Click the alerts badge to open the **Alerts** center. Create definitions that watch stock metrics in this view and notify you when conditions are met. You can also create an alert from a table cell when the metric supports it. --- ## Related ::card-group :::card --- icon: i-lucide-bar-chart-3 title: Analytics 360 to: https://docs.wiseparts.ai/sales/analytics-360 --- Deep sales analysis with forecasts and multi-year comparison. ::: :::card --- icon: i-lucide-filter title: Sales Filters to: https://docs.wiseparts.ai/sales/sales-filters --- Configure sales segments used alongside sales analytics. ::: :::card --- icon: i-lucide-plug title: Integrations to: https://docs.wiseparts.ai/data/integrations --- Connect your source system for stock and sales data. ::: :: # Conversations Manage all customer communication from a single inbox. Email and WhatsApp messages flow into one unified view where you can respond, assign, tag, and track conversations across channels. ::callout{icon="i-lucide-zap"} **Quick Overview**: All your customer messages in one place. Assign conversations to team members, tag them for organization, snooze for later, and use templates for consistent messaging. :: ## Accessing Conversations Click the **chat icon** in the top navigation bar to open the conversations panel. The panel slides in from the right, showing all conversations across your connected channels. ## Channels Conversations supports three communication channels: | Channel | Providers | Use Case | | ------------ | ----------------------- | ------------------------------------------- | | **Email** | Gmail, Office 365, IMAP | Business correspondence, quotes, follow-ups | | **WhatsApp** | Meta Cloud API, Twilio | Real-time messaging, quick responses | | **Widget** | Website chat | Live support for visitors on your website | Each channel has its own icon in the conversation list so you can quickly identify the source. ::tip{to="https://docs.wiseparts.ai/communication/conversations"} See Conversations Settings to connect your email accounts and WhatsApp numbers. :: ::tip{to="https://docs.wiseparts.ai/communication/chat-widget"} Learn how to add the chat widget to your website and start capturing conversations from visitors. :: ### Choosing a WhatsApp Provider WiseParts supports two WhatsApp integration methods: | Provider | Best For | Pricing | | ------------------ | ------------------------- | -------------------------- | | **Meta Cloud API** | Most businesses | Direct Meta rates only | | **Twilio** | Existing Twilio customers | Meta rates + Twilio markup | ::callout{icon="i-lucide-lightbulb"} **Recommendation**: Use **Meta Cloud API** for WhatsApp. It offers lower costs (no middleman fees), direct access to Meta's latest features, and simpler setup. :: ### WhatsApp Messaging Window WhatsApp allows free-form messaging only within 24 hours of the customer's last message. After that, you must use an approved template to restart the conversation. ::callout{icon="i-lucide-info"} **Note**: The 24-hour timer resets each time the customer sends a message. :: ::tip{to="https://docs.wiseparts.ai/communication/conversations#templates"} Learn about creating and managing WhatsApp templates. :: ## WhatsApp Groups Run team-wide or customer-wide WhatsApp group chats from the same inbox as your one-to-one conversations. Each group appears in the list with a group icon and its subject, and the right panel switches to a dedicated group management view when you open it. ::note Groups only work with **Meta Cloud API** senders linked to a Meta Official Business Account. They're not supported on Twilio senders or on numbers running in coexistence mode. :: ### Creating a Group 1. Click **Create Group** in the conversations header 2. Pick an eligible WhatsApp sender (the number the group will be hosted from) 3. Enter a **group subject** (the name members will see) 4. Optionally add a **description** 5. Enable **Join Request Approval** if you want to review new members before they can join 6. Click **Create** If no senders appear in the dropdown, none of your WhatsApp numbers currently meet the eligibility requirements above. ### The Group Panel Opening a group switches the right panel from the usual contact view to the **Group Management Panel**, which shows: | Section | What you can do | | ------------------------- | ------------------------------------------------------------------ | | **Subject & description** | Edit the group name and description | | **Invite link** | Copy the link to share, or refresh it to invalidate the old one | | **Participants** | See every member, their role (admin or member), and remove members | | **Pending join requests** | Approve or reject requests when approval is enabled | | **Linked customer** | Associate the group with a Customer or Customer Branch | | **Tags** | Apply tags just like any other conversation | ::caution Refreshing the invite link immediately invalidates the previous link. Anyone who hasn't joined yet will need the new one. :: ### Inviting Members Click **Invite participants** in the group panel to send invite-link templates to people outside the group. Two modes: | Mode | Best For | | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | | **Type numbers** | One or more phone numbers. Start typing and pick from the auto-complete β€” it searches customers, branches, and contacts by name or number. | | **Pick from existing conversations** | People you already have a 1:1 thread with. Search by name or number; results are paginated so it stays fast across thousands of conversations. | Pick an approved invite template and send. Each recipient gets the template in a private WhatsApp thread; when they click the invite link and join, they appear in the participants list and a system line ("X joined the group") drops into the timeline. ::note A fresh 1:1 conversation is created to deliver the invite template. Those conversations are automatically marked **Resolved** to keep your inbox quiet β€” they reopen automatically if the recipient replies. :: ### Messages in a Group Group threads look almost the same as 1:1 conversations, with two differences: - **Sender names appear above each inbound message** so you can tell members apart - **System messages** show group events in real time β€” "X joined the group", "X left the group", "X was removed by Y", description changes, and pending join requests. No manual refresh needed. Outbound messages are sent from the group's host number and appear under your team member's name, as usual. ### Group Differences to Know | Aspect | Behaviour in groups | | ---------------------------- | -------------------------------------------------------------------- | | **24-hour messaging window** | Doesn't apply β€” you can message the group at any time | | **Templates** | Can be used at any time (approval still required) | | **Maximum members** | 8 participants including the host number | | **Auto-reply** | Not supported β€” auto-replies never fire in groups | | **Assignment rules** | Apply the same way, but remember there's no single contact to key on | If Meta suspends a group (for policy or platform reasons), a red warning banner appears in the panel and outgoing messages are blocked until the suspension is lifted. ### Deleting a Group Click **Delete Group** at the bottom of the group panel to dissolve the group in WhatsApp for every member, including your business number. In WiseParts the conversation stays as a **read-only archive** β€” you can't send new messages, but the full history and participant list are preserved for reference. A system line records who deleted the group and when. ::caution Deletion takes effect immediately on WhatsApp's side and cannot be undone. :: ### Permissions Creating groups, deleting them, editing participants, and handling join requests require the **Manage WhatsApp Groups** permission. Users without it can still read and reply to group conversations they have access to. ## Conversation List The left panel displays your conversations with: - **Channel icon** β€” Email or WhatsApp indicator - **Contact name** β€” Customer or contact identifier (linked to customer record when available) - **Tags** β€” Color-coded labels for organization - **Last message preview** β€” Most recent message snippet - **Timestamp** β€” When the last message arrived - **Status indicator** β€” Current conversation state ### Filtering Conversations Use tabs to organize your view: | Tab | Shows | | -------------- | --------------------------------- | | **Mine** | Conversations assigned to you | | **Unassigned** | Conversations without an assignee | | **All** | All conversations you can access | Additional filters are available in the filter dropdown: - **Status** β€” Open, pending, snoozed, resolved - **Channel** β€” Email, WhatsApp, or specific accounts - **Tags** β€” Filter by applied tags ## Reading and Responding Select a conversation to view the full message thread. The right panel shows: - Complete message history with timestamps - Sender information and customer link - Attachment previews - Message status indicators (sent, delivered, read) ### Sending Messages 1. Type your message in the input area at the bottom 2. Press **Enter** or click the send button ### Keyboard Shortcuts The reply editor supports configurable keyboard shortcuts for sending messages and changing conversation status in a single action. #### Send Shortcut Choose your preferred send behavior in your user settings: | Setting | Behavior | | -------------- | -------------------------------------------------------------------- | | **Enter** | Press Enter to send, Shift+Enter for a new line | | **Ctrl+Enter** | Press Ctrl+Enter (or Cmd+Enter on Mac) to send, Enter for a new line | | **None** | Click the send button manually | #### Send + Action Shortcuts Combine sending a message with a status change using modifier keys: | Shortcut | Action | | ---------------------------- | --------------------------------- | | **Ctrl/Cmd + Shift + Enter** | Send and resolve the conversation | | **Ctrl/Cmd + Alt + Enter** | Send and mark as pending | | **Alt + Shift + Enter** | Send and reopen the conversation | These shortcuts are available from the send button dropdown, where you can also see which actions are available for the current conversation. #### Quick Templates Type **/** at the start of a message to search and insert a template. As you type after the slash, templates are filtered by name and tag in real time. - **Type** to filter the list - **Arrow keys** to navigate results - **Enter** to insert the selected template This is the fastest way to insert frequently used replies without reaching for the mouse. ### Attachments Attach files by: - Dragging and dropping files onto the message area - Clicking the attachment icon Supported formats include images, PDFs, Office documents, and audio files. File size limits depend on the channel. ### Using Templates Click the template icon to insert a pre-built message. Templates help ensure consistent messaging and are required for WhatsApp conversations outside the 24-hour window. ::tip{to="https://docs.wiseparts.ai/communication/conversations#templates"} Create and manage message templates in Conversations Settings. :: ### Chat widget visitors Conversations started from the chat widget on your website arrive in the same inbox as your email and WhatsApp threads. Two things work differently for website visitors: - **Friendly visitor labels** β€” Anonymous visitors who haven't shared their details yet are shown with a short, friendly id, so you can tell one visitor from another before they identify themselves. - **Reply-reachability bar** β€” A bar above the message box tells you whether your reply will reach the visitor *before* you send it: | What the bar shows | What it means | | --------------------------------------------------------------- | ---------------------------------------------------------- | | **Visitor is online** | Your reply appears in the widget right away | | **Visitor is away β€” your reply will be emailed** | The visitor left an email, so your reply is sent there | | **Visitor is away with no email β€” they may not see this reply** | No email on file, so they may not see it until they return | When the visitor is offline, your reply is emailed to them and the conversation simply continues over email, so nothing is lost. ## Conversation Actions ### Assigning Assign conversations to team members for clear ownership: 1. Click the assignee dropdown in the conversation header 2. Select a user or team 3. The conversation moves to the assignee's "Mine" tab Assignment can happen automatically based on rules you configure. ::tip --- to: https://docs.wiseparts.ai/communication/conversations#assignment-rules --- Configure automatic assignment rules in Conversations Settings. :: ### Tagging Tags help you organize and filter conversations. Apply multiple tags to categorize by topic, priority, or workflow stage. To add tags: 1. Open a conversation 2. Click the **Tags** section in the conversation details 3. Select existing tags or create new ones inline Tags appear as colored pills in the conversation list for quick visual identification. ::callout{icon="i-lucide-lightbulb"} **Tip**: Create tags for common scenarios like "Urgent", "Quote Sent", or "Waiting for Parts" to track conversation states at a glance. :: Tags can also trigger automations β€” for example, tagging a conversation as "Urgent" can notify a manager or reassign it to a senior agent. ::tip{to="https://docs.wiseparts.ai/communication/conversations#tags"} Create and manage conversation tags in Conversations Settings. :: ::tip{to="https://docs.wiseparts.ai/automations/getting-started"} Set up tag-based automation triggers. :: ### Snoozing Hide a conversation temporarily when you need to follow up later: 1. Click the snooze button 2. Choose when to resurface: - **1 hour** - **2 hours** - **4 hours** - **Tomorrow** (9:00 AM) - **Next Monday** (9:00 AM) Snoozed conversations reappear in your inbox at the scheduled time. ### Resolving Mark conversations as complete when no further action is needed: 1. Click the resolve button (checkmark icon) 2. The conversation moves to resolved status Resolved conversations are hidden from the default view but remain searchable. You can unresolve a conversation if it needs attention again. ### Private Notes Add internal notes that only your team can see: 1. Click the note icon in the message composer 2. Type your note 3. Send β€” the note appears in the thread with a distinct style Private notes are useful for documenting context, handoff instructions, or decisions without sending anything to the customer. ### Auto-Replies Automatically respond to incoming messages when your team is unavailable. Auto-replies can acknowledge receipt and set expectations for response times. ::tip{to="https://docs.wiseparts.ai/communication/conversations#auto-reply"} Configure auto-reply messages in Conversations Settings. :: ## AI Assistance ::note AI features are optional and must be configured in conversation settings. :: Incoming messages are automatically analyzed by AI to help you respond faster and more effectively. When a new message arrives, the AI: - **Analyzes sentiment** β€” Detects if the customer is positive, neutral, frustrated, or urgent - **Assesses urgency** β€” Flags messages that need immediate attention - **Suggests tags** β€” Recommends tags based on message content - **Extracts context** β€” Identifies references to orders, quotes, or invoices - **Recommends actions** β€” Provides quick-action buttons for common tasks The analysis appears as a private note in the conversation thread, visible only to your team. This gives you instant context before responding. ::callout{icon="i-lucide-lightbulb"} **Tip**: AI-suggested tags are applied automatically when they match your existing tags. Create tags for common topics like "Pricing Question" or "Delivery Issue" to enable smart categorization. :: ## Associating with Customers Link conversations to customer records for context: 1. Click the customer link in the conversation header 2. Search for and select a customer 3. The conversation is now associated with that customer record Once linked, you can: - View the customer's profile from the conversation - See conversation history on the customer's profile - Access customer context when responding ## Quotes and Orders from Conversations When your organization has the **Orders** feature and you can create quotes, the conversation details panel shows **Create order**. | Situation | What happens | | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | Contact linked to a customer or branch | Opens the quote builder with the customer, branch, and channel pre-filled (email β†’ Email, WhatsApp β†’ Social) | | Contact not linked yet | Opens **Create prospect for quote** β€” details are pre-filled from the conversation; after saving, you continue straight to the quote builder | This lets agents turn a WhatsApp or email thread into a quote without leaving Conversations. ### Sharing quotes and orders in the thread When you **Share** a quote or order by WhatsApp or SMS and your organization has active conversation senders, WiseParts opens **Conversations** in share mode instead of a standalone dialog: 1. From the quote or order, click **Share** and choose WhatsApp or SMS 2. The conversations panel opens β€” select the customer's thread 3. Pick a template for the channel (Meta-approved, or an in-window template when using dynamic variables such as **Order Information**) 4. Review the preview β€” dynamic variables fill from the live quote or order 5. Send into the selected thread For WhatsApp, templates with an **Order** quick-reply button let customers confirm a quote in one tap β€” the same outcome as accepting from the public quote link. ## Starting New Conversations To initiate a conversation: 1. Click the **+** button in the conversations panel 2. Select a channel (email account or WhatsApp number) 3. Enter the recipient (email address or phone number) 4. Compose and send your message For WhatsApp, you must use an approved template when contacting a customer for the first time. ## Performance Metrics Track response times, resolution rates, and message volumes from the Conversations dashboard. ::tip{to="https://docs.wiseparts.ai/workspace/dashboards"} View conversation metrics and team performance in Dashboards. :: --- ## Configuration ### Accounts The Accounts tab shows all connected communication channels. Each account can be configured independently. #### Email Providers | Provider | Authentication | Best For | | -------------- | ----------------- | ---------------------------------------- | | **Gmail** | Google OAuth | Personal or Google Workspace accounts | | **Office 365** | Microsoft OAuth | Microsoft 365 or Outlook accounts | | **IMAP** | Username/password | Any email provider with IMAP/SMTP access | #### Connecting Gmail 1. Click **Add Email** 2. Select **Gmail** 3. Click **Connect with Google** 4. Sign in and authorize WiseParts to access your email 5. Configure sender name and signature 6. Save #### Connecting Office 365 1. Click **Add Email** 2. Select **Office 365** 3. Click **Connect with Microsoft** 4. Sign in and authorize access 5. Configure sender name and signature 6. Save #### Connecting IMAP For email providers not supporting OAuth, use IMAP: 1. Click **Add Email** 2. Select **IMAP** 3. Enter your credentials: | Field | Description | | ----------------- | --------------------------------------------- | | **Email Address** | Your full email address | | **IMAP Server** | Incoming mail server (e.g., imap.example.com) | | **IMAP Port** | Usually 993 for SSL | | **SMTP Server** | Outgoing mail server (e.g., smtp.example.com) | | **SMTP Port** | Usually 587 for TLS or 465 for SSL | | **Username** | Your email username | | **Password** | Your email password or app-specific password | 4. Test the connection 5. Configure sender name and signature 6. Save ::callout{icon="i-lucide-info"} Some email providers require app-specific passwords when two-factor authentication is enabled. Check your provider's documentation. :: #### WhatsApp Providers | Provider | Setup | Features | | ------------------ | ------------------------------------- | -------------------------------------------------------------------------------------------------------- | | **Meta Cloud API** | Direct integration with Meta Business | Full WhatsApp messaging features, template management | | **Twilio** | Meta embedded signup via Twilio | Same setup as Cloud API β€” grant WiseParts access to your WABA and numbers through Meta's embedded signup | #### Connecting WhatsApp (Meta Cloud API) 1. Click **Add WhatsApp Number** 2. Select **Cloud API** 3. Accept Meta's terms and conditions 4. Log in to your Meta Business account 5. Select or create a WhatsApp Business Account 6. Choose a phone number to connect 7. Configure business information 8. Save Requirements: - Meta Business account - Verified business - Phone number capable of receiving SMS or voice calls for verification #### Connect WhatsApp (Twilio) 1. Click **Add WhatsApp Number** 2. Select **Twilio** 3. Accept Meta's terms and conditions 4. Sign in with your Meta Business account 5. Select or create a WhatsApp Business Account 6. Choose a phone number to connect 7. Configure business information 8. Save Requirements: - Meta Business account - Verified business - Phone number capable of receiving SMS or voice calls for verification #### Authorized Users Control which team members can access each account: 1. Open an account's settings 2. Go to **Authorized Users** 3. Add or remove users who should have access Users added to a sender channel have permission flags: handles conversations (can view and respond), can reassign, can clear assignment, and can resolve all. A user who handles conversations but is not set as an auto-assignment target will see conversations but won't be automatically assigned new ones. Users not authorized for an account won't see its conversations. ### Templates Message templates ensure consistent communication and are required for WhatsApp messaging outside the 24-hour window. #### Creating Templates 1. Go to the **Templates** tab 2. Click **Create Template** 3. Optionally click **Start from a recipe** to pre-fill the form from the categorized library (invoice, order shipped, payment reminder, holiday notice, quote, follow-up, and more) β€” you can tweak the content before saving 4. Configure the template: | Field | Description | | ----------- | ----------------------------------------------------- | | **Account** | Which email or WhatsApp account can use this template | | **Name** | Internal name for finding the template | | **Content** | The message body with optional variables | | **Labels** | Categories for organizing templates (e.g., "Quotes") | For **email templates** the editor is fully rich-text β€” bold, italics, lists, images, and alignment are preserved end-to-end so what you see in the preview is what recipients get. Variables appear as inline chips you can click to edit or remove. For **WhatsApp** accounts, the **Account** picker lists **each phone number** on the Business Account separately so templates are tied to the right sender. For **email**, when you have multiple inboxes you can enable **Share with multiple inboxes** to reuse one template across accounts (editable after creation without re-approval). #### Template Variables Personalize templates with dynamic content using double curly braces: ```text Hello {{customer_name}}, Your quote {{quote_number}} is ready for review. Best regards, {{user_name}} ``` Available variables depend on context. Common variables include: | Variable | Inserts | | ------------------- | -------------------- | | `{{customer_name}}` | Customer's name | | `{{quote_number}}` | Related quote number | | `{{user_name}}` | Your name | | `{{company_name}}` | Your company name | #### Order Information and adaptive message variations Add an **Order Information** body variable (`order.template`) to embed a live quote or order in WhatsApp templates. On each send, WiseParts picks the richest variation that fits Meta's size limits: | Variation | Used when | | ------------ | ---------------------------------------- | | **Detailed** | Full per-part breakdown fits | | **List** | A compact one-line-per-part table fits | | **Summary** | Only totals fit (typically large orders) | Click **View message variations** in the template builder to preview all three tiers. Add your own greeting and links around the variable in the template body. ::note **Dynamic variables** (including Order Information) cannot be submitted to Meta for approval β€” use them as quick replies inside an active 24-hour conversation. Do not mix URL buttons, quick-reply buttons, and dynamic variables in one template; WhatsApp cannot deliver that combination in-window. :: #### Template recipes with order actions Pick a **recipe** when creating a template to pre-fill content from the categorized library (quotes, orders, invoices, and more). Recipes are loaded **per sender** β€” switch account or WhatsApp number to see recipes available for that channel. Quote recipes on Meta Cloud API can include an **Order** button. When the customer taps it, the quote is confirmed and pushed to your [source system](https://docs.wiseparts.ai/getting-started/data-integrations) automatically. #### WhatsApp Template Approval WhatsApp templates must be approved by Meta before use: 1. Create the template in WiseParts 2. The template is automatically submitted to Meta 3. Wait for review (typically 24-48 hours) 4. Check template status: | Status | Meaning | | ------------ | ------------------------------------------- | | **Pending** | Awaiting Meta review | | **Approved** | Ready to use | | **Rejected** | Did not meet guidelines β€” edit and resubmit | ::callout{icon="i-lucide-lightbulb"} **Tip**: Write templates that provide value to customers. Meta rejects promotional-only content. Include context like order numbers or relevant information. :: #### Template Types Templates can be configured for different purposes: | Type | Use Case | | ---------- | ------------------------------------------------- | | **Start** | Can initiate new conversations | | **Reply** | Can be used within existing conversations | | **Window** | WhatsApp templates for use outside 24-hour window | ### Tags Tags help organize conversations by topic, priority, or workflow stage. #### Creating Tags 1. Go to the **Tags** tab 2. Click **Create Tag** 3. Configure: | Field | Description | | --------------- | -------------------------------------------- | | **Name** | Tag label (e.g., "Urgent", "Quote Sent") | | **Description** | Optional explanation of when to use this tag | | **Color** | Visual identifier for quick recognition | 4. Save Tags appear as colored pills in the conversation list and can be used to filter conversations. #### Managing Tags - **Edit** a tag to change its name, description, or color - **Delete** a tag to remove it (existing conversations keep their tag history) Tags can also be created inline when tagging a conversation β€” just type a name and select "Create new tag". ### Business Hours Define when your team is available to set customer expectations and control auto-reply behavior. #### Setting Hours 1. Go to the **Business Hours** section in an account's settings 2. Configure hours for each day of the week: - Set start and end times - Mark days as closed 3. Set your timezone 4. Optionally configure holiday schedules #### Impact of Business Hours Business hours affect: - **Response time metrics** β€” Calculated only during business hours - **Auto-replies** β€” Can be configured to send different messages outside hours - **Dashboard reporting** β€” Filter metrics by business hours ### Auto-Reply Send automatic responses to incoming messages. #### Configuring Auto-Reply 1. Go to **Auto-Reply** in an account's settings 2. Enable auto-reply 3. Configure triggers: | Trigger | Sends When | | -------------------------- | ---------------------------------------- | | **Outside Business Hours** | Message arrives when team is unavailable | | **First Contact** | New conversation from unknown contact | | **Always** | Every incoming message (use sparingly) | 4. Write your auto-reply message 5. Save ::callout{icon="i-lucide-info"} Auto-reply is currently available for email accounts only. :: ### Assignment Rules Automatically assign incoming conversations to team members based on configurable rules. #### Available Rules | Rule | Assigns To | | ------------------------- | -------------------------------------------- | | **Customer's Salesman** | The salesman assigned to the customer record | | **Customer Custom Field** | User specified in a customer's custom field | | **Latest Assigned User** | The last person who handled this contact | | **Team Brand** | Team members based on brand associations | | **Workload Rotation** | Distribute evenly based on current workload | | **Random User** | Random team member from authorized users | #### Configuring Assignment Rules 1. Go to **Assignment Rules** in an account's settings 2. Add rules in priority order 3. For each rule, specify: - The rule type - Any required parameters (e.g., which custom field) #### How Rules Are Evaluated Rules start from the people eligible to receive the conversation β€” users on the account who handle conversations, minus anyone on holiday and anyone who held this conversation most recently. Rules then run in order against that list, narrowing it as they go: - A rule that identifies **exactly one** user assigns the conversation and stops. - A rule that narrows to **several** users passes that shorter list to the next rule. - A rule that matches **nobody** leaves the list untouched and passes it on. So rules combine rather than compete. Customer's Salesman followed by Workload Rotation means "the customer's salesman if there is one, otherwise the least busy person" β€” not "whichever fires first". #### Built-in Fallback After your configured rules, four more always run, in this order: 1. **Latest Assigned User** 2. **Team Brand** 3. **Workload Rotation** 4. **Random User** These cannot be turned off, and Random User will pick someone whenever authorised users exist. ::callout{icon="i-lucide-info"} This is why an account with **no** assignment rules still assigns its conversations. If assignment looks wrong on a channel you never configured, the fallback is what you are seeing β€” add the rule you actually want rather than looking for the setting that broke. :: ::note An [automation](https://docs.wiseparts.ai/automations/actions#assign-conversation) that assigns the conversation runs first and wins. Assignment rules are skipped entirely for that conversation, so it will not rotate to the next agent. :: ::callout{icon="i-lucide-lightbulb"} **Tip**: You can set a custom field on customers with their preferred agent, then use workload rotation for balanced distribution. :: ### Signatures Configure email signatures that are automatically appended to outgoing messages. #### Creating Signatures 1. Go to **Signatures** in an account's settings 2. Create a signature with: - Formatted text - Images (logo, headshot) - Links 3. Set as default for the account or specific users Signatures can include HTML formatting for rich content like social media links and contact information. ### Account Status Monitor the health of your connected accounts: | Status | Meaning | Action | | ---------- | --------------------- | --------------------- | | **Active** | Connected and syncing | None needed | | **Error** | Authentication issue | Reconnect the account | | **Paused** | Manually paused | Resume when ready | If an account shows an error, you'll need to reauthenticate. Click the account and follow the reconnection flow. ## Related Features ::card-group :::card --- icon: i-lucide-users title: Customers to: https://docs.wiseparts.ai/customers/customer-list --- Link conversations to customer records. ::: :::card --- icon: i-lucide-layout-dashboard title: Dashboards to: https://docs.wiseparts.ai/workspace/dashboards --- Track conversation metrics and team performance. ::: :::card --- icon: i-lucide-zap title: Automations to: https://docs.wiseparts.ai/automations/getting-started --- Trigger actions when conversations are tagged. ::: :: # Call Center Manage customer calls in real-time with automatic notifications, customer detection, and one-click quote creation. Track operator performance and follow up on missed calls to maximize every sales opportunity. ::note The call center feature connects to your existing phone system. WiseParts receives call events automatically in real-time β€” it is not a phone system itself. :: ::callout{icon="i-lucide-zap"} **Quick Overview**: Receive real-time call notifications, identify callers instantly, create quotes during calls, and monitor team performance with dashboard widgets. :: ## Call Notification Bar When an inbound call arrives, a notification bar appears at the bottom of your screen. This floating bar shows call status and provides quick actions without interrupting your work. ### What You See The notification bar displays: - **Customer name** if the phone number matches a known customer - **Phone number** on hover if you need to see the raw number - **Call status** showing whether the call is ringing, answered, or in progress - **Animated indicator** that changes based on call state ### Available Actions While a call is active, the notification bar provides three actions: | Action | Description | | ----------------- | -------------------------------------------------- | | **Dismiss** | Remove the notification (double-click to confirm) | | **Edit Contact** | Link the call to a different customer | | **View Customer** | Navigate to the caller's profile and quote builder | ::callout{icon="i-lucide-lightbulb"} **Tip**: Click **View Customer** to jump straight to the quote builder with the caller's information pre-filled. :: ## How Calls Work When your phone system is integrated, calls flow through WiseParts in real-time. The system notifies you of incoming calls, identifies customers by phone number, and tracks every interaction. ### Call Lifecycle Calls progress through these stages: | Status | Meaning | | ------------- | ------------------------------------ | | **Queued** | Call waiting in the queue | | **Ringing** | Ringing at an operator's station | | **Answered** | Operator picked up | | **Completed** | Call ended successfully | | **Canceled** | Caller hung up before answer | | **No Answer** | Timed out without answer | | **Failed** | Technical issue prevented connection | The system automatically tracks transitions and records timing for each stage. ### Call Directions | Direction | Description | | ----------------- | ---------------------------------- | | **Inbound** | Customer calls your call center | | **Outbound Dial** | Operator manually dials a customer | | **Outbound Auto** | System-initiated outbound call | ## Receiving Calls When an inbound call arrives, you receive an instant notification. The system searches for the caller's phone number across your customer database to identify who's calling. ### Automatic Customer Detection The system matches incoming phone numbers against: - Customer phone and mobile fields - Branch phone and mobile fields - Contact records When a single match is found, the customer is automatically linked to the call. If multiple matches exist, you can select the correct customer manually. ### Recent Calls Access your last five calls from the call history button in the interface. Each entry shows: - Call timestamp - Incoming or outgoing indicator - Completion status (success or missed) - Customer name if identified - Quick link to customer profile Click any call to navigate directly to that customer's quote builder. ## Creating Quotes from Calls Link incoming calls directly to quotes while the conversation is happening. ### Using the Incoming Call Button When a call is in progress: 1. Open **Create Order** from the menu 2. The **Incoming Call** button appears if a call is active 3. Click to assign the caller's phone number as the quote contact 4. The channel is automatically set to "Phone" This creates a seamless connection between the call and any quote you build, making it easy to track which orders originated from phone inquiries. ::callout{icon="i-lucide-lightbulb"} **Tip**: If the caller's phone matches a known customer, their information auto-fills in the quote header, saving you time during the call. :: ## Lost and Recovered Calls Lost calls are opportunities waiting to be recovered. The system tracks incomplete calls and helps you follow up. ### What Counts as Lost A call is marked as lost when it ends with: - **Canceled** β€” Customer hung up before you could answer - **No Answer** β€” Call timed out in queue - **Failed** β€” Technical issue prevented connection ### Recovering Lost Calls When you call back a customer whose previous call was lost: 1. The system detects the matching phone number 2. Links your outbound call to the original lost call 3. Marks the original as "recovered" 4. Records the recovery time in seconds This data helps you understand how quickly your team follows up on missed opportunities. ### Lost Calls Widget The Lost Calls widget on your dashboard shows incomplete calls: | Column | Shows | | ------------- | -------------------------------------------- | | **User** | Operator who was assigned | | **Customer** | Customer name if matched | | **Phone** | Caller's phone number | | **Recovered** | Green dot if recovered, red if still pending | Toggle **Without Recovered** to focus only on calls that still need follow-up. ::callout{icon="i-lucide-info"} **Note**: The widget auto-refreshes when new lost calls are detected, so your list is always current. :: ## Dashboard Track call volume, wait times, operator performance, and quote conversion from the Call Center dashboard. ::tip{to="https://docs.wiseparts.ai/workspace/dashboards"} View call center metrics and performance in Dashboards. :: --- ## Configuration ### Phone System Integration Call center features require integration with your phone system. The integration enables real-time call tracking, customer detection, and performance metrics. #### Supported Systems WiseParts connects to a wide range of phone systems and telephony providers. Contact your account manager to set up the integration for your specific phone system. #### What Gets Synced Once integrated, the system receives: - Inbound and outbound call events - Call status transitions (queued, ringing, answered, completed) - Caller and recipient phone numbers - Call duration and timing data - Queue wait times This data powers the dashboard widgets, customer detection, and recovered call tracking. ### User Roles Call center features require specific roles to be assigned to users. **Dashboard access** and **live call handling** are separate: | Capability | Requirements | | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Call Center dashboard** | User has the call center dashboard permission and your organization has an active voice integration. Managers and admins can open the dashboard **without** being mapped as phone agents. | | **Incoming call bar & agent features** | User must be mapped as an agent on the voice integration β€” used for real-time call notifications and quote linking during calls. | #### Call Center Operator Operators handle calls and create quotes. This role grants: - View and manage their own calls (when mapped as an agent) - Access to the call center dashboard - Create quotes from incoming calls - View recent call history Operators only see calls assigned to them. Users with the **view-all-calls** ability can see calls from all operators. #### Call Center Manager Managers oversee team performance. This role includes all operator permissions plus: - View all calls across the team - Access to operator performance widgets - Team filtering on dashboard - Lost call monitoring for all operators Managers can use the dashboard to monitor the team even when they are not mapped as phone agents. Manager roles include the **view-all-calls** ability by default. ::tip{to="https://docs.wiseparts.ai/organization/users"} Assign roles and abilities in Organization > Users. :: ### Team Configuration Organize operators into teams for filtering and reporting purposes. #### Creating Call Center Teams 1. Navigate to **Organization > Teams** 2. Create a team with type **Call Center** 3. Add operators as team members 4. Assign a team manager if needed #### Team-Based Filtering When teams are configured: - Dashboard widgets can filter by team - Lost call tracking can focus on specific groups - Reports segment data by team - Managers see only their team's metrics (unless they have broader access) ::tip{to="https://docs.wiseparts.ai/organization/teams"} Learn more about team configuration. :: ### Dashboard Widgets The call center dashboard displays widgets from two groups: **Calls** and **Quotes**. Widgets are automatically available when call center features are active. #### Call Widgets | Widget | Purpose | | ------------------- | ----------------------------------------- | | **Calls per Day** | Volume trends with period comparison | | **Calls per Hour** | Hourly distribution for staffing | | **Calls by Status** | Outcome breakdown (completed, lost, etc.) | | **Calls per User** | Operator rankings | | **Lost Calls** | Incomplete calls needing follow-up | #### Quote Widgets | Widget | Purpose | | -------------------- | ------------------- | | **Orders vs Quotes** | Conversion tracking | | **Quotes per Brand** | Brand distribution | Widgets refresh automatically and respond to team filters when selected. ### Lost Call Recovery The system automatically tracks when lost calls are recovered through follow-up outbound calls. #### How Recovery Works 1. A call ends with incomplete status (canceled, no answer, failed) 2. An operator later calls the same phone number 3. The system matches the numbers and links the calls 4. The original call is marked as recovered 5. Recovery time (seconds from lost to follow-up) is recorded #### Recovery Metrics Recovery data appears in: - **Lost Calls Widget** β€” Shows recovery status per call - **Reports** β€” Include recovery rates and times - **Dashboard Filters** β€” Toggle to show only unrecovered calls ## Related Features ::card-group :::card --- icon: i-lucide-file-text title: Quotes to: https://docs.wiseparts.ai/sales/quotes --- Create and send price proposals ::: :::card --- icon: i-lucide-zap title: Automations to: https://docs.wiseparts.ai/automations/getting-started --- Set up lost call notifications ::: :::card --- icon: i-lucide-file-chart-column title: Reports to: https://docs.wiseparts.ai/reports --- Generate detailed call center reports ::: :::card --- icon: i-lucide-users title: Users to: https://docs.wiseparts.ai/organization/users --- Assign call center roles ::: :::card --- icon: i-lucide-users-round title: Teams to: https://docs.wiseparts.ai/organization/teams --- Create operator teams ::: :::card --- icon: i-lucide-plug title: Integrations to: https://docs.wiseparts.ai/data/integrations --- Configure phone system connection ::: :: # Chat Widget Add a live-chat widget to your own website and let visitors start a conversation with your team in one click. Every chat lands in your Conversations inbox as its own channel, right alongside Email and WhatsApp, so your agents work from a single place. ::callout{icon="i-lucide-zap"} **Quick Overview**: Paste one small snippet into your website to add a chat bubble. Visitors chat in real time, identified customers are recognized automatically, and any message that arrives after hours is captured and followed up by email. :: ## What is the chat widget The chat widget is a small chat bubble that sits in the corner of your website. When a visitor clicks it, they can send a message and get answers from your team in real time. Behind the scenes, each widget chat becomes a conversation in your inbox. You reply, assign, tag, and resolve widget chats exactly like Email and WhatsApp β€” the only difference is where the message came from. ::note The widget is for **your website's visitors**, not your internal team. It is a customer-facing channel, so treat it like your other inbound channels. :: ## Setting up the widget Create and configure the widget from **Conversations Settings**, under the channels list. 1. Open Conversations Settings and choose **Add Chat Widget** 2. Give the widget a **name** (for example, "Website Chat") so you can recognize it in the inbox 3. Optionally pick a **Ticket Email Channel** β€” this is the email account used to follow up with visitors who leave before you reply 4. Save to create the widget, then open its settings to finish the appearance and behavior 5. **Assign agents** to the widget so live chats can be answered ::warning If no agents are assigned to a widget, visitors always see your team as offline and live replies can't be delivered in real time. Assign at least one agent to the widget so live chat works. :: ### Configuration options Inside the widget settings you can tailor how it looks and behaves: | Setting | What it controls | | ------------------------ | --------------------------------------------------------------------- | | **Welcome Message** | The greeting visitors see when they open the widget | | **Primary Color** | The accent color of the chat bubble and header | | **Position** | Bottom-right or bottom-left of the page | | **Language** | Fix a language, or let it detect the visitor's automatically | | **Branding** | Header logo, avatar, bubble style, fonts, and header gradient | | **Ticket Email Channel** | Where visitor tickets and after-hours follow-ups are sent from | | **Customize Labels** | Reword the buttons and prompts visitors see | | **Proactive Messages** | Pop-up nudges triggered by time on page, a URL match, or scroll depth | | **Quick Replies** | One-tap starter buttons that send a pre-written message | ## Adding the widget to your website To make the widget appear, paste a small snippet into your website's HTML, just before the closing `` tag. It loads without slowing your page down. ```html ``` ::note Copy the exact snippet from your widget settings β€” your workspace ID is already filled in for you under **Embed Code**. For extra safety you can restrict which domains are allowed to load the widget in the widget's **Privacy & security** settings. :: ## Identifying your visitors By default, visitors are anonymous β€” they appear in your inbox with a short, friendly identifier. If you already know who the visitor is (for example, a customer signed in to your website), you can tell the widget who they are so their name and email show up on the conversation. Add an **identify** call after the snippet, using the details you have: ```html ``` Now the conversation in your inbox is labeled with the visitor's name instead of an anonymous identifier, giving your agents context before they reply. ### Verified visitor identity Anyone can claim to be anyone in a browser, so for signed-in customers you can turn on **verified identity**. Your website's server produces a tamper-proof, signed identity for the visitor, and WiseParts checks it before trusting the name and email. ::note Verified identity is **server-signed**: the signing secret lives only on your server and never in your website's code. This makes a logged-in customer trusted and impossible to impersonate. The secret is managed in the widget's identity settings. :: ### Controlling the widget You can open, close, and react to the widget from your own site using simple commands: | Command | What it does | | ---------------------------- | ------------------------------------------ | | `WisePartsWidget('open')` | Opens the chat window | | `WisePartsWidget('close')` | Closes the chat window | | `WisePartsWidget('toggle')` | Opens or closes it | | `WisePartsWidget('show')` | Shows the chat bubble | | `WisePartsWidget('hide')` | Hides the chat bubble | | `WisePartsWidget('on', ...)` | Runs your own code when chat events happen | For example, you can wire up your own "Chat with us" button to call `WisePartsWidget('open')`. ## The visitor experience When a visitor opens the widget, they see your welcome message and can start typing right away. Your team's **live status** is shown at the top, so visitors know whether to expect an instant reply or a follow-up later. ### Consent and pre-chat form You can ask visitors to agree to your privacy policy before they chat, and collect a few details up front: - **Consent gate** β€” visitors accept your privacy policy (with a link to it) before starting - **Pre-chat form** β€” ask for name, email, phone, or company, and mark any of them as required Collecting an email up front means you can always follow up, even if the visitor leaves mid-conversation. ### Proactive messages and quick replies Give visitors a nudge or a head start: - **Proactive messages** appear as a small pop-up after a set time on a page, on pages matching a URL, or once a visitor scrolls far enough - **Quick replies** are one-tap buttons that send a pre-written message, so common questions start with a single click ::callout{icon="i-lucide-lightbulb"} **Tip**: Use a proactive message on high-intent pages (like pricing or checkout) to offer help exactly when visitors are most likely to have a question. :: ## When your team is offline The widget knows when your team is available. When everyone is offline, it adapts so no message is lost: - It prompts the visitor for an **email** sooner, so you have a way to reach them - It can send an automated **"we're away"** reply that sets expectations - If the visitor leaves before you reply, your reply is **emailed to them** and the conversation simply continues over email ::note After-hours replies can only be emailed when the widget has a **Ticket Email Channel** set **and** the visitor left an email address. Require email in the pre-chat form so every visitor can be reached. :: ## Managing widget conversations Widget chats behave like any other conversation in your inbox. You can assign them, tag them, snooze them, add private notes, and resolve them β€” and automatic assignment rules apply just as they do for Email and WhatsApp. Visitors can also submit a **ticket** through the widget when your team is away. Tickets arrive in the inbox and are answered by email. ::tip{to="https://docs.wiseparts.ai/communication/conversations"} Learn how to reply, assign, tag, and resolve conversations from your inbox. :: ## Privacy and security The widget is built to protect both you and your visitors: - **Consent** β€” require visitors to accept your privacy policy before chatting, and respect their browser's "Do Not Track" signal - **Verified identity** β€” trust signed-in customers without risk of impersonation - **Abuse protection** β€” ticket submissions are rate-limited with a friendly "try again shortly" message, and a quick human-verification check can appear if activity looks suspicious ::callout{icon="i-lucide-info"} **Note**: A visitor can request a copy of their own data, and any tickets they submitted are included in that export β€” helping you meet GDPR data-access requests. :: --- ## Related Features ::card-group :::card --- icon: i-lucide-message-circle title: Conversations to: https://docs.wiseparts.ai/communication/conversations --- Handle widget chats in your unified inbox. ::: :::card --- icon: i-lucide-phone title: Call Center to: https://docs.wiseparts.ai/communication/call-center --- Manage inbound calls alongside your chats. ::: :::card --- icon: i-lucide-layout-dashboard title: Dashboards to: https://docs.wiseparts.ai/workspace/dashboards --- Track widget conversations, response times, and visitors. ::: :::card --- icon: i-lucide-zap title: Automations to: https://docs.wiseparts.ai/automations/getting-started --- Trigger actions when a widget chat is tagged. ::: :: # Getting Started Learn how to create, manage, and monitor automations in WiseParts. ::callout{icon="i-lucide-info"} Automations are being superseded by [Workflows](https://docs.wiseparts.ai/workflows/getting-started), which can branch, wait and ask for approval. Both can be switched on at once so you can build your replacements before switching automations off. :: ::callout{icon="i-lucide-zap"} **Quick Overview**: Navigate to Automations to create rules that automatically perform actions when specific events occur. :: ## Accessing Automations Navigate to **Automations** to view and manage your automation rules. The automations list shows: - **Name** β€” The automation's identifier - **Event** β€” What triggers the automation - **Status** β€” Active or inactive - **Actions** β€” Quick access to edit, copy, or delete ## Creating an Automation 1. Click the **+** button 2. Enter a **Name** and optional **Description** 3. Select the [**Event**](https://docs.wiseparts.ai/events) (trigger) 4. Add [**Conditions**](https://docs.wiseparts.ai/conditions) to filter when it runs 5. Add [**Actions**](https://docs.wiseparts.ai/actions) to define what happens 6. Toggle **Active** to enable 7. Click **Save** ### Events Events determine *when* your automation runs. Each automation has one trigger event β€” such as a quote being created, a call ending, a new conversation arriving, or a tag being added to a conversation. ### Conditions Conditions determine *whether* your automation runs. Use them to filter specific scenarios, like only triggering for quotes over a certain value or calls that were missed. Without conditions, the automation runs every time the event occurs. ### Actions Actions determine *what* happens when conditions are met. You can add multiple actions to a single automation, each with an optional delay β€” except on the New Conversation event, where actions always run immediately. Common actions include sending notifications, creating tasks, assigning or closing conversations, and attempting quote recovery. ## Enabling and Disabling Toggle the **Active** switch to control whether an automation runs: - **Active** β€” The automation will execute when triggered - **Inactive** β€” The automation is paused and will not run Disabling an automation does not delete it. You can re-enable it at any time. ::callout{icon="i-lucide-lightbulb"} Disable automations temporarily when testing changes or troubleshooting issues. :: ## Copying Automations Duplicate existing automations to create variations. 1. Find the automation in the list 2. Click the **copy** icon 3. The copy opens with "(copy)" appended to the name 4. Modify as needed and save This is useful when you want to: - Create similar automations for different conditions - Test variations without affecting the original - Build on existing logic ## Viewing Logs Monitor automation execution to troubleshoot and verify rules are working correctly. ### Accessing Logs From the Automations list, click **Logs** to view execution history. ### Log Details Each log entry shows: | Column | Description | | ----------- | ----------------------------- | | **Date** | When the action ran | | **Type** | The automation that triggered | | **Action** | The specific action executed | | **Message** | Result details | ### Log Statuses | Status | Meaning | | ----------- | ----------------------------------------------- | | **Success** | Action completed successfully | | **Error** | Action failed β€” check the message for details | | **Delayed** | Action is scheduled to run later | | **Skipped** | Conditions were not met when delayed action ran | Logs show the last few days of activity by default. Adjust the date range to see older entries. ::callout{icon="i-lucide-lightbulb"} If an automation isn't working as expected, check the logs first. Look for "Skipped" entries which indicate conditions changed between trigger and execution. :: ## Next Steps ::card-group :::card --- icon: i-lucide-calendar title: Events to: https://docs.wiseparts.ai/events --- Learn about all available triggers. ::: :::card --- icon: i-lucide-filter title: Conditions to: https://docs.wiseparts.ai/conditions --- Filter when automations run. ::: :::card --- icon: i-lucide-circle-play title: Actions to: https://docs.wiseparts.ai/actions --- Define what happens when triggered. ::: :: # Events Events (triggers) determine when an automation runs. Select one trigger per automation. ::callout{icon="i-lucide-zap"} **Quick Overview**: Choose from quote, call, or conversation events to trigger your automation workflows. :: ## Available Events | Event | Fires When | | --------------------------------------------------------------------- | ---------------------------------- | | [Quote Created](https://docs.wiseparts.ai/#quote-created) | A new quote is created | | [Call Terminated](https://docs.wiseparts.ai/#call-terminated) | A phone call ends | | [Conversation Tagged](https://docs.wiseparts.ai/#conversation-tagged) | A tag is added to a conversation | | [New Conversation](https://docs.wiseparts.ai/#new-conversation) | A new inbound conversation arrives | ::note Quote Created appears only if quotes are enabled for your account. The conversation events appear only if conversations are enabled. :: ## Quote Created Fires when a new quote is created. ### Use Cases - Send recovery attempts for abandoned quotes - Notify salesmen of high-value opportunities - Auto-assign tasks for follow-up - Close quotes that were never converted ### Available Conditions | Field | Description | | ---------------------- | -------------------------------------- | | **Brand** | Filter by product brand | | **Value** | Quote total amount | | **State** | Quote state (e.g., Open) | | **Channel** | Quote origin (Email, SMS, Phone, etc.) | | **Customer ID** | Customer identifier | | **Customer Branch ID** | Branch identifier | ### Compatible Actions - Send quote recovery attempt - Assign quote task - Change quote status - Send notification ::tip{to="https://docs.wiseparts.ai/examples#quote-recovery-sequence"} See a quote recovery automation example. :: ## Call Terminated Fires when a phone call ends, whether answered or missed. ### Use Cases - Create callback tasks for missed calls - Escalate repeated missed calls - Track call outcomes with follow-up work ### Available Conditions | Field | Description | | ------------- | ------------------------------------ | | **Direction** | Inbound or Outbound | | **Status** | Call result (Answered, Missed, etc.) | ### Compatible Actions - Assign task ::tip{to="https://docs.wiseparts.ai/examples#missed-call-follow-up"} See a missed call follow-up automation example. :: ## Conversation Tagged Fires when a tag is added to a conversation, manually or by AI. ### Use Cases - Escalate urgent conversations to managers - Route tagged conversations to specialized teams - Create tasks for specific issue types - Send notifications based on conversation topics ### Available Conditions | Field | Description | | ----------------------- | ----------------------------------------------- | | **Tag** | Filter by specific tag | | **Channel** | The connected account that received the message | | **Source** | WhatsApp, SMS, Email, or Widget | | **Tagged by** | Who applied the tag (Manual or AI) | | **Assigned user** | Conversation assignee | | **Assigned team** | Team the conversation is assigned to | | **Conversation status** | Open, Pending, Snoozed, or Resolved | ### Compatible Actions - Close conversation - Assign conversation - Add tag - Assign conversation task - Send notification ::tip{to="https://docs.wiseparts.ai/communication/conversations#tagging"} Learn about tagging conversations and AI auto-tagging. :: ::tip{to="https://docs.wiseparts.ai/examples#urgent-conversation-escalation"} See an urgent conversation escalation example. :: ## New Conversation Fires when a new inbound conversation arrives, before anyone has handled it. ### Use Cases - Close spam before it reaches the inbox - Assign incoming messages to a specific person by subject or sender - Tag conversations automatically based on their content - Create a task the moment a new request arrives ### Available Conditions | Field | Description | | ----------------------- | ----------------------------------------------- | | **Sender email** | Address the message came from | | **Sender name** | Display name of the sender | | **Message subject** | Subject line | | **Message recipients** | Addresses the message was sent to | | **Message CC** | Addresses in copy | | **Message body** | Message content | | **Channel** | The connected account that received the message | | **Source** | WhatsApp, SMS, Email, or Widget | | **Conversation status** | Open, Pending, Snoozed, or Resolved | | **Assigned user** | Conversation assignee | | **Assigned team** | Team the conversation is assigned to | ### Compatible Actions - Close conversation - Assign conversation - Add tag - Assign conversation task - Send notification ::warning Actions on this event always run immediately β€” there is no delay option. Because the conversation has just arrived, actions cannot be scheduled for later. :: ::tip{to="https://docs.wiseparts.ai/examples#spam-filtering-on-arrival"} See a spam filtering example. :: ## Choosing the Right Event | If you want to... | Use this event | | --------------------------------------- | ------------------- | | Follow up on quotes | Quote Created | | Handle missed calls | Call Terminated | | Escalate urgent issues | Conversation Tagged | | Filter or route messages as they arrive | New Conversation | ::callout{icon="i-lucide-lightbulb"} Conversation Tagged and New Conversation offer the same actions. Use New Conversation when the decision depends on the incoming message itself, and Conversation Tagged when it depends on how the conversation was classified afterwards. :: ## Next Steps ::card-group :::card --- icon: i-lucide-filter title: Conditions to: https://docs.wiseparts.ai/conditions --- Filter when automations run. ::: :::card --- icon: i-lucide-circle-play title: Actions to: https://docs.wiseparts.ai/actions --- Define what happens when triggered. ::: :: # Conditions Conditions filter when an automation should execute. Use conditions to target specific scenarios rather than running on every trigger. ::callout{icon="i-lucide-zap"} **Quick Overview**: Combine conditions with AND/OR logic to precisely control when your automations run. :: ## How Conditions Work When a trigger fires, the automation checks all conditions before executing actions: 1. If **all conditions pass** β†’ Actions execute 2. If **any condition fails** β†’ Automation is skipped Without conditions, the automation runs every time the trigger fires. ## Adding Conditions 1. Click **+ Condition** in the Conditions section 2. Select a **Field** to evaluate 3. Choose an **Operator** (equals, greater than, contains, etc.) 4. Enter the **Value** to compare against ## Condition Operators | Operator | Description | Example | | ----------------------- | ------------------------------ | ---------------------------------- | | **Equal to** | Exact match | Channel = Email | | **Not equal to** | Does not match | Status β‰  Closed | | **Greater than** | Numeric comparison | Value > 1000 | | **Less than** | Numeric comparison | Value < 100 | | **Contains** | Text includes value | Brand contains "Ford" | | **Does not contain** | Text excludes value | Customer ID doesn't contain "TEST" | | **Starts with** | Text begins with value | Customer ID starts with "EU-" | | **Does not start with** | Text does not begin with value | Subject doesn't start with "Re:" | | **Ends with** | Text ends with value | Email ends with "@example.com" | | **Does not end with** | Text does not end with value | Email doesn't end with "@test.com" | Text comparisons ignore capitalisation. ## Grouping Conditions Combine multiple conditions using AND/OR logic. ### AND Logic All conditions must be true for the automation to run. **Example**: Quote value > 500 AND Channel = Phone - Runs only for phone quotes over 500 ### OR Logic Any condition can be true for the automation to run. **Example**: Channel = WhatsApp OR Channel = SMS - Runs for both WhatsApp and SMS quotes ### Nested Groups Click **+ Group** to create nested condition groups for complex logic. **Example**: (Value > 1000) AND (Channel = Email OR Channel = Phone) - Runs for high-value quotes that came through email or phone ## Conditions by Event ### Quote Created | Field | Description | Example | | ---------------------- | ------------------- | ----------------------------- | | **Brand** | Product brand | Brand = "Ford" | | **Value** | Total amount | Value > 1000 | | **State** | Quote state | State = "Open" | | **Channel** | Origin channel | Channel = "Email" | | **Customer ID** | Customer identifier | Customer ID starts with "EU-" | | **Customer Branch ID** | Branch identifier | Branch ID = "MAIN" | ::callout{icon="i-lucide-lightbulb"} Use Value conditions to target high-value opportunities for special handling. :: ### Call Terminated | Field | Description | Example | | ------------- | -------------- | --------------------- | | **Direction** | Call direction | Direction = "Inbound" | | **Status** | Call result | Status = "Missed" | ::callout{icon="i-lucide-lightbulb"} Combine Direction = Inbound AND Status = Missed to create callback tasks for missed customer calls. :: ### Conversation Tagged | Field | Description | Example | | ----------------------- | ------------------------------------------- | ---------------------------- | | **Tag** | Specific tag applied | Tag = "Urgent" | | **Channel** | Connected account that received the message | Channel = "Support inbox" | | **Source** | WhatsApp, SMS, Email, or Widget | Source = "WhatsApp" | | **Tagged by** | Who applied the tag | Tagged by = "AI (auto-tag)" | | **Assigned user** | Current assignee | Assigned user = "John Smith" | | **Assigned team** | Assigned team | Assigned team = "Support" | | **Conversation status** | Open, Pending, Snoozed, or Resolved | Conversation status = "Open" | ::callout{icon="i-lucide-lightbulb"} Use Tagged by = AI (auto-tag) to create automations that respond to AI-detected issues. :: ### New Conversation Conditions on this event look at the message that started the conversation. | Field | Description | Example | | ----------------------- | ------------------------------------------- | ------------------------------------- | | **Sender email** | Address the message came from | Sender email ends with "@company.com" | | **Sender name** | Display name of the sender | Sender name contains "Automatic" | | **Message subject** | Subject line | Message subject starts with "Invoice" | | **Message recipients** | Addresses the message was sent to | Message recipients contains "sales@" | | **Message CC** | Addresses in copy | Message CC contains "manager@" | | **Message body** | Message content | Message body contains "unsubscribe" | | **Channel** | Connected account that received the message | Channel = "Support inbox" | | **Source** | WhatsApp, SMS, Email, or Widget | Source = "Email" | | **Conversation status** | Open, Pending, Snoozed, or Resolved | Conversation status = "Open" | | **Assigned user** | Current assignee | Assigned user = "John Smith" | | **Assigned team** | Assigned team | Assigned team = "Support" | ::callout{icon="i-lucide-lightbulb"} Subject and body conditions are the most useful here β€” they let you route or discard a message based on what it actually says, before anyone opens it. :: ## Best Practices ### Start Specific Begin with specific conditions and broaden as needed. It's easier to loosen restrictions than to add them later. ### Test Incrementally Add one condition at a time and verify the automation works before adding more complexity. ### Use Value Thresholds Filter by quote value to prioritize high-value opportunities: - Value > 1000 for immediate notifications - Value > 5000 for manager alerts ### Combine Channel and Value Target specific scenarios like "high-value phone quotes" or "email quotes over 500". ## Common Patterns | Pattern | Condition | | ------------------------------ | ---------------------------------------------- | | High-value quotes | `Value > 1000` | | Specific channel | `Channel = Email` | | Missed inbound calls | `Direction = Inbound` AND `Status = Missed` | | Urgent AI-tagged conversations | `Tag = Urgent` AND `Tagged by = AI (auto-tag)` | | Likely spam on arrival | `Message subject contains "unsubscribe"` | | Excluding test data | `Customer ID does not contain "TEST"` | ## Next Steps ::card-group :::card --- icon: i-lucide-circle-play title: Actions to: https://docs.wiseparts.ai/actions --- Define what happens when conditions are met. ::: :::card --- icon: i-lucide-book-open title: Examples to: https://docs.wiseparts.ai/examples --- See real-world automation recipes. ::: :: # Actions Actions define what happens when the trigger fires and conditions are met. Add multiple actions to a single automation. ::callout{icon="i-lucide-zap"} **Quick Overview**: Chain multiple actions together with delays to create powerful automated workflows. :: ## Adding Actions 1. Click **+ Action** in the Actions section 2. Select the **Action Type** 3. Configure action parameters 4. Set an optional **Delay (minutes)** before execution You can add multiple actions to a single automation. Actions execute in the order they appear. ::note Actions on the New Conversation event have no delay option β€” they always run immediately. :: ## Quote Actions ### Send quote recovery attempt Attempt to convert an open quote by resending it to the customer. | Parameter | Description | | ------------------- | ---------------------------------------------- | | **Delay (minutes)** | Minutes to wait before sending | | **Only shared** | Only affect quotes that were previously shared | ::callout{icon="i-lucide-lightbulb"} Use multiple recovery actions with different delays to create follow-up sequences (e.g., 1 hour, then 3 hours, then 24 hours). :: **Availability**: Quote Created ### Assign quote task Create a task linked to the quote. | Parameter | Description | | ------------------- | ---------------------------------------------- | | **Delay (minutes)** | Minutes to wait before creating | | **Task type** | Category of task | | **Assigned to** | Customer Salesman, Creator, or a specific user | | **Title** | Task title | | **Due (minutes)** | When the task is due | **Availability**: Quote Created ### Change quote status Automatically update a quote's status. | Parameter | Description | | ------------------- | ---------------------------------------------- | | **Delay (minutes)** | Minutes to wait before changing | | **State** | The new state to apply | | **Only shared** | Only affect quotes that were previously shared | **Availability**: Quote Created ### Send notification Send an in-app notification about a quote. | Parameter | Description | | ------------------- | ---------------------------------------------- | | **Delay (minutes)** | Minutes to wait before sending | | **Recipient** | Customer Salesman, Creator, or a specific user | | **Subject** | Notification title | | **Message** | Notification content | **Availability**: Quote Created --- ## Call Actions ### Assign task Create a task after a call ends. | Parameter | Description | | ----------------------- | ---------------------------------------------------------------------------------------------------------------------- | | **Delay (minutes)** | Minutes to wait before creating | | **Task type** | Category of task | | **Assigned to** | Creator, or a specific user | | **Title** | Task title | | **Due (minutes)** | When the task is due | | **Conditional actions** | Optionally choose "Complete the task if the call is recovered", so the task closes itself once the customer is reached | **Availability**: Call Terminated --- ## Conversation Actions These five actions are available on both conversation events β€” Conversation Tagged and New Conversation. ### Assign conversation Assign the conversation to a user. | Parameter | Description | | ------------------- | ----------------------------------------- | | **Delay (minutes)** | Minutes to wait before assigning | | **Assigned to** | Conversation Assignee, or a specific user | ::note **Assigned to** takes one person only. If you need several people alerted, use Send notification, whose **Recipients** field accepts multiple users. :: ::warning An automation that assigns a conversation overrides the channel's [assignment rules](https://docs.wiseparts.ai/communication/conversations#assignment-rules). Once an automation sets an assignee, the conversation stays with that person and does not rotate to the next agent. :: **Availability**: Conversation Tagged, New Conversation ### Add tag Add a tag to the conversation. | Parameter | Description | | ------------------- | ------------------------------ | | **Delay (minutes)** | Minutes to wait before tagging | | **Tag** | The tag to apply | The tag is added to the conversation and recorded in its history. It is not added to the customer record. ::note A tag applied this way does not trigger Conversation Tagged automations. This prevents automations from triggering each other in a loop. :: **Availability**: Conversation Tagged, New Conversation ### Close conversation Resolve the conversation and close the thread. | Parameter | Description | | ------------------- | ------------------------------ | | **Delay (minutes)** | Minutes to wait before closing | **Availability**: Conversation Tagged, New Conversation ### Assign conversation task Create a task linked to the conversation's customer. | Parameter | Description | | ------------------- | ----------------------------------------- | | **Delay (minutes)** | Minutes to wait before creating | | **Task type** | Category of task | | **Assigned to** | Conversation Assignee, or a specific user | | **Title** | Task title | | **Due (minutes)** | When the task is due | **Availability**: Conversation Tagged, New Conversation ### Send notification Send an email or in-app notification about a conversation. | Parameter | Description | | ------------------------ | ----------------------------------------------------------------------------------- | | **Delay (minutes)** | Minutes to wait before sending | | **Recipients** | Conversation Assignee, or one or more specific users | | **Notification channel** | In-app & Email, In-app only, or Email only | | **Subject** | Notification title (supports [merge tags](https://docs.wiseparts.ai/#merge-tags)) | | **Message** | Notification content (supports [merge tags](https://docs.wiseparts.ai/#merge-tags)) | **Availability**: Conversation Tagged, New Conversation ## Action Delays Actions can be delayed to run at a specific time after the trigger. | Delay | Effect | | ---------------- | ------------------------------ | | **0 minutes** | Run immediately | | **60 minutes** | Run 1 hour after the trigger | | **240 minutes** | Run 4 hours after the trigger | | **1440 minutes** | Run 24 hours after the trigger | ::warning Delayed actions check conditions again before executing. If conditions are no longer met (e.g., the quote was already converted), the action will be skipped. :: ### Use Delays To - Space out multiple recovery attempts - Allow time for manual handling before automation kicks in - Send reminders at appropriate intervals - Avoid overwhelming customers with rapid messages ## Merge Tags Merge tags allow you to include dynamic content in notification subjects and messages. They are replaced with actual values when the notification is sent. ::note Merge tags work only in the **Subject** and **Message** of the conversation Send notification action. Elsewhere β€” task titles, for instance β€” they are left as written. :: ### Available Merge Tags | Tag | Description | | -------------------------------- | -------------------------------------- | | `{{tag.name}}` | Name of the tag that was applied | | `{{tag.color}}` | Color of the tag | | `{{tag.description}}` | Description of the tag | | `{{thread.ticket}}` | Conversation ticket number | | `{{conversation.title}}` | Conversation title | | `{{conversation.source}}` | Source (WhatsApp, SMS, Email, Widget) | | `{{conversation.status}}` | Current conversation status | | `{{conversation.contact_value}}` | Contact's phone or email | | `{{assigned_user.name}}` | Name of the assigned user | | `{{tagged_by_user.name}}` | Name of the user who applied the tag | | `{{tagged_by_type}}` | How the tag was applied (manual or ai) | ::note The tag merge tags β€” `{{tag.name}}`, `{{tag.color}}`, `{{tag.description}}`, `{{tagged_by_user.name}}` and `{{tagged_by_type}}` β€” only have a value on the Conversation Tagged event. On New Conversation there is no tag yet, so they come out empty. :: ### Example Usage **Subject**: `New {{tag.name}} conversation via {{conversation.source}}` **Message**: `A conversation has been tagged as {{tag.name}}. Ticket: #{{thread.ticket}}. Tagged by: {{tagged_by_user.name}}.` ## Actions by Trigger | Trigger | Available Actions | | ------------------- | --------------------------------------------------------------------------------------------- | | Quote Created | Send quote recovery attempt, Assign quote task, Change quote status, Send notification | | Call Terminated | Assign task | | Conversation Tagged | Close conversation, Assign conversation, Add tag, Assign conversation task, Send notification | | New Conversation | Close conversation, Assign conversation, Add tag, Assign conversation task, Send notification | ## Best Practices ### Chain Actions with Delays Create effective follow-up sequences: 1. Send recovery immediately (0 min) 2. Send reminder after 1 hour (60 min) 3. Send final reminder after 3 hours (180 min) 4. Change the quote status after 24 hours (1440 min) ### Use Appropriate Recipients - **Customer Salesman**: The user assigned to the customer - **Creator**: The user who created the quote - **Conversation Assignee**: Whoever currently holds the conversation - **Specific user**: A designated person for escalations ### Write Clear Task Titles Include context in task titles: - "Follow up on quote #123 - High value" - "Call back missed call from [Customer] " - "Review urgent conversation" ### Set Realistic Due Times - Urgent items: 30-60 minutes - Same-day follow-up: 240 minutes (4 hours) - Next-day follow-up: 1440 minutes (24 hours) ## Next Steps ::card-group :::card --- icon: i-lucide-copy title: Templates to: https://docs.wiseparts.ai/templates --- Use pre-built automations. ::: :::card --- icon: i-lucide-book-open title: Examples to: https://docs.wiseparts.ai/examples --- See complete automation recipes. ::: :: # Templates Use pre-built automation templates to get started quickly. Templates provide proven workflows that you can customize to fit your needs. ::callout{icon="i-lucide-zap"} **Quick Overview**: Browse templates, copy one that fits your needs, and customize it for your business. :: ## Accessing Templates 1. Navigate to **Automations** 2. Click the **+** button to create a new automation 3. Select the **Templates** tab 4. Browse available templates 5. Click **Copy** on a template to use it The template opens in the editor with "(copy)" appended to the name. Customize it and save. ## Available Templates ::note Templates are copied inactive. Review the settings and enable the automation when you are happy with it. Quote templates appear only if quotes are enabled; conversation templates appear only if conversations are enabled. :: ### Attempt to convert open quote Sends two recovery attempts for open quotes over 100 EUR. | Setting | Value | | ------------- | ------------------------------------------------------------ | | **Trigger** | Quote Created | | **Condition** | Value > 100 AND State = Open | | **Actions** | Send quote recovery at 60 min, Send quote recovery at 90 min | **Best for**: Converting abandoned quotes before they go cold. ::tip{to="https://docs.wiseparts.ai/examples#quote-recovery-sequence"} See a detailed quote recovery example. :: ### Automatically close open quotes after 4h Cancels quotes still open after 4 hours. | Setting | Value | | ------------- | ----------------------------------------------------------------- | | **Trigger** | Quote Created | | **Condition** | State = Open | | **Actions** | Change quote status to "Quote cancelled by automation" at 240 min | **Best for**: Keeping your quote pipeline clean by automatically closing quotes that weren't converted. ::callout{icon="i-lucide-lightbulb"} Combine this with a recovery template to first attempt conversion, then close if unsuccessful. :: ### Send notifications of big quotes Notifies the customer's salesman immediately when an open quote exceeds 1000 EUR. | Setting | Value | | ------------- | --------------------------------------------------- | | **Trigger** | Quote Created | | **Condition** | Value > 1000 AND State = Open | | **Actions** | Send notification to Customer Salesman, immediately | **Best for**: Ensuring high-value opportunities get immediate attention. ### Notify assignee when a tag is applied Tells whoever holds the conversation that someone tagged it by hand. | Setting | Value | | ------------- | ----------------------------------------------------------------------- | | **Trigger** | Conversation Tagged | | **Condition** | Tagged by = Manual | | **Actions** | Send notification to Conversation Assignee, In-app & Email, immediately | **Best for**: Keeping the assignee in the loop when a colleague flags something on their conversation. ::tip{to="https://docs.wiseparts.ai/examples#urgent-conversation-escalation"} See a fuller escalation example. :: ### Close spam conversations Closes an arriving conversation whose subject matches keywords you choose. | Setting | Value | | ------------- | -------------------------------------------------- | | **Trigger** | New Conversation | | **Condition** | Message subject contains β€” *fill in your keywords* | | **Actions** | Close conversation, immediately | **Best for**: Keeping newsletters and automated mail out of the inbox. ::warning This template ships with an empty keyword, which matches nothing. Fill in the subject keywords before enabling it, otherwise the automation never runs. :: ## Customizing Templates After copying a template, adjust values to fit your business: - **Value thresholds** β€” Match your typical quote sizes - **Delay times** β€” Set based on your response time goals - **Recipients** β€” Route notifications to the right people - **Keywords** β€” Make text conditions specific enough to avoid false matches ## Next Steps ::card-group :::card --- icon: i-lucide-book-open title: Examples to: https://docs.wiseparts.ai/examples --- See detailed automation recipes. ::: :::card --- icon: i-lucide-play title: Getting Started to: https://docs.wiseparts.ai/getting-started --- Learn how to create and manage automations. ::: :: # Examples Learn from practical automation examples that solve common business challenges. ::callout{icon="i-lucide-zap"} **Quick Overview**: Copy these patterns and customize the values to fit your business needs. :: ## Quote Recovery Sequence Convert more abandoned quotes with a timed follow-up sequence. ### The Challenge Customers often create quotes but don't complete the purchase. Without follow-up, these opportunities are lost. ### The Solution Create an automation that sends recovery attempts at increasing intervals. | Setting | Value | | -------------- | ------------------------- | | **Name** | Quote Recovery Sequence | | **Trigger** | Quote Created | | **Conditions** | Value > 200, State = Open | **Actions**: 1. Send quote recovery attempt β€” Delay: 60 minutes 2. Send quote recovery attempt β€” Delay: 180 minutes (3 hours) 3. Send quote recovery attempt β€” Delay: 1440 minutes (24 hours) 4. Change quote status to "Quote cancelled by automation" β€” Delay: 2880 minutes (48 hours) ### Why It Works - First attempt catches customers who got distracted - Second attempt reaches those who needed time to decide - Third attempt is a final reminder - Auto-close keeps the pipeline clean ::callout{icon="i-lucide-lightbulb"} Start with conservative timing and adjust based on your conversion rates. :: ## Urgent Conversation Escalation Ensure urgent customer issues get immediate attention from managers. ### The Challenge When AI detects an urgent issue or a team member tags a conversation as urgent, managers need to know immediately. ### The Solution Create an automation that notifies managers when urgent tags are applied. | Setting | Value | | -------------- | ----------------------- | | **Name** | Urgent Issue Escalation | | **Trigger** | Conversation Tagged | | **Conditions** | Tag = Urgent | **Actions**: 1. Send notification β€” Delay: 0 minutes - Recipients: [Manager name] - Notification channel: In-app & Email - Subject: `Urgent: {{tag.name}} issue needs attention` - Message: `A conversation has been flagged as urgent. Ticket #{{thread.ticket}}. Source: {{conversation.source}}. Assigned to: {{assigned_user.name}}.` 2. Assign conversation task β€” Delay: 30 minutes - Assigned to: [Manager name] - Task type: Follow-up - Title: Review urgent conversation - Due: 60 minutes ### Why It Works - Immediate notification ensures visibility - Backup task ensures follow-through if notification is missed - Merge tags provide context without opening the conversation ## Missed Call Follow-up Never let a missed call go unanswered. ### The Challenge Missed inbound calls represent potential lost business. Sales teams need to call back promptly. ### The Solution Create an automation that creates callback tasks for missed calls. | Setting | Value | | -------------- | ------------------------------------ | | **Name** | Missed Call Callback | | **Trigger** | Call Terminated | | **Conditions** | Direction = Inbound, Status = Missed | **Actions**: 1. Assign task β€” Delay: 0 minutes - Task type: Phone Call - Assigned to: Creator - Title: Return missed call - Due: 60 minutes - Conditional actions: Complete the task if the call is recovered ### Why It Works - Immediate task creation ensures follow-up - The task title carries the caller's number, so nobody has to look it up - A conditional action closes the loop if the customer is called back before the task is due - 60-minute due time creates urgency ::note Assign task is the only action available on Call Terminated. To alert someone as well, have them assigned the task rather than looking for a notification action. :: ## High-Value Quote Notification Alert the right people when big opportunities come in. ### The Challenge High-value quotes deserve special attention but can get lost in the daily volume. ### The Solution Create an automation that notifies relevant team members of high-value opportunities. | Setting | Value | | -------------- | ---------------------- | | **Name** | High-Value Quote Alert | | **Trigger** | Quote Created | | **Conditions** | Value > 5000 | **Actions**: 1. Send notification β€” Delay: 0 minutes - Recipient: Customer Salesman - Subject: High-value quote created - Message: A quote over 5000 EUR has been created and needs your attention. 2. Send notification β€” Delay: 0 minutes - Recipient: [Sales Manager] - Subject: High-value quote notification - Message: A high-value quote has been created. Please ensure proper follow-up. 3. Assign quote task β€” Delay: 0 minutes - Task type: Follow-up - Assigned to: Customer Salesman - Title: Priority follow-up on high-value quote - Due: 120 minutes ### Why It Works - Both salesman and manager are notified - Task ensures documented follow-up - 2-hour due time balances urgency with realistic response time ## Spam Filtering on Arrival Keep newsletters and automated mail out of the team's inbox. ### The Challenge Marketing mail and automated notices land in shared inboxes and get counted, assigned, and worked like real customer requests. ### The Solution Close them the moment they arrive, before assignment rules hand them to anyone. | Setting | Value | | -------------- | ------------------------------------------------------------------------- | | **Name** | Close Newsletter Mail | | **Trigger** | New Conversation | | **Conditions** | Message body contains "unsubscribe" OR Sender email starts with "noreply" | **Actions**: 1. Add tag β€” Immediate - Tag: Spam 2. Close conversation β€” Immediate ### Why It Works - Closing on arrival keeps response-time metrics honest - The tag leaves a trail, so you can review what was filtered and loosen the conditions if needed - No delay is possible on this trigger, which is exactly what you want here ::warning Test with the automation inactive first, or with the tag action alone. A condition that is too broad will close real customer messages, and nobody will see them. :: ## Route Incoming Mail by Subject Send specific requests straight to the person who handles them. ### The Challenge Everything arrives in one shared inbox and gets distributed evenly, even though certain requests always belong to the same person. ### The Solution Assign on arrival when the subject identifies the request type. | Setting | Value | | -------------- | ----------------------------------- | | **Name** | Warranty Claims to Ana | | **Trigger** | New Conversation | | **Conditions** | Message subject contains "warranty" | **Actions**: 1. Assign conversation β€” Immediate - Assigned to: Ana Silva 2. Add tag β€” Immediate - Tag: Warranty ### Why It Works - The right person sees it first, without a manual triage step - The tag makes the queue filterable later ::note An automation that assigns a conversation wins over the channel's [assignment rules](https://docs.wiseparts.ai/communication/conversations#assignment-rules) β€” the conversation stays with the person the automation picked. Assign conversation takes one person; to alert several, add a Send notification action too. :: ## Best Practices ### Start Simple Begin with one or two actions. Add complexity only when you understand how the basic automation performs. ### Use Delays Strategically - **Immediate** (0 min): Notifications, urgent tasks - **Short delay** (30-60 min): Give time for manual handling - **Medium delay** (3-4 hours): Follow-up attempts - **Long delay** (24+ hours): Final reminders, cleanup ### Test Before Deploying 1. Create the automation as inactive 2. Review all conditions and actions 3. Enable and monitor the first few executions 4. Adjust based on results ### Monitor and Iterate Check automation logs regularly to: - Verify automations are triggering correctly - Identify skipped actions (conditions not met) - Find opportunities for improvement ### Consider Customer Experience - Don't send too many messages too quickly - Space out recovery attempts appropriately - Use professional, helpful language ## Related ::card-group :::card --- icon: i-lucide-play title: Getting Started to: https://docs.wiseparts.ai/getting-started --- Learn the basics of creating automations. ::: :::card --- icon: i-lucide-copy title: Templates to: https://docs.wiseparts.ai/templates --- Start with pre-built automations. ::: :: # Importers Import data into WiseParts from CSV or Excel files. Importers let you bulk-load customers, sales history, quotes, and other records from your external systems. ::callout{icon="i-lucide-zap"} **Quick Overview**: Upload a file, map columns to system fields, preview the data, then run the import. :: --- ## Import Process The import wizard guides you through four steps: | Step | What You Do | | ---------------------- | ---------------------------------------------- | | **1. Select Type** | Choose an import type (customers, sales, etc.) | | **2. Upload File** | Drag and drop a CSV or Excel file | | **3. Map Columns** | Match your file columns to system fields | | **4. Review & Import** | Preview data, configure options, run import | Navigate to **Data > Importers** to begin. --- ## Available Import Types | Type | Description | Key Information | | --------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------ | | **Customers** | Customer master data | Name, address, contact info, tax ID | | **Customer Branches** | Locations for multi-site customers | Linked to parent customer, separate address | | **Contacts** | Emails and phone numbers | Linked to customer / branch, or unattached. [Learn more](https://docs.wiseparts.ai/customers/contacts) | | **Sales** | Transaction history | Date, customer, brand, quantity, values | | **Due Docs** | Outstanding invoices | Customer, document ID, dates, amount owed | | **Quotes** | Quote/order records | Customer, brand, status, channel, value | | **Brand Families** | Product categorization | Groups brands into families for analytics | ::tip{to="https://docs.wiseparts.ai/getting-started/data-integrations"} Most importers require an identifier from your source system to match records correctly. :: --- ## File Format Requirements - **Supported formats**: CSV, Excel (.xlsx) - **First row**: Must contain column headers - **Encoding**: UTF-8 recommended for special characters - **Date format**: YYYY-MM-DD (ISO format) preferred --- ## Column Mapping The system provides an interactive mapping interface: 1. **Auto-detection**: Common column names are matched automatically 2. **Manual mapping**: Select from dropdown or drag and drop 3. **Required fields**: Marked with asterisk (\*) 4. **Skip columns**: Leave unmapped to ignore ::callout{icon="i-lucide-lightbulb"} **Tip**: Download the template for each import type to see the expected column format. :: --- ## Import Options Each import type has specific options to control how data is processed: ### Customers - **Create as prospects**: New customers start as prospects - **Update existing**: Modify existing customer records - **Clear salesmen**: Remove salesman assignments ### Sales - **Replace period**: Delete and re-import data for the selected date range - **Delete all**: Clear all sales before importing ### Due Docs - **Delete all**: Clear all due documents before importing - **Delete by branch**: Clear only documents for specific branches ### Quotes - **Replace period**: Delete and re-import for the selected date range - **Delete all**: Clear all quotes before importing --- ## Import Status | Status | Meaning | | ------------------------- | ------------------------------ | | **Running** | Import is in progress | | **Completed** | All rows imported successfully | | **Completed with Errors** | Some rows failed validation | ::callout{icon="i-lucide-info"} Imports run in the background. The status updates automatically as the import progresses. :: --- ## Error Handling - **Preview validation**: Warnings displayed before running the import - **Success/error counts**: Shown after completion - **Failed rows**: Can be exported for correction and re-import - **Atomic processing**: Successfully imported rows are kept even if some fail --- ## Automatic Imports For recurring imports, you can set up automatic file transfers: | Method | Description | | ------------------ | ---------------------------------------- | | **SFTP WiseParts** | Upload files to WiseParts' secure server | | **FTP External** | Connect to your own FTP server | Automatic imports can be scheduled to run at regular intervals, picking up new files as they appear. Each organization can have multiple SFTP connections configured in WiseParts. --- ## Tips - **Import order matters**: Import customers before sales (sales reference customers) - **Use templates**: Download and fill in the provided templates - **Test first**: Verify mapping with a small sample before importing everything # Exporters Create automated routines to export data. ## Creating an Exporter 1. Navigate to **Data > Exporters** 2. Click **+** 3. Configure: | Field | Description | | ------------- | -------------- | | **Name** | Export name | | **Interval** | Schedule | | **Active** | Enable/disable | | **Data Type** | What to export | ## Managing Exporters | Action | Description | | ------------- | --------------- | | **Execute** | Run immediately | | **View Logs** | Check history | | **Edit** | Modify settings | | **Delete** | Remove exporter | ## Export Destinations Exported data can be delivered to different destinations: | Destination | Description | | ----------- | ----------------------------------------------- | | **Email** | Send the exported file as an email attachment | | **SFTP** | Upload the file to an SFTP server automatically | ## Scheduled Exports When an exporter is set to an interval and marked as active, it runs automatically on the configured schedule. Each execution generates a file and delivers it to the configured destination. You can review past executions in the exporter's log. ## Schedule Examples - "Every day at 8:00 AM" - "Every Monday at 6:00 AM" - "First day of month at 12:00 AM" # Integrations Connect WiseParts to external systems for automated data synchronization. ::callout{icon="i-lucide-zap"} **Quick Overview**: Configure connections to source systems, FTP servers, call center platforms, and external APIs. Each integration can be enabled independently and has its own configuration options. :: ## Integration Categories Integrations are grouped by type: | Category | Description | | ----------------- | -------------------------------------------- | | **Source system** | ERP and business management systems | | **FTP** | File-based connections to an SFTP/FTP server | | **IMPORTER** | Scheduled data imports | | **EXPORTER** | Scheduled data exports | | **CATALOG** | Product catalog data (for example TecDoc) | | **CALLCENTER** | Phone system integrations | | **PUBLIC API** | External API access | ## Integration Status Each integration shows one of three states: | Status | Indicator | Meaning | | --------------- | --------------- | ------------------------- | | **Enabled** | Green dot | Active and syncing | | **Available** | Gray outline | Ready to configure | | **Unavailable** | Gray background | Not included in your plan | Some integrations may show a **Private** badge, indicating a custom integration specific to your organization. ## Configuring an Integration 1. Navigate to **Integrations** 2. Click an integration card 3. Read the **How it works** section to understand what the integration does 4. Click **Enable** to activate the integration 5. Fill in the required configuration fields 6. Click **Confirm** to save ::note Each integration has different configuration options. The fields shown depend on the integration type. :: ## Token Management Some integrations use API tokens for authentication: - Click the **refresh** icon to generate a new token - Click the **copy** icon to copy the token to your clipboard - **Copy your token before saving** β€” tokens are hidden after you save ::callout{icon="i-lucide-shield"} If you lose a token, generate a new one. The previous token will stop working. :: ::note Custom integrations can be configured for your organization. Contact support for integration options not listed here. :: ## Database export connectors Some source system integrations connect directly to your source database and export CSV files to your SFTP server for the importers to process. In addition to scheduled runs, admins can trigger exports manually. ### Files to import Choose which entity types the connector exports β€” for example customers, branches, sales, due documents, products, and stock. Stock can come from movement files or snapshot files depending on your setup. ### Document type filters When your connector supports it, restrict which ERP document codes count as sales, orders, or internal documents. Leave filters empty to use system defaults. Options load after database credentials are saved. ### Salesman mapping Map source-system salesperson codes to WiseParts **Salesman ID** values. Codes you do not map pass through unchanged. You can optionally store the original source code in a sales custom field for filtering in Analytics 360. ### Warehouse mapping Map source warehouse or branch codes to canonical codes WiseParts uses for reporting. ### Generate import files When the integration is enabled, open the integration detail page and choose **Generate Import Files** from the actions menu. 1. Pick a **Sales start date** β€” the earliest sale date to include in the export 2. Review the file list (brands, customers, branches, sales, due documents, products, stock) 3. Confirm β€” progress appears per file; files upload to your SFTP server for automatic import Use this when you need a one-off refresh instead of waiting for the next scheduled export. ### Intraday sales export Some connectors can re-export **today's sales** on a short interval during business hours (for example every 30 minutes between configured start and end times). Nightly full exports still run on their own schedule. Pair intraday import with **Organization > General > Customers Management > Sales reporting cutoff > Include current day (intraday import)** so dashboards and Analytics 360 can include same-day sales. See [General settings](https://docs.wiseparts.ai/organization/general). ### Order push options When your connector supports outbound orders, additional settings may appear on the integration card: | Area | What it controls | | ------------------------ | -------------------------------------------------------------------------------------------- | | **Carriers / routes** | Which delivery options operators can pick; map warehouse routes to source-system carrier IDs | | **Payment methods** | Module codes and labels operators choose at checkout | | **Manual lines** | Whether free-text, operator-priced lines are allowed and how many per order | | **Price pinning** | Whether entered prices are preserved when the source system recalculates totals | | **Order types** | How WiseParts order types map to source-system classifications | | **Reference IDs** | External reference fields on pushed orders, for matching back to the source system | | **Failed push handling** | Retry behaviour when a push partially succeeds or the remote system rejects totals | Exact fields depend on the connector. Configure them before agents use delivery or payment pickers in the quote builder. ### Real-time features The same integration may also expose optional real-time cards β€” orders, invoices, product lookup, credit limits, and similar β€” independent of the batch export pipeline. # Integration Logs View logs from all system integrations to monitor activity and troubleshoot issues. ::callout{icon="i-lucide-zap"} **Quick Overview**: Integration logs record every data exchange between WiseParts and your connected systems. Use them to verify successful syncs, diagnose failures, and track API activity. :: ## Accessing Logs Navigate to **Integrations > Logs**. ## Log Information | Column | Description | | ----------------- | ----------------------------------- | | **Date** | When event occurred | | **Type** | Source System, FTP, Voice, Exporter | | **Endpoint** | URL or service | | **Response Time** | Request duration | | **Status** | Success, Error, Warning, Cached | ## Filtering Options | Filter | Description | | --------------- | ----------------------------------------------------- | | **Date Range** | Select start and end dates to narrow results | | **Type** | Filter by integration type (Source System, FTP, etc.) | | **Only Errors** | Toggle to show only failed requests | | **Search** | Find logs by endpoint URL or response content | ## Log Details Expand any entry to view: - Full request payload (JSON) - Complete response - Attached files ::callout{icon="i-lucide-info"} Log details are essential for troubleshooting integration issues. Share them with support when reporting problems. :: # Overview Prospecting helps your team discover new business opportunities by finding potential customers near your existing territory. The system automatically searches for businesses, filters out duplicates, and presents qualified leads ready for your sales team to visit. ::callout{icon="i-lucide-zap"} **Quick Overview**: Discover nearby businesses automatically, assign leads to your team, track visits and conversions, and watch prospects become paying customers β€” all from within your existing workflow. :: ## How Prospecting Works The prospecting workflow follows four stages: | Stage | What Happens | | ------------ | -------------------------------------------------------------------------------- | | **Discover** | The system searches for businesses in your territory using external data sources | | **Qualify** | Automatic matching filters out businesses that are already your customers | | **Assign** | Managers assign qualified leads to sales reps for visits | | **Convert** | After a successful visit, convert the lead into a customer record | --- ## Prospecting Workspace The Prospecting workspace is organized into four tabs: | Tab | Purpose | | ------------------ | ----------------------------------------------------------------------------- | | **Overview** | Team stats, harvested leads per rep, discovery leaderboard | | **Prospects** | Customers currently in a prospect stage, ready to manage as regular customers | | **Review Matches** | Leads flagged as possible matches with existing customers | | **Leads Database** | All discovered leads with map and list views | ### Stats Overview Three cards at the top of the Overview summarize the state of the funnel: - **Prospect Customers** β€” Customers that are currently in a prospect stage - **Pending Reviews** β€” Leads that may match existing customers and need a manager decision - **Active Reps** β€” Sales reps with harvested leads assigned to them ### Harvested Leads per Rep A horizontal bar for every sales rep shows how many leads they've harvested in the field, making it easy to spot under- and over-indexed reps. ### Discovery Leaderboard Tracks the full prospect-to-customer journey for every sales rep: | Column | What It Shows | | --------------- | ---------------------------------------------------------------------------- | | **Prospecting** | Customers the rep is currently pursuing (unqualified or qualified prospects) | | **Converted** | Customers the rep discovered that are now active | | **Dormant** | Customers the rep discovered that went dormant | | **Total** | Everyone the rep has discovered, regardless of current stage | | **Purchased** | Discovered customers that have placed at least one order | | **Revenue** | Revenue generated by the rep's discovered customers | Reps without activity are still listed, greyed out, so managers can see coverage gaps. ::note A customer counts toward a rep once they enter a prospect stage β€” whether they came from a harvested lead or were created manually. :: --- ## Ways to Discover Leads Prospecting integrates into your daily workflow through multiple entry points: ::card-group :::card --- icon: i-lucide-map title: Prospecting Map to: https://docs.wiseparts.ai/prospecting/discovering-leads --- Browse the map and search for businesses in specific areas. ::: :::card --- icon: i-lucide-map-pin title: Snap Activity to: https://docs.wiseparts.ai/prospecting/snap-activity --- Find nearby leads while on the road, right from the activity toolbar. ::: :::card --- icon: i-lucide-route title: Route Planning to: https://docs.wiseparts.ai/prospecting/route-planning --- Automatically include leads when planning sales routes. ::: :: --- ## Lead Lifecycle Every lead goes through a clear lifecycle: 1. **Discovered** β€” A business is found and added to your leads database 2. **Matched** β€” The system checks if the business already exists as a customer 3. **Available** β€” No match found; the lead is ready for assignment 4. **Assigned** β€” A sales rep is responsible for visiting 5. **Visited** β€” The rep visited the location 6. **Converted** β€” The lead becomes a customer in your system Leads that don't result in a conversion can be marked as **Not Interested** or **Blacklisted** to prevent them from appearing again. Once a lead is converted β€” or a prospect is created manually β€” the customer is tracked in the Discovery Leaderboard through every stage that follows: active, dormant, and revenue contribution. --- ## Related Features ::card-group :::card --- icon: i-lucide-user-plus title: Prospects to: https://docs.wiseparts.ai/customers/prospects --- Manage customer records created from converted leads. ::: :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Log visits and track interactions with leads. ::: :::card --- icon: i-lucide-route title: Route Planning to: https://docs.wiseparts.ai/prospecting/route-planning --- Include leads in your daily sales routes. ::: :: # Discovering Leads The Prospecting map lets you explore your territory and discover businesses that could become customers. Search any area to find nearby businesses, view details, and start building your lead pipeline. ::callout{icon="i-lucide-zap"} **Quick Overview**: Click anywhere on the map to search for businesses in that area. The system automatically finds nearby businesses, checks for duplicates against your customer database, and shows only new leads worth pursuing. :: ## Using the Prospecting Map ### Searching an Area 1. Open **Prospecting** from the hub menu 2. Go to the **Leads** tab 3. Click on the map where you want to search 4. The system searches for businesses within the selected radius 5. New leads appear as markers on the map ### Map Markers The map uses different markers to help you distinguish between leads and existing customers: | Marker | Meaning | | ------------------- | ------------------------------------------- | | **Lead marker** | A new business that could become a customer | | **Customer marker** | An existing customer in your database | ### Lead Details Click on a lead marker to view: - **Business name** and category - **Address** and distance from search center - **Phone number** (if available) - **Website** (if available) - **VAT/Tax ID** (if available) - **Rating** and review count (if available) --- ## How Discovery Works When you search an area, the system: 1. **Searches external sources** for businesses matching your configured categories 2. **Checks for duplicates** by comparing names, addresses, phone numbers, and tax IDs against your existing customer database 3. **Filters results** to show only genuine new opportunities 4. **Calculates a data quality score** based on how much information is available for each lead ### Automatic Deduplication The system uses multiple signals to prevent duplicates: | Signal | What It Checks | | ------------------- | ------------------------------------------------ | | **Tax ID** | Exact VAT/tax number match | | **Phone** | Normalized phone number comparison | | **Website** | Email domain matching | | **Location + Name** | Proximity combined with business name similarity | When a lead closely matches an existing customer, it's flagged for [review](https://docs.wiseparts.ai/prospecting/managing-leads#reviewing-matches) rather than shown directly. --- ## Search Categories The types of businesses discovered depend on your organization's configured search categories. Common categories include automotive dealers, repair shops, parts suppliers, and related businesses. ::tip{to="https://docs.wiseparts.ai/prospecting/settings"} Search categories and other discovery settings are configured in Prospecting settings. :: --- ## Lead Quota Your organization has a maximum number of active leads. The quota bar on the dashboard shows current usage. When the quota is reached, new searches won't add more leads until existing ones are converted, archived, or removed. --- ## Related Features ::card-group :::card --- icon: i-lucide-clipboard-list title: Managing Leads to: https://docs.wiseparts.ai/prospecting/managing-leads --- Assign and track leads after discovering them. ::: :::card --- icon: i-lucide-map-pin title: Snap Activity to: https://docs.wiseparts.ai/prospecting/snap-activity --- Discover leads while out in the field. ::: :::card --- icon: i-lucide-settings title: Settings to: https://docs.wiseparts.ai/prospecting/settings --- Configure search categories and discovery preferences. ::: :: # Managing Leads Once leads are discovered, managers assign them to sales reps for visits. The system also flags leads that might match existing customers, so you can review them before they reach your team. ::callout{icon="i-lucide-zap"} **Quick Overview**: Assign leads to reps manually or let the system auto-assign based on territory. Review flagged matches to prevent duplicates. Track assignment status from to-visit through conversion. :: ## Assigning Leads ### Manual Assignment 1. Open **Prospecting** from the hub menu 2. Select leads from the map or list 3. Click **Assign to Rep** β€” in bulk from the toolbar or on a single lead 4. Choose a sales rep from the list β€” only users with the **Sales Rep** role appear Prospects can only be assigned to sales reps. If you try to assign elsewhere, the action is rejected. ### Auto-Assign The auto-assign feature distributes unassigned leads based on territory: 1. Click **Auto-Assign** in the toolbar 2. The system finds the nearest sales rep for each lead (based on their existing customer locations) 3. Review the proposed assignments 4. Confirm to apply ### Clearing Assignments Managers can clear assignments to reassign leads: 1. Select the assignments to clear 2. Click **Clear Assignments** 3. The leads return to the unassigned pool --- ## Assignment Status Each assignment moves through a clear workflow: | Status | Meaning | | ------------------ | ----------------------------------------- | | **To Visit** | Assigned and waiting for the rep to visit | | **Visited** | The rep has visited the location | | **Converted** | The lead has been converted to a customer | | **Not Interested** | The rep determined this isn't a good fit | | **Expired** | The assignment wasn't acted on in time | --- ## Reviewing Matches When the system detects a lead might already be one of your customers, it flags it for review. This prevents your team from visiting businesses you already work with. ### Match Confidence | Confidence | What It Means | Action Needed | | ---------- | ------------------------------------------------------------------- | ------------------------------ | | **High** | Very likely the same business (matching tax ID or multiple signals) | Automatically hidden from reps | | **Medium** | Possible match (shared phone or website domain) | Requires manager review | | **Low** | Slight similarity (nearby location with similar name) | Available to reps, reviewable | ### Reviewing a Match 1. Go to the **Matches** tab in Prospecting 2. The pending review count shows in the tab badge 3. For each match, compare the lead details with the existing customer 4. Choose: - **Confirm** β€” Yes, this is the same business (lead is hidden) - **Reject** β€” No, this is a different business (lead becomes available to reps) ::note High-confidence matches (like tax ID matches) are automatically confirmed. You'll mainly review medium-confidence matches. :: --- ## Blacklisting Leads If a lead is not relevant to your business (wrong industry, closed, etc.), blacklist it to prevent it from appearing in future searches. ### From the Leads View 1. Find the lead in the map or list 2. Click the blacklist button 3. Confirm the action ### From Snap Activity When viewing leads on the road, you can blacklist directly from the [Snap Activity](https://docs.wiseparts.ai/activities/snap-activity) panel. ::caution Blacklisting is permanent. The lead won't appear in future searches or assignments. :: --- ## Tracking Progress ### Overview Dashboard The Prospecting Overview shows: - Prospect customers, pending reviews, and active reps at a glance - Harvested Leads per Rep β€” how many leads each rep has captured in the field - Discovery Leaderboard β€” full prospect-to-customer journey for every rep ### Discovery Leaderboard Every sales rep appears on the leaderboard, even those without activity. The columns track the full lifecycle of customers they discovered: | Column | Description | | --------------- | ----------------------------------------------------------------- | | **Prospecting** | Customers currently in an unqualified or qualified prospect stage | | **Converted** | Customers that became active | | **Dormant** | Customers that went dormant after conversion | | **Total** | Everyone the rep has discovered, regardless of current stage | | **Purchased** | Discovered customers with at least one order | | **Revenue** | Revenue generated from the rep's discovered customers | ::note Both leads captured in the field and prospects created manually count toward a rep β€” as soon as a customer enters a prospect stage, it joins the leaderboard. :: --- ## Related Features ::card-group :::card --- icon: i-lucide-map title: Discovering Leads to: https://docs.wiseparts.ai/prospecting/discovering-leads --- Find new leads to assign. ::: :::card --- icon: i-lucide-user-check title: Converting Leads to: https://docs.wiseparts.ai/prospecting/converting-leads --- Turn qualified leads into customers. ::: :::card --- icon: i-lucide-settings title: Settings to: https://docs.wiseparts.ai/prospecting/settings --- Configure assignment expiry and cooldown periods. ::: :: # Converting Leads When a lead is ready to become a customer, convert it directly from the prospecting interface. The system creates a customer record with all the lead's information pre-filled, saving your team from manual data entry. ::callout{icon="i-lucide-zap"} **Quick Overview**: Convert a lead with one click. The system creates a customer record, transfers the business details, assigns the sales rep, and notifies the team when the first sale comes in. :: ## Converting a Lead ### From the Prospecting Map 1. Click on the lead marker 2. Click the **Convert** button 3. A new customer record is created automatically ### From Snap Activity When you discover a lead on the road: 1. Open the [Snap Activity](https://docs.wiseparts.ai/activities/snap-activity) panel 2. Find the lead in the Leads section 3. Tap the **+** button to convert --- ## What Happens During Conversion When you convert a lead: | Action | Details | | ----------------------- | ------------------------------------------------------------------------------ | | **Customer created** | A new customer record is created with the lead's name, address, phone, and VAT | | **Sales rep assigned** | The rep who had the assignment becomes the customer's salesperson | | **Lead status updated** | The lead is marked as Converted and removed from the active pool | | **Assignment closed** | Any active assignment is marked as Converted | | **Prospect stage set** | The new customer starts as a Qualified prospect | --- ## After Conversion The converted customer appears in your regular [customer list](https://docs.wiseparts.ai/customers/customer-list) with a prospect badge. From there: - **Log activities** β€” Visit the new customer and record your interactions - **Build the relationship** β€” Add contacts, notes, and tasks - **Track sales** β€” Once orders start flowing, the prospect stage progresses automatically ### Prospect Stages After conversion, the customer progresses through stages: | Stage | Meaning | | ------------- | ----------------------------------------- | | **Qualified** | Recently converted, actively being worked | | **Active** | Regular engagement and transactions | | **Dormant** | No activity for the configured period | ::tip{to="https://docs.wiseparts.ai/customers/prospects"} Learn more about working with prospect customer records. :: --- ## First Sale Notification When a converted prospect places their first order, the system sends a notification to the rep who originally discovered the lead. This closes the feedback loop and helps your team see the results of their prospecting efforts. --- ## Related Features ::card-group :::card --- icon: i-lucide-user-plus title: Prospects to: https://docs.wiseparts.ai/customers/prospects --- Manage converted prospect customer records. ::: :::card --- icon: i-lucide-clipboard-list title: Managing Leads to: https://docs.wiseparts.ai/prospecting/managing-leads --- Assign and track leads before conversion. ::: :::card --- icon: i-lucide-activity title: Activities to: https://docs.wiseparts.ai/activities/activities --- Log visits with your new customers. ::: :: # Snap Activity When Prospecting is enabled, the [Snap Activity](https://docs.wiseparts.ai/activities/snap-activity) panel gains a **Leads** section below the nearby customers list. This lets sales reps discover and act on leads without leaving the field. ::callout{icon="i-lucide-zap"} **Quick Overview**: Snap Activity shows nearby leads alongside your customers. Convert promising leads into customers, blacklist irrelevant ones, or search for more β€” all from the same panel you already use to find nearby customers. :: ## What Changes in Snap Activity With Prospecting enabled, the Snap Activity panel adds: | Addition | Description | | -------------------- | ----------------------------------------------------------------------------- | | **Leads section** | Shows existing leads near your current location, below the customer list | | **Search button** | "Find Prospects Nearby" triggers a live search for new businesses in the area | | **Convert button** | Instantly convert a lead into a customer record | | **Blacklist button** | Permanently exclude an irrelevant lead from future results | | **Lead details** | Expandable details showing address, phone, website, VAT, and rating | ### Converting a Lead Tap the **+** button next to a lead to convert it. The lead moves to the customers section with a "New" badge, and you can immediately create an activity for the new customer. ### Blacklisting a Lead Tap the **cancel** button, then confirm. The lead is permanently removed and won't appear in future searches. ### Searching for More Tap **Find Prospects Nearby** at the bottom of the Leads section. Each search uses [credits](https://docs.wiseparts.ai/billing/credits) β€” the estimated cost is displayed before you search. ### Auto-Assign by Territory If enabled, leads captured from Snap Activity are automatically assigned to the rep who harvested them β€” but only for businesses inside one of that rep's territories. Leads outside any assigned territory stay in the general pool for managers to review. ::tip{to="https://docs.wiseparts.ai/prospecting/settings"} Turn on **Auto-assign by territory** in Prospecting settings under Harvesting. :: --- ## Radius and Filtering The radius selector (1–5 km) affects both customers and leads. Changing the radius refreshes the leads list and clears any previous search results. --- ## Controlling This Integration The Leads section only appears when all of the following are true: - Prospecting is enabled for your organization - The "Allow harvesting in Snap Activity" setting is turned on - You have permission to view prospecting ::tip{to="https://docs.wiseparts.ai/prospecting/settings"} Manage this setting in Prospecting settings under Harvesting. :: --- ## Related Features ::card-group :::card --- icon: i-lucide-map-pin title: Snap Activity to: https://docs.wiseparts.ai/activities/snap-activity --- Full guide to finding nearby customers and logging visits. ::: :::card --- icon: i-lucide-map title: Discovering Leads to: https://docs.wiseparts.ai/prospecting/discovering-leads --- Use the full prospecting map for broader searches. ::: :::card --- icon: i-lucide-settings title: Settings to: https://docs.wiseparts.ai/prospecting/settings --- Configure Snap Activity integration. ::: :: # Route Planning When Prospecting is enabled, the [Traveller](https://docs.wiseparts.ai/customers/traveller) route planner can include leads alongside regular customer visits. This means your sales team discovers new business while covering their existing territory β€” no extra effort required. ::callout{icon="i-lucide-zap"} **Quick Overview**: Enable discovery mode in Traveller to mix leads into planned routes. The system scores leads by data quality, freshness, and priority, and can even auto-discover new businesses along your route areas. :: ## What Changes in Traveller With Prospecting enabled, the route planner adds: | Addition | Description | | ------------------------ | ------------------------------------------------------------- | | **Discovery per day** | Configure how many leads to include in each day's route | | **Automatic harvesting** | Optionally search for new businesses in your route areas | | **Lead candidates** | Existing leads appear as route candidates alongside customers | --- ## How Leads Are Selected The route planner scores leads to pick the best candidates for each day: | Factor | Effect | | ---------------- | ----------------------------------------------------------------------- | | **Data quality** | Leads with more complete information (phone, address, VAT) score higher | | **Freshness** | Recently discovered leads get a temporary boost | | **Priority** | High-priority assignments are favored | | **Exposure** | Leads planned before but not visited are gradually deprioritized | | **Cooldown** | Recently visited or planned leads are temporarily excluded | ### What Gets Excluded The planner automatically skips leads that: - Are pending a match review - Were marked as Not Interested - Were visited within the cooldown period - Have no GPS coordinates --- ## Automatic Harvesting When enabled, the planner searches for new businesses in your route areas before building the route. This fills gaps in areas with few existing leads. 1. You define your route areas on the map 2. The planner identifies areas with few existing leads 3. New businesses are automatically discovered and added to the candidate pool 4. The best candidates are included in your route ::note Automatic harvesting requires the "Allow harvesting in route planning" setting to be enabled. Each search uses [credits](https://docs.wiseparts.ai/billing/credits). :: --- ## Balancing Prospecting and Customer Visits The discovery-per-day setting ensures prospecting doesn't crowd out existing customer visits. You can also configure the dormant visit percentage to balance new business development with account maintenance. --- ## Controlling This Integration Lead candidates appear in Traveller when: - Prospecting is enabled for your organization - Discovery per day is set to 1 or more in the route configuration - You have permission to view prospecting ::tip{to="https://docs.wiseparts.ai/prospecting/settings"} Configure route planning integration and cooldown periods in Prospecting settings. :: --- ## Related Features ::card-group :::card --- icon: i-lucide-route title: Traveller to: https://docs.wiseparts.ai/customers/traveller --- Full guide to planning multi-day visit routes. ::: :::card --- icon: i-lucide-map title: Discovering Leads to: https://docs.wiseparts.ai/prospecting/discovering-leads --- Manually search for leads on the map. ::: :::card --- icon: i-lucide-settings title: Settings to: https://docs.wiseparts.ai/prospecting/settings --- Configure route planning integration. ::: :: # Settings Prospecting settings let you control how leads are discovered, how long they stay active, and how they integrate with other features. These settings are organized into four groups. ::callout{icon="i-lucide-zap"} **Quick Overview**: Configure lifecycle rules, quotas, search categories, and route planning behavior to match your team's prospecting strategy. :: ## Lifecycle Rules Control when leads and prospect customers change status. | Setting | Description | Range | | ------------------------ | -------------------------------------------------------------------- | ------ | | **Dormant after months** | Months of inactivity before a prospect customer is marked as dormant | 1–24 | | **Active requires rep** | Require a sales rep assignment before a lead is considered active | On/Off | --- ## Quotas Manage how many leads your organization can track. | Setting | Description | Range | | -------------------- | ----------------------------------------------- | ---------- | | **Max active leads** | Maximum number of active leads in your database | 100–10,000 | When the quota is reached, new searches won't add more leads. Convert, archive, or remove existing leads to free up space. --- ## Harvesting Configure how and where the system searches for new businesses. | Setting | Description | | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | **Search categories** | Types of businesses to search for (e.g., auto dealers, repair shops, parts suppliers) | | **Allow harvesting in route planning** | Enable automatic lead discovery when building sales routes | | **Allow harvesting in Snap Activity** | Enable the Leads section in the Snap Activity panel | | **Auto-assign by territory** | Automatically assign leads captured in the field to the rep whose territory contains them. Leads outside any rep's territory stay unassigned | ### Search Categories Add or remove business categories to focus discovery on the types of businesses most relevant to your industry. You can type custom categories or select from the predefined list. --- ## Planning Control how leads interact with route planning. | Setting | Description | Range | | ---------------------------- | --------------------------------------------------------------- | ------ | | **Dormant visit percentage** | Percentage of route stops for dormant customers | 0–100% | | **Revisit cooldown days** | Minimum days before a lead is offered again after being planned | 1–90 | --- ## Related Features ::card-group :::card --- icon: i-lucide-radar title: Overview to: https://docs.wiseparts.ai/prospecting/overview --- Return to the Prospecting overview. ::: :::card --- icon: i-lucide-coins title: Credits to: https://docs.wiseparts.ai/billing/credits --- Understand how prospecting searches use credits. ::: :: # Introduction The WiseParts API connects external systems to your account over HTTP. One integration token authenticates every call, the base URL and conventions below apply throughout, and each area of the product exposes its own endpoints. **Voice is the area available today.** You post call events as they happen β€” ringing, answered, completed β€” and WiseParts turns them into calls. Each call then drives three things: the on-screen notification bar, the activity record written automatically, and the figures in Call Reports. See [Call Center](https://docs.wiseparts.ai/communication/call-center) for what the product does with them. ::callout{icon="i-lucide-info"} More areas are being added, and the sidebar grows with them. Treat the operations below as what exists now rather than as the whole API, and check this section again before assuming something is missing. :: ::note This page is for the technical team setting up an integration. The API reference is maintained in English in every locale, so these pages read the same on `/pt`, `/es`, `/fr` and `/it` as they do here. :: ## Base URL ```text https://app.wiseparts.ai/api/v1 ``` The version is a path segment, not a header or a query parameter. Every path in the reference is relative to that base, whichever area it belongs to, and production is the only server. ## Voice operations [Post a call event](https://docs.wiseparts.ai/api/calls/post-call-event) β€” `POST /voice/call`. Creates a call, or advances one that already exists. Send one request per state change, reusing the same `id` for the whole call. [Look up a caller's priority](https://docs.wiseparts.ai/api/calls/get-caller-priority) β€” `GET /voice/priority`. Given a number, returns the priority of the segment the matching customer belongs to, so your routing plan can queue known customers before the call is offered. [List request history](https://docs.wiseparts.ai/api/calls/list-request-history) β€” `GET /voice`. Returns what WiseParts recorded for your account: the payload as received, the response, the status and the duration. The first two also answer on the other verb β€” `/voice/call` accepts `GET` with the same fields in the query string, `/voice/priority` accepts `POST` β€” for phone systems that can only fire a URL. ## Your first call The steps below use the Voice endpoints, but the token and the conventions are the same whichever area you end up calling. **1. Get the token.** Under **Integrations**, open the integration you are connecting and copy its token. It identifies both the account and the integration, so there is no separate account identifier. See [Authentication](https://docs.wiseparts.ai/api/authentication) for the ways to send it. **2. Post an event.** ```bash curl -X POST https://app.wiseparts.ai/api/v1/voice/call \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "id": "CALL-2026-08-12-0042", "direction": "inbound", "status": "answered", "from": "+351210000000", "caller_id": "201" }' ``` `id`, `direction` and `status` are required, and `from` is required when the direction is `inbound`. The reply is a `result` string of 48 random characters that identifies nothing β€” your own `id` is the reference to keep. **3. Find it in the history.** ```bash curl "https://app.wiseparts.ai/api/v1/voice?search=request&search_term=CALL-2026-08-12-0042&sort=-created_at&limit=10" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/json" ``` `search` and `search_term` work only as a pair, and there is no default ordering, so pass `sort` when order matters. Send `Accept: application/json` too: without it, a request that fails authentication answers with a `302` to a browser page rather than a `401`. ::callout{icon="i-lucide-info"} Because `limit` is set, the body is an object with `data`, `links` and `meta`. Drop `limit` and you get a bare array containing the entire history instead β€” the two shapes are not interchangeable. :: A `200` on step 2 confirms receipt, not that a call was written: a call only ever moves forward, and an event that arrives out of order is accepted and discarded. [Post a call event](https://docs.wiseparts.ai/api/calls/post-call-event) lists the statuses and which of them may overwrite which. If the call never appears, [Troubleshooting](https://docs.wiseparts.ai/api/troubleshooting) covers where to look β€” starting with the fact that a request failing authentication leaves no entry at all. # Authentication Every request carries the token of the integration it belongs to. The token identifies both the account and which integration the call is for, so there is no separate account identifier. Navigate to **Integrations**, open the integration you are connecting, and copy the token from its configuration. Each integration has its own token. Send it as a bearer token: ```bash curl https://app.wiseparts.ai/api/v1/voice/call \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "id": "abc-123", "from": "+351210000000", "direction": "inbound", "status": "ringing" }' ``` An `api_token` query parameter is also accepted, for phone systems that cannot set headers: ```text POST /api/v1/voice/call?api_token=YOUR_TOKEN ``` ::callout{icon="i-lucide-triangle-alert"} **Keep the token secret.** Anyone holding it can write call and message records into your account. If it leaks, use the refresh button next to the token to generate a new one β€” the old token stops working as soon as you save. :: # Post a call event ::api-endpoint --- alternates: GET method: POST path: /voice/call server: https://app.wiseparts.ai/api/v1 --- :: Creates a call, or advances one that already exists. Send one request per state change on the same call, reusing the same `id` for its whole lifetime β€” WiseParts matches on that value. The match is scoped to the integration the token belongs to, not to the whole account, so two phone systems on the same account can use overlapping identifiers without colliding. `GET` is accepted with the same parameters in the query string, for phone systems that can only fire a URL. It is not a read: both verbs create and advance calls. Two fields you may see named in an error, `source_id` and `user_id`, are filled in by WiseParts β€” the first from the integration's configuration, the second from the extension-to-user mapping. Sending them yourself has no effect. ### A call only ever moves forward Each status carries a weight, and an event is written only when its weight is at least the weight of the status already on the call. Statuses of equal weight replace one another freely, so `no-answer` after `canceled` is accepted, while `ringing` after `answered` is not. Equal weight includes a status repeating itself: a second `completed` on a completed call passes the gate exactly like the first one did. The part worth designing around: when an event is rejected, **nothing** on the call is updated β€” not merely the status. A late `ringing` that also carried `end_time`, `duration` or `caller_id` loses all of them. Put the values you care about on an event whose status is allowed to land. A rejected event still answers `200`, and so does an event a handler decides is not relevant and skips outright. A success therefore confirms receipt, not that anything was written. ### Call statuses | Status | Weight | Meaning | Ends the call? | | ------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `queued` | 10 | Accepted into a queue, not yet offered to an agent. The one status that creates or advances a call without raising a realtime notification, so a call that only ever reports `queued` reaches reports and activity but never lights up the notification bar. | No | | `ringing` | 10 | Being offered to an agent's extension. | No | | `jumped` | 10 | The call moved off this extension to another. Shown as "Transferred". | No | | `extension-cancel` | 10 | This extension stopped ringing while the call continues elsewhere. Shown as "Extension cancellation". | No | | `answered` | 50 | An agent picked up. Shown as "In progress". Blocks every weight-10 status from here on. | No | | `canceled` | 100 | The caller hung up before anyone answered. Counts as a missed call. | Against weight-10 and `answered` only | | `no-answer` | 100 | Nobody picked up. Counts as a missed call. | Against weight-10 and `answered` only | | `failed` | 100 | The call could not be established. Counts as a missed call. | Against weight-10 and `answered` only | | `completed` | 150 | The call ran and hung up normally. Nothing of lower weight lands afterwards. | Yes, against every lower weight β€” but another `completed` is equal weight and is still accepted, rewriting `duration`, `end_time` and `caller_id`. Send it twice and the second one wins. | ## Body ::api-params :::api-param --- required: true name: id type: string --- Your identifier for the call, stable across every event of the same call. Letters, digits, spaces and the characters `#`, `+`, `(`, `)`, `_`, `.` and `-` only β€” anything else is rejected. It need only be unique within the integration sending it. ::: :::api-param --- required: true name: direction type: string values: inbound,outbound-dial,outbound-auto --- `outbound` is accepted as an alias for `outbound-dial`. ::: :::api-param --- required: true name: status type: string values: queued,ringing,answered,completed,no-answer,canceled,failed,jumped,extension-cancel --- Where the call has got to. Matched case-insensitively, with underscores treated as hyphens β€” `NO_ANSWER` and `no-answer` are the same value. Each value carries a weight that decides whether it may overwrite the status already on the call; the table above the parameters lists what each one means, which replace which, and which one ends the call for good. ::: :::api-param{name="from" type="string"} The caller's number. Required when `direction` is `inbound`. Full international format matches customers most reliably. ::: :::api-param{name="to" type="string"} The number dialled. Required on outbound calls β€” that is, on anything whose `direction` is not `inbound`. ::: :::api-param{name="caller_id" type="string"} The extension or agent identifier handling the call. WiseParts resolves which user took the call from this value, using the extension-to-user mapping on the integration screen. An unmapped value still records the call; it just is not attributed to a user. Letters, digits, spaces and `#`, `+`, `(`, `)`, `_` only β€” narrower than `id`, which also allows dots and dashes. ::: :::api-param{name="start_time" type="string"} When the call was answered, in RFC 3339. The first value a call receives is final. Leave it out on an `answered` event and WiseParts stamps the current time in the account's timezone, which is the usual way to send it. A value that cannot be parsed is a `422`. ::: :::api-param{name="end_time" type="string"} When the call finished, in RFC 3339. Leave it out on a `completed` event and WiseParts stamps the current time in the account's timezone. A value that cannot be parsed is a `422`. ::: :::api-param{name="duration" type="integer"} Call length in seconds. Decimals are accepted but truncated, so send whole seconds unless you have a reason not to. ::: :::api-param{name="forwarded_from" type="string"} The number the call was diverted from. ::: :::api-param{name="parent_call_id" type="string"} The original call's `id`, when this call is a transfer. Same character restrictions as `id`. ::: :: ::api-code ```bash [cURL] curl --request POST \ --url https://app.wiseparts.ai/api/v1/voice/call \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \ --header 'content-type: application/json' \ --data '{"id":"CALL-2026-08-12-0042","direction":"inbound","status":"answered","from":"+351210000000","caller_id":"201","start_time":"2026-08-12T14:33:07+01:00"}' ``` ```js [JavaScript] const options = { method: 'POST', headers: { Authorization: 'Bearer REPLACE_BEARER_TOKEN', 'content-type': 'application/json' }, body: '{"id":"CALL-2026-08-12-0042","direction":"inbound","status":"answered","from":"+351210000000","caller_id":"201","start_time":"2026-08-12T14:33:07+01:00"}' }; fetch('https://app.wiseparts.ai/api/v1/voice/call', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err)); ``` ```php [PHP] "https://app.wiseparts.ai/api/v1/voice/call", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\"id\":\"CALL-2026-08-12-0042\",\"direction\":\"inbound\",\"status\":\"answered\",\"from\":\"+351210000000\",\"caller_id\":\"201\",\"start_time\":\"2026-08-12T14:33:07+01:00\"}", CURLOPT_HTTPHEADER => [ "Authorization: Bearer REPLACE_BEARER_TOKEN", "content-type: application/json" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ``` ```python [Python] import requests url = "https://app.wiseparts.ai/api/v1/voice/call" payload = { "id": "CALL-2026-08-12-0042", "direction": "inbound", "status": "answered", "from": "+351210000000", "caller_id": "201", "start_time": "2026-08-12T14:33:07+01:00" } headers = { "Authorization": "Bearer REPLACE_BEARER_TOKEN", "content-type": "application/json" } response = requests.request("POST", url, json=payload, headers=headers) print(response.text) ``` ```go [Go] package main import ( "fmt" "strings" "net/http" "io/ioutil" ) func main() { url := "https://app.wiseparts.ai/api/v1/voice/call" payload := strings.NewReader("{\"id\":\"CALL-2026-08-12-0042\",\"direction\":\"inbound\",\"status\":\"answered\",\"from\":\"+351210000000\",\"caller_id\":\"201\",\"start_time\":\"2026-08-12T14:33:07+01:00\"}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN") req.Header.Add("content-type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby [Ruby] require 'uri' require 'net/http' require 'openssl' url = URI("https://app.wiseparts.ai/api/v1/voice/call") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN' request["content-type"] = 'application/json' request.body = "{\"id\":\"CALL-2026-08-12-0042\",\"direction\":\"inbound\",\"status\":\"answered\",\"from\":\"+351210000000\",\"caller_id\":\"201\",\"start_time\":\"2026-08-12T14:33:07+01:00\"}" response = http.request(request) puts response.read_body ``` :: ## Responses ::api-responses :::api-response{status="200"} The event was accepted. An event rejected by the forward-only rule, and one a handler chose to skip, answer exactly the same way β€” treat this as an acknowledgement of receipt rather than proof that a call was written. ::: :::api-response{status="401"} The token is missing, wrong, or belongs to an integration that is not active. Requests that fail here leave no entry in the request history, because the account could not be identified. `POST /voice/call` and `/voice/priority` always answer with this JSON body. `GET /voice` only does so when the request asks for JSON β€” send `Accept: application/json` or you will get a `302` redirect to a browser page instead of a `401`, which is a confusing thing to debug from a script. ::: :::api-response{status="422"} One or more fields of the call event were missing or invalid. `errors` is keyed by field name with one or more messages each, and the keys are the field names in this reference rather than whatever your phone system called them β€” WiseParts normalises the payload before validating it. ::: :::api-response{status="500"} Two causes, and only one of them worth retrying. Events for the same call `id` are serialised behind a five-second lock, and a burst that cannot take it in time fails here β€” that one is transient, so retry it. The other is a token that matches active Voice integrations on two **different accounts**: WiseParts refuses to guess which account the event belongs to and fails the request. That is stored configuration, not a moment of contention, so retrying never succeeds β€” the token has to be changed on one of the two accounts. Two integrations on the **same** account sharing a token never reach this. WiseParts picks one of them without comment, so the event lands on whichever it picked; the `X-Centrix-Request-Type` header on the `200` is how you find out which. ::: :: ## Response fields ::api-params{variant="response"} :::api-param{name="result" optionality="none" type="string"} Forty-eight random alphanumeric characters, generated fresh for every request and stored nowhere. It identifies nothing and correlates with nothing, so do not keep it as a reference to the call β€” your own `id` is that reference. ::: :: ::api-code{variant="response"} ```json [200] { "result": "4HWYBVSKu4spptgZG9BKMszhlIWqlgp1bAJGtvUKpDHTSzjs" } ``` ```json [401] { "message": "Unauthenticated." } ``` ```json [422 missing-fields] { "message": "The id field is required. (and 3 more errors)", "errors": { "id": [ "The id field is required." ], "to": [ "The to field is required." ], "status": [ "The status field is required." ], "direction": [ "The direction field is required." ] } } ``` ```json [422 unparseable-time] { "message": "The start_time does not match the format RFC 3339.", "errors": { "start_time": [ "The start_time does not match the format RFC 3339." ] } } ``` ```json [500 lock-timeout] { "message": "Server Error" } ``` ```json [500 duplicate-token-across-accounts] { "message": "Server Error" } ``` :: # Look up a caller's priority ::api-endpoint --- alternates: POST method: GET path: /voice/priority server: https://app.wiseparts.ai/api/v1 --- :: :api-try-it{method="GET" path="/voice/priority" server="https://app.wiseparts.ai/api/v1"} Given a phone number, returns the priority of the segment the matching customer belongs to. Use it in your phone system's routing plan to put known customers in the right queue before the call is even offered. Numbers that match no customer return the priority of the account's default segment, and so does a customer with no segment of its own β€” an unrecognised number is never an error here. `POST` is accepted with `from` in the body, for systems that prefer it. Neither verb creates a call or stores anything about the lookup, but the request itself is recorded in the request history like every other Voice API call, so expect it to appear in `GET /voice`. One asymmetry to know about: this lookup assumes no country, whereas call ingestion falls back to the account's own country when a number is ambiguous. A number in national format can therefore resolve to a different customer here than on the call that follows. Send numbers in full international format and the two stay in step. ## Query parameters ::api-params :::api-param --- required: true name: from type: string --- The caller's number, ideally in full international format. Short numbers are not ruled out: a number saved as a contact on a customer or branch is matched at any length, and it is only the fallback that scans the customer and branch phone and mobile fields which skips anything shorter than eight digits. So a four-digit number resolves if somebody recorded it as a contact, and not otherwise. ::: :: ::api-code ```bash [cURL] curl --request GET \ --url 'https://app.wiseparts.ai/api/v1/voice/priority?from=%2B351210000000' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' ``` ```js [JavaScript] const options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}}; fetch('https://app.wiseparts.ai/api/v1/voice/priority?from=%2B351210000000', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err)); ``` ```php [PHP] "https://app.wiseparts.ai/api/v1/voice/priority?from=%2B351210000000", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "Authorization: Bearer REPLACE_BEARER_TOKEN" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ``` ```python [Python] import requests url = "https://app.wiseparts.ai/api/v1/voice/priority" querystring = {"from":"+351210000000"} headers = {"Authorization": "Bearer REPLACE_BEARER_TOKEN"} response = requests.request("GET", url, headers=headers, params=querystring) print(response.text) ``` ```go [Go] package main import ( "fmt" "net/http" "io/ioutil" ) func main() { url := "https://app.wiseparts.ai/api/v1/voice/priority?from=%2B351210000000" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby [Ruby] require 'uri' require 'net/http' require 'openssl' url = URI("https://app.wiseparts.ai/api/v1/voice/priority?from=%2B351210000000") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN' response = http.request(request) puts response.read_body ``` :: ## Responses ::api-responses :::api-response{status="200"} The caller's segment priority. ::: :::api-response{status="401"} The token is missing, wrong, or belongs to an integration that is not active. Requests that fail here leave no entry in the request history, because the account could not be identified. `POST /voice/call` and `/voice/priority` always answer with this JSON body. `GET /voice` only does so when the request asks for JSON β€” send `Accept: application/json` or you will get a `302` redirect to a browser page instead of a `401`, which is a confusing thing to debug from a script. ::: :::api-response{status="422"} `from` was missing or was not a string. It is the only field this endpoint validates, so it is the only key `errors` can ever carry here β€” a number that matches nothing is a `200`, not a `422`. ::: :: ## Response fields ::api-params{variant="response"} :::api-param{name="priority" optionality="none" type="integer or null"} The matching segment's priority, or the default segment's when nothing matched. `null` in the one case where there is nothing to fall back to either: an account with no default segment configured. ::: :: ::api-code{variant="response"} ```json [200 matched] { "priority": 3 } ``` ```json [200 no-default-segment] { "priority": null } ``` ```json [401] { "message": "Unauthenticated." } ``` ```json [422] { "message": "The from field is required.", "errors": { "from": [ "The from field is required." ] } } ``` :: # List request history :api-endpoint{method="GET" path="/voice" server="https://app.wiseparts.ai/api/v1"} :api-try-it{method="GET" path="/voice" server="https://app.wiseparts.ai/api/v1"} Every Voice API request is recorded with its payload, response, status and duration. This returns that history for your account. ### Send at least one `filter[...]` key or the request fails A request that carries no `filter` parameter at all answers `500`. Before anything is validated, the endpoint merges its own account scoping into the `filter` you sent, and when you sent none there is nothing to merge into β€” the merge itself raises the error, so the response is a bare "Server Error" with no hint of the cause. This is how the endpoint behaves today rather than a rule it means to enforce; code around it, do not read intent into it. Any one bracketed key clears it. The samples below send `filter[scopeBetween]`, which is why it is marked required β€” a date range is usually what you wanted anyway. If you really want the unfiltered history, `filter[scopeOnlyErrors]=0` is the no-op that costs nothing: a falsy value applies no condition but still gives the merge something to work with. There is no default ordering. Pass `sort` when order matters, or the entries come back in whatever order the analytics store finds them β€” which is not reliably newest first. A request that fails authentication is never recorded, because the account could not be identified. Check the token first when nothing appears at all. Requests to this endpoint are not recorded either, so the history only ever contains `/voice/call` and `/voice/priority`. ### The response envelope depends on `limit` Omit `limit` and the body is a bare JSON array of entries β€” the whole history, unpaginated and uncapped, which on a busy account is a great deal of data. Send `limit` and the body becomes an object with `data`, `links` and `meta`. Send `limit` together with `without_pagination=1` and it is a bare array again, capped at `limit`. Decide which shape you want before writing the client, because they are not interchangeable. ### Filters are unvalidated, not forgiving The two filters below are sent bracketed, as `filter[...]`, because they are named scopes rather than plain columns. Only an unrecognised `scope`-prefixed key is dropped in silence β€” it is reported internally and ignored, and the result comes back unfiltered. Every other unrecognised key is used, not dropped: it becomes a partial `LIKE` on a column of that name. So `filter[endpoint]=voice/call` quietly works even though it is not documented here, while a typo such as `filter[endpiont]=voice/call` queries a column that does not exist and returns `500`. Misspell a scope and you get too many rows; misspell anything else and you get an error. `sort` is the one parameter that checks what it was given, refusing a field it cannot sort by with a `400`. ## Query parameters ::api-params :::api-param --- required: true name: filter[scopeBetween] type: string --- Restrict to a date range, written as `from,to`. Both bounds are whole days and inclusive: the first counts from the start of that day, the second to the end of it. Omit the second and it defaults to the end of today, so `2026-08-01,` reads as "since the first". A value that is not a parseable date, or an empty one, returns `500`. Marked required because the endpoint needs *some* `filter[...]` key to answer at all, as described above, and this is the key the samples send. Substituting the other filter satisfies the endpoint just as well; sending neither is what fails. ::: :::api-param{name="filter[scopeOnlyErrors]" type="boolean"} Send `1` to return only entries whose status is `error`. Any falsy value is the same as leaving it out. ::: :::api-param{name="search" type="string or array"} The column to search, and the companion to `search_term` β€” neither does anything without the other. Send one bare column name, or repeat the parameter to search several: `search[]=endpoint&search[]=status`. Do not comma-separate them. The value is never split, so `search=endpoint,status` is looked up as a single column named "endpoint,status", matches nothing, and returns `500` β€” the same failure as naming a column that does not exist. The searchable columns are `type`, `domain_id`, `domain_type`, `uri`, `method`, `endpoint`, `status`, `request`, `response`, `duration`, `context` and `meta`. Note `id`, `created_at` and `updated_at` cannot be searched. ::: :::api-param{name="search_term" type="string"} The text to look for in the columns named by `search`. Matching is a case-insensitive substring, and a space stands for any run of characters, so `voice call` also finds `voice/call`. ::: :::api-param{name="sort" type="string" values="created_at,-created_at"} The only sortable field is `created_at`; prefix it with `-` for newest first. There is no default, so results are unordered until you ask. Any other value returns `400`. ::: :::api-param{name="page" type="integer"} Which page of results to return. It only takes effect alongside `limit`, because that is the parameter that turns pagination on; sent on its own it is ignored. ::: :::api-param{name="limit" type="integer"} How many entries per page, and the switch that turns pagination on. There is no default and no maximum: omit it and the entire history comes back in one bare array. Sent empty it means 24, and `limit=0` means 15. Nothing about it is validated. ::: :::api-param{name="without_pagination" type="boolean"} Send `1` alongside `limit` to get the capped result as a bare array rather than a paginated object β€” useful when you want the last N entries and no envelope to unwrap. Ignored without `limit`. ::: :: ::api-code ```bash [cURL] curl --request GET \ --url 'https://app.wiseparts.ai/api/v1/voice?filter%5BscopeBetween%5D=2026-08-01%2C2026-08-13' \ --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' ``` ```js [JavaScript] const options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}}; fetch('https://app.wiseparts.ai/api/v1/voice?filter%5BscopeBetween%5D=2026-08-01%2C2026-08-13', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err)); ``` ```php [PHP] "https://app.wiseparts.ai/api/v1/voice?filter%5BscopeBetween%5D=2026-08-01%2C2026-08-13", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "Authorization: Bearer REPLACE_BEARER_TOKEN" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ``` ```python [Python] import requests url = "https://app.wiseparts.ai/api/v1/voice" querystring = {"filter[scopeBetween]":"2026-08-01,2026-08-13"} headers = {"Authorization": "Bearer REPLACE_BEARER_TOKEN"} response = requests.request("GET", url, headers=headers, params=querystring) print(response.text) ``` ```go [Go] package main import ( "fmt" "net/http" "io/ioutil" ) func main() { url := "https://app.wiseparts.ai/api/v1/voice?filter%5BscopeBetween%5D=2026-08-01%2C2026-08-13" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby [Ruby] require 'uri' require 'net/http' require 'openssl' url = URI("https://app.wiseparts.ai/api/v1/voice?filter%5BscopeBetween%5D=2026-08-01%2C2026-08-13") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN' response = http.request(request) puts response.read_body ``` :: ## Responses ::api-responses :::api-response{status="200"} The account's Voice API request history β€” a bare array of entries unless `limit` is set, in which case an object with `data`, `links` and `meta`. ::: :::api-response{status="400"} The `sort` value names a field this endpoint cannot sort by. Only `created_at` and `-created_at` are accepted. ::: :::api-response{status="401"} The token is missing, wrong, or belongs to an integration that is not active. Requests that fail here leave no entry in the request history, because the account could not be identified. `POST /voice/call` and `/voice/priority` always answer with this JSON body. `GET /voice` only does so when the request asks for JSON β€” send `Accept: application/json` or you will get a `302` redirect to a browser page instead of a `401`, which is a confusing thing to debug from a script. ::: :::api-response{status="500"} Everything this endpoint fails to validate arrives here as the same opaque body. The known causes: no `filter` parameter at all; a `filter[scopeBetween]` value that is empty or is not a date; a `search` value that is comma-separated or otherwise names no searchable column; a `filter` key that is neither a known scope nor a real column; and `filter` sent as a bare value rather than as bracketed keys. ::: :: ## Response fields ::api-params{variant="response"} :::api-param{name="id" optionality="none" type="string"} The entry's own identifier, a ULID. ::: :::api-param{name="type" optionality="none" type="string"} Always `voice` for entries returned here. ::: :::api-param{name="domain_id" optionality="none" type="integer"} The account the request belonged to β€” always your own. ::: :::api-param{name="domain_type" optionality="none" type="string"} The kind of owner the entry belongs to. Always `wholesalers`. ::: :::api-param{name="domain" optionality="none" type="object"} The account the entry belongs to. ::: :::api-param{name="uri" optionality="none" type="string"} The URL the request was made to, without its query string and truncated at 250 characters. ::: :::api-param{name="endpoint" optionality="none" type="string"} The path portion of the same URL. ::: :::api-param{name="method" optionality="none" type="string"} The verb the request used. ::: :::api-param --- name: status optionality: none type: string values: success,error --- `success` when WiseParts answered with a 2xx, `error` for anything else. It reflects the HTTP response only β€” an event that was accepted and then skipped still reads `success`. ::: :::api-param{name="duration" optionality="none" type="string"} How long WiseParts took to answer, in seconds to two decimal places. Returned as a string, not a number. ::: :::api-param{name="request" optionality="none" type="object"} The request as WiseParts received it. This is an envelope rather than the payload itself β€” what you sent is under `body`. Treat an entry as containing live credentials. Only the query string of `uri` is masked: the `Authorization` header is stored as it arrived, and on a `GET` the `api_token` turns up inside `body`, because for a `GET` the query string and the body are merged before they are recorded. ::: :::api-param{name="response" optionality="none" type="object"} WiseParts' answer to the request. ::: :::api-param{name="meta" optionality="none" type="object or null"} Always `null` for Voice entries. ::: :::api-param{name="context" optionality="none" type="string or null"} Always `null` for Voice entries. ::: :::api-param{name="created_at" optionality="none" type="string"} When the request arrived, as `YYYY-MM-DD HH:MM:SS` in the account's timezone. There is no offset in the value and it is not RFC 3339, so parse it with the account's timezone in mind. ::: :::api-param{name="updated_at" optionality="none" type="string"} When the entry was last written, in the same format as `created_at`. ::: :: ::api-code{variant="response"} ```json [200 unpaginated] [ { "id": "01K2C8ZP4W7XG5V0RQF3NHTB6A", "type": "voice", "domain_id": 42, "domain_type": "wholesalers", "domain": { "id": 42, "name": "Acme Parts" }, "uri": "https://app.wiseparts.ai/api/v1/voice/call", "endpoint": "api/v1/voice/call", "method": "POST", "status": "success", "duration": "0.08", "request": { "method": "POST", "uri": "https://app.wiseparts.ai/api/v1/voice/call", "version": "HTTP/HTTP/1.1", "headers": { "Content-Type": "application/json", "Accept": "application/json" }, "body": { "id": "CALL-2026-08-12-0042", "direction": "inbound", "status": "answered", "from": "+351210000000" } }, "response": { "status_code": 200, "version": "HTTP/1.1", "headers": { "Content-Type": "application/json", "X-Centrix-Request-Type": "voice_standard" }, "body": { "result": "4HWYBVSKu4spptgZG9BKMszhlIWqlgp1bAJGtvUKpDHTSzjs" } }, "meta": null, "context": null, "created_at": "2026-08-12 14:33:07", "updated_at": "2026-08-12 14:33:07" } ] ``` ```json [200 paginated] { "data": [], "links": { "first": "https://app.wiseparts.ai/api/v1/voice?page=1", "last": "https://app.wiseparts.ai/api/v1/voice?page=7", "prev": null, "next": "https://app.wiseparts.ai/api/v1/voice?page=2" }, "meta": { "current_page": 1, "from": 1, "to": 50, "last_page": 7, "per_page": 50, "total": 312, "path": "https://app.wiseparts.ai/api/v1/voice", "links": [ { "url": null, "label": "« Previous", "page": null, "active": false }, { "url": "https://app.wiseparts.ai/api/v1/voice?page=1", "label": "1", "page": 1, "active": true } ] } } ``` ```json [400] { "message": "Requested sort(s) `duration` is not allowed. Allowed sort(s) are `created_at`." } ``` ```json [401] { "message": "Unauthenticated." } ``` ```json [500 missing-filter] { "message": "Server Error" } ``` ```json [500 bad-search] { "message": "Server Error" } ``` :: # Troubleshooting Every Voice API request is recorded with the payload as received, the response, the status and how long it took. The history is per account, newest first, so you are always looking at your own traffic. ::callout{icon="i-lucide-lightbulb"} **A request that fails authentication is never recorded**, because the account could not be identified. If nothing appears at all, check the token first. :: ## Two ways to see it For a quick look, navigate to **Integrations > Logs** and expand an entry to read its full request and response β€” see [Integration Logs](https://docs.wiseparts.ai/data/integration-logs). That screen covers every integration, so filter by type to isolate the Voice ones. For automated checks, call [List request history](https://docs.wiseparts.ai/api/calls/list-request-history). It returns the same Voice entries as JSON, so your own monitoring can poll for failures instead of someone watching a screen. ## Narrowing to the failure On the API, set `scopeOnlyErrors` to return only entries whose status is `error`, `scopeBetween` to limit the range to `from,to` dates, and `search_term` to search across the request, response and status β€” the call `id` you sent is a good search term when you are chasing one specific call. ::callout{icon="i-lucide-info"} Sensitive fields are scrubbed from the recorded payload, so what you read back is not byte-for-byte what you sent. ::