Intercom Automation
Comprehensive skill for automating Intercom customer communication and support workflows.
Core Workflows
1. Conversation Flow
CUSTOMER CONVERSATION FLOW: ┌─────────────────┐ │ User Message │ │ (Inbound) │ └────────┬────────┘ ▼ ┌─────────────────┐ │ Bot Triage │ │ - Intent │ │ - Route │ └────────┬────────┘ │ ┌────┴────┐ ▼ ▼ ┌───────┐ ┌───────┐ │ Bot │ │ Human │ │ Reply │ │ Agent │ └───┬───┘ └───┬───┘ │ │ └────┬────┘ ▼ ┌─────────────────┐ │ Resolution │ │ - Close │ │ - Follow-up │ └─────────────────┘
2. Automation Rules
yamlautomations: - name: welcome_new_users trigger: event: user.created conditions: - signed_up_at: within_last_hour action: send_message: type: chat delay: 5_minutes message: | Hey {{first_name}}! 👋 Welcome to {{company_name}}! I'm here to help you get started. What brings you here today? buttons: - "Explore features" - "I have a question" - "Just looking around" - name: trial_expiring trigger: event: user.attribute_changed attribute: trial_days_remaining value: 3 action: send_message: type: email template: trial_expiring - name: feature_announcement trigger: segment: power_users event: feature_released action: send_message: type: in_app message: "🎉 New Feature: {{feature_name}}"
User Segmentation
Segment Definitions
yamlsegments: - name: trial_users filter: subscription_status: trial - name: power_users filter: sessions_count: "> 50" last_seen: "< 7 days" features_used: "> 5" - name: at_risk_users filter: subscription_status: active last_seen: "> 30 days" - name: enterprise_prospects filter: company_size: "> 100" plan: free - name: feature_requesters filter: tag: feature_request conversations_count: "> 0"
Dynamic Attributes
yamlcustom_attributes: - name: health_score type: number compute: | (sessions_last_30_days * 2) + (features_used * 3) + (team_members_active * 5) - name: lifecycle_stage type: string rules: - condition: signed_up_at < 7_days value: "onboarding" - condition: subscription_status == "trial" value: "trial" - condition: subscription_status == "active" value: "customer" - condition: subscription_status == "cancelled" value: "churned" - name: account_tier type: string source: company.plan
Messaging Campaigns
Onboarding Series
yamlonboarding_campaign: name: "New User Onboarding" audience: segment: new_signups messages: - day: 0 channel: in_app content: | Welcome to {{company}}! 🎉 Let me show you around. Click below to take a quick 2-minute tour. cta: "Start Tour" - day: 1 channel: email subject: "Quick tip: {{feature_1}}" content: | Hi {{first_name}}, Did you know you can {{feature_1_benefit}}? Here's how: {{feature_1_tutorial_link}} - day: 3 channel: in_app trigger: not_completed: "setup_wizard" content: | Hey {{first_name}}, I noticed you haven't finished setting up. Need any help? - day: 7 channel: email subject: "How's it going?" content: | Hi {{first_name}}, You've been using {{company}} for a week now. Any questions or feedback? Just reply to this email!
Product Tours
yamlproduct_tours: - name: "Welcome Tour" trigger: event: first_login steps: - element: "#dashboard" title: "Your Dashboard" body: "This is where you'll see your key metrics" position: bottom - element: "#create-button" title: "Create New" body: "Click here to create your first project" position: left - element: "#help-menu" title: "Need Help?" body: "Find docs and contact support here" position: bottom - name: "Feature Tour: Reports" trigger: event: page_viewed url: "/reports" first_time: true steps: - element: "#date-picker" title: "Date Range" body: "Select your reporting period"
Support Workflows
Conversation Routing
yamlrouting_rules: - name: vip_priority conditions: - company.plan: enterprise actions: - set_priority: urgent - assign_team: enterprise_support - send_notification: slack_vip - name: billing_issues conditions: - message_contains: ["billing", "charge", "invoice", "refund"] actions: - add_tag: billing - assign_team: billing_support - name: technical_support conditions: - message_contains: ["error", "bug", "not working", "broken"] actions: - add_tag: technical - assign_team: tech_support - create_ticket: jira
Bot Responses
yamlbot_responses: - intent: greeting patterns: ["hi", "hello", "hey"] response: | Hi there! 👋 How can I help you today? - intent: pricing patterns: ["pricing", "cost", "how much", "plans"] response: | Great question! Here's our pricing: • **Starter**: $29/mo • **Growth**: $79/mo • **Enterprise**: Custom Would you like me to connect you with sales? buttons: - "Yes, talk to sales" - "See full comparison" - intent: password_reset patterns: ["forgot password", "reset password", "can't login"] response: | No problem! You can reset your password here: {{password_reset_link}} The link will expire in 24 hours. auto_close: true
Analytics & Reporting
Conversation Metrics
SUPPORT METRICS - THIS WEEK ═══════════════════════════════════════ Conversations: New: 234 (+12%) Closed: 256 (+8%) Open: 45 Response Times: First Reply: 2.3 min (target: 5 min) ✓ Median: 8 min Resolution: 2.4 hours CSAT Score: 4.7/5 ⭐ (+0.2) BY CHANNEL: Chat ████████████░░░░ 156 Email ██████░░░░░░░░░░ 58 In-App ████░░░░░░░░░░░░ 20 TOP TOPICS: ┌────────────────────┬───────┐ │ Topic │ Count │ ├────────────────────┼───────┤ │ Billing questions │ 45 │ │ Feature requests │ 38 │ │ Bug reports │ 32 │ │ How-to questions │ 28 │ └────────────────────┴───────┘
Engagement Dashboard
yamlengagement_metrics: - name: message_open_rate formula: opened / sent * 100 target: 40% - name: click_through_rate formula: clicked / opened * 100 target: 10% - name: tour_completion_rate formula: completed / started * 100 target: 60% - name: bot_resolution_rate formula: resolved_by_bot / total * 100 target: 30%
Integration Workflows
CRM Sync
yamlcrm_integration: salesforce: sync_fields: - intercom: company.name salesforce: Account.Name - intercom: user.email salesforce: Contact.Email - intercom: custom.mrr salesforce: Account.MRR__c events: - trigger: conversation_closed action: log_activity type: "Support Interaction" - trigger: user.tag_added tag: "sales_qualified" action: create_lead
Slack Integration
yamlslack_integration: notifications: - trigger: new_conversation channel: "#support-inbox" conditions: - priority: urgent message: "🚨 Urgent: {{user.name}} needs help" - trigger: conversation_assigned notify: assignee_dm message: "New conversation assigned to you" commands: /intercom: - lookup_user - send_message - add_tag
API Examples
Create or Update User
javascript// Create/Update User const user = await intercom.users.create({ user_id: "12345", email: "user@example.com", name: "John Doe", signed_up_at: Math.floor(Date.now() / 1000), custom_attributes: { plan: "pro", team_size: 10, onboarding_complete: true } }); // Send Message await intercom.messages.create({ message_type: "inapp", body: "Hey! New feature alert 🎉", from: { type: "admin", id: "admin_id" }, to: { type: "user", user_id: "12345" } }); // Search Conversations const conversations = await intercom.conversations.search({ query: { field: "state", operator: "=", value: "open" } });
Best Practices
- Personalize Messages: Use user attributes
- Time Appropriately: Consider user timezone
- Don't Over-Message: Respect frequency limits
- Bot + Human: Know when to escalate
- Track Everything: Measure message effectiveness
- Segment Thoughtfully: Target the right users
- A/B Test: Optimize message content
- Quick Resolution: Minimize response time


