
An AI-powered agent that automatically summarizes sales calls using Vercel's Sandbox architecture. The agent analyzes call transcripts and generates structured summaries with objections, action items, and insights.
Template Note: This template uses Gong as a starting example for call transcript integration. You can adapt it to work with other call recording platforms (Zoom, Google Meet, etc.) by modifying the webhook handler and transcript fetching logic.
Extensible: This template can be extended to integrate with Salesforce (or another CRM of your choice), Slack (to post call summaries), and other services. The demo files in
/demo-files/context/demonstrate how CRM data and other context can be provided to the agent.
You can deploy to Vercel and try it immediately with demo data with one click:
Demo mode is enabled by default - no Gong credentials required to test!
git clone https://github.com/vercel-labs/call-summary-agentcd call-summary-agentpnpm install
vercel linkvercel env pull
pnpm dev
# Trigger the agent with demo datacurl -X POST http://localhost:3000/api/gong-webhook \-H "Content-Type: application/json" \-d '{}'
To use real Gong API data instead of demo data:
Add these to your Vercel project settings or .env.local:
| Variable | Required | Description |
|---|---|---|
GONG_ACCESS_KEY | Yes | Your Gong API access key |
GONG_SECRET_KEY | Yes | Your Gong API secret key |
GONG_ACCESS_KEY=your_gong_access_keyGONG_SECRET_KEY=your_gong_secret_key
Note: Demo mode is automatically enabled when Gong credentials are missing.
https://your-app.vercel.app/api/gong-webhook| Variable | Required | Default | Description |
|---|---|---|---|
GONG_ACCESS_KEY | No | - | Gong API access key (demo mode if missing) |
GONG_SECRET_KEY | No | - | Gong API secret key (demo mode if missing) |
COMPANY_NAME | No | "Your Company" | Company name in prompts |
Demo mode uses realistic mock data including a sample 20-minute product demo call. The demo files are organized in the /demo-files folder:
demo-files/├── webhook-data.json # Mock Gong webhook payload├── transcript.json # 20-minute call transcript└── context/├── gong-calls/previous/ # Historical calls│ ├── demo-call-000-discovery-call.md│ └── demo-call-intro-initial-call.md├── research/ # Background info│ ├── company-research.md│ └── competitive-intel.md└── playbooks/└── sales-playbook.md
These files are loaded into the sandbox for the agent to explore.
Override the default system prompt:
AGENT_SYSTEM_PROMPT="You are a sales call analyst..."
Each step uses the "use step" directive for:
The agent uses bash-tool for exploring call transcripts via shell commands:
# List call filesls gong-calls/# Search for pricing discussionsgrep -r "pricing" gong-calls/# View call metadatacat gong-calls/metadata.json# Find objectionsgrep -i "concern\|issue\|problem" gong-calls/*.md
All bash commands are logged for observability:
[bash-tool] INFO: Bash command starting { command: 'grep -r "pricing" gong-calls/' }[bash-tool] INFO: Bash command completed { command: '...', exitCode: 0, stdoutLength: 605 }
The agent generates structured output:
{summary: string, // Comprehensive call summarytasks: [{taskDescription: string,taskOwner: string,ownerCompany: 'internal' | 'customer' | 'partner'}],objections: [{description: string,quote: string,speaker: string,speakerCompany: string,handled: boolean,handledAnswer: string,handledScore: number, // 0-100handledBy: string}]}
Add playbook detection by configuring config.playbooks in lib/config.ts.
# Install dependenciespnpm install# Run development serverpnpm dev# Build for productionpnpm build
sales-call-summary-agent/├── app/│ ├── api/gong-webhook/ # Webhook endpoint│ ├── layout.tsx│ └── page.tsx # Status page├── demo-files/ # Demo mode files│ ├── webhook-data.json│ ├── transcript.json│ └── context/ # Additional context files├── lib/│ ├── agent.ts # ToolLoopAgent configuration│ ├── config.ts # Centralized configuration│ ├── gong-client.ts # Gong API helpers│ ├── mock-data.ts # Demo mode loader│ ├── sandbox-context.ts # File generation for sandbox│ ├── tools.ts # Agent tools (bash-tool)│ ├── types.ts # TypeScript types│ └── logger.ts # Logging utility└── workflows/└── gong-summary/├── index.ts # Main workflow└── steps.ts # Workflow steps
Receives Gong webhook payloads and triggers the summary workflow.
Request Body: Gong webhook payload or empty {} in demo mode.
Response:
{"message": "Workflow triggered","callId": "1234567890"}
The function returns a string output which can be configured into an outputSchema of your choice.
Contributions are welcome! Please open an issue or submit a pull request.