> intercom
Add customer messaging and support with Intercom. Use when a user asks to add in-app messaging, build a help center, set up customer onboarding flows, create product tours, or implement a support ticketing system.
curl "https://skillshub.wtf/TerminalSkills/skills/intercom?format=md"Intercom
Overview
Intercom is a customer messaging platform for support, onboarding, and engagement. Includes live chat, help center, product tours, chatbots, and a shared inbox. Industry standard for SaaS customer communication.
Instructions
Step 1: Install Messenger
// lib/intercom.ts — Initialize Intercom in a web app
export function initIntercom(user?: { id: string; email: string; name: string }) {
window.Intercom('boot', {
app_id: process.env.NEXT_PUBLIC_INTERCOM_APP_ID,
...(user && {
user_id: user.id,
email: user.email,
name: user.name,
created_at: Math.floor(Date.now() / 1000),
}),
})
}
// Update when user navigates (SPA)
window.Intercom('update', { last_request_at: Math.floor(Date.now() / 1000) })
// Track events for targeting
window.Intercom('trackEvent', 'completed-onboarding', {
plan: 'pro',
team_size: 5,
})
Step 2: React Component
// components/IntercomProvider.tsx — React wrapper
'use client'
import { useEffect } from 'react'
import { useUser } from '@/hooks/useUser'
export function IntercomProvider({ children }) {
const { user } = useUser()
useEffect(() => {
// Load Intercom script
const script = document.createElement('script')
script.innerHTML = `(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/${process.env.NEXT_PUBLIC_INTERCOM_APP_ID}';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);};l();}})();`
document.body.appendChild(script)
if (user) {
window.Intercom('boot', {
app_id: process.env.NEXT_PUBLIC_INTERCOM_APP_ID,
user_id: user.id,
email: user.email,
name: user.name,
})
}
}, [user])
return children
}
Step 3: Server-Side API
// lib/intercom-api.ts — Server-side Intercom operations
const INTERCOM_TOKEN = process.env.INTERCOM_ACCESS_TOKEN!
// Create or update a user
await fetch('https://api.intercom.io/contacts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${INTERCOM_TOKEN}`,
},
body: JSON.stringify({
role: 'user',
external_id: userId,
email: 'user@example.com',
name: 'John Doe',
custom_attributes: { plan: 'pro', mrr: 49, company_size: 10 },
}),
})
// Send a message
await fetch('https://api.intercom.io/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${INTERCOM_TOKEN}`,
},
body: JSON.stringify({
from: { type: 'admin', id: 'admin_id' },
to: { type: 'user', id: 'user_id' },
message_type: 'inapp',
body: 'Hey! How are you finding the new dashboard?',
}),
})
Guidelines
- Intercom starts at $39/seat/month — expensive but full-featured.
- Use custom attributes to segment users (plan, MRR, feature usage).
- Product tours and onboarding flows reduce support tickets significantly.
- For budget alternative, consider Crisp (free tier) or Chatwoot (open-source).
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> xero-accounting
Integrate with the Xero accounting API to sync invoices, expenses, bank transactions, and contacts — and generate financial reports like P&L and balance sheet. Use when: connecting apps to Xero, automating bookkeeping workflows, syncing accounting data, or pulling financial reports programmatically.
> windsurf-rules
Configure Windsurf AI coding assistant with .windsurfrules and workspace rules. Use when: customizing Windsurf for a project, setting AI coding standards, creating team-shared Windsurf configurations, or tuning Cascade AI behavior.