gong
Gong provides API access to retrieve sales call recordings, transcripts, user lists, and conversation analytics from Gong's platform. Use this skill when analyzing sales conversations, extracting meeting transcripts, tracking call activity metrics, managing Gong user accounts, or generating insights from recorded customer interactions stored in Gong. Authentication requires locally stored API credentials obtained from Gong's settings panel.
git clone --depth 1 https://github.com/jdrhyne/agent-skills /tmp/gong && cp -r /tmp/gong/skills/gong ~/.claude/skills/gongSKILL.md
# Gong
Access Gong conversation intelligence - calls, transcripts, users, and analytics.
## Setup
Store credentials in `~/.config/gong/credentials.json`:
```json
{
"base_url": "https://us-XXXXX.api.gong.io",
"access_key": "YOUR_ACCESS_KEY",
"secret_key": "YOUR_SECRET_KEY"
}
```
Get credentials from Gong: Settings → Ecosystem → API → Create API Key.
## Authentication
```bash
GONG_CREDS=~/.config/gong/credentials.json
GONG_BASE=$(jq -r '.base_url' $GONG_CREDS)
GONG_AUTH=$(jq -r '"\(.access_key):\(.secret_key)"' $GONG_CREDS | base64)
curl -s "$GONG_BASE/v2/endpoint" \
-H "Authorization: Basic $GONG_AUTH" \
-H "Content-Type: application/json"
```
## Safety Boundaries
- Do not print raw access keys, secret keys, or full Authorization headers in chat output.
- Do not call Gong endpoints other than the configured tenant base URL.
- Do not export full transcripts or account data unless the user asked for that exact scope.
- Do not persist Gong credentials anywhere outside the documented local config file.
## Core Operations
### List Users
```bash
curl -s "$GONG_BASE/v2/users" -H "Authorization: Basic $GONG_AUTH" | \
jq '[.users[] | {id, email: .emailAddress, name: "\(.firstName) \(.lastName)"}]'
```
### List Calls (with date range)
```bash
curl -s -X POST "$GONG_BASE/v2/calls/extensive" \
-H "Authorization: Basic $GONG_AUTH" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"fromDateTime": "2025-01-01T00:00:00Z",
"toDateTime": "2025-01-31T23:59:59Z"
},
"contentSelector": {}
}' | jq '{
total: .records.totalRecords,
calls: [.calls[] | {
id: .metaData.id,
title: .metaData.title,
started: .metaData.started,
duration_min: ((.metaData.duration // 0) / 60 | floor),
url: .metaData.url
}]
}'
```
### Get Call Transcript
```bash
curl -s -X POST "$GONG_BASE/v2/calls/transcript" \
-H "Authorization: Basic $GONG_AUTH" \
-H "Content-Type: application/json" \
-d '{"filter": {"callIds": ["CALL_ID"]}}' | \
jq '.callTranscripts[0].transcript[] | "\(.speakerName // "Speaker"): \(.sentences[].text)"' -r
```
### Get Call Details
```bash
curl -s -X POST "$GONG_BASE/v2/calls/extensive" \
-H "Authorization: Basic $GONG_AUTH" \
-H "Content-Type: application/json" \
-d '{
"filter": {"callIds": ["CALL_ID"]},
"contentSelector": {"exposedFields": {"content": true, "parties": true}}
}' | jq '.calls[0]'
```
### Activity Stats
```bash
curl -s -X POST "$GONG_BASE/v2/stats/activity/aggregate" \
-H "Authorization: Basic $GONG_AUTH" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"fromDateTime": "2025-01-01T00:00:00Z",
"toDateTime": "2025-01-31T23:59:59Z"
}
}'
```
## Endpoints Reference
| Endpoint | Method | Use |
|----------|--------|-----|
| `/v2/users` | GET | List users |
| `/v2/calls/extensive` | POST | List/filter calls |
| `/v2/calls/transcript` | POST | Get transcripts |
| `/v2/stats/activity/aggregate` | POST | Activity stats |
| `/v2/meetings` | GET | Scheduled meetings |
## Pagination
Responses include cursor for pagination:
```json
{"records": {"totalRecords": 233, "cursor": "eyJ..."}}
```
Include cursor in next request: `{"cursor": "eyJ..."}`
## Date Helpers
```bash
# Last 7 days
FROM=$(date -v-7d +%Y-%m-%dT00:00:00Z 2>/dev/null || date -d "7 days ago" +%Y-%m-%dT00:00:00Z)
TO=$(date +%Y-%m-%dT23:59:59Z)
```
## Notes
- Rate limit: ~3 requests/second
- Call IDs are large integers as strings
- Transcripts may take time to process after call ends
- Date format: ISO 8601 (e.g., `2025-01-15T00:00:00Z`)Automatically update OpenClaw and selected skills once daily. Runs via cron, checks for updates, applies them, and messages the user with a summary of what changed.
Check for new OpenClaw releases and notify once per new version.
OpenClaw documentation expert with decision tree navigation, search scripts, doc fetching, version tracking, and config snippets for all OpenClaw features
Bulk download images from login-protected gallery websites using an attached browser session. Use when asked to scrape, download, or save images from authenticated gallery pages, extract full-size images from thumbnails, or batch download from multi-page galleries.
Three-Layer Memory System — automatic fact extraction, entity-based knowledge graph, and weekly synthesis. Manages life/areas/ entities with atomic facts and living summaries.
Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Claude ('No, that's wrong...', 'Actually...'), (3) User requests a capability that doesn't exist, (4) An external API or tool fails, (5) Claude realizes its knowledge is outdated or incorrect, (6) A better approach is discovered for a recurring task. Also review learnings before major tasks.
Sync skills between local installation and the GitHub source-of-truth repository. Use when asked to install, update, list, or push skills.
Persistent TODO scratch pad for tracking tasks across sessions. Use when user says "add to TODO", "what's on the TODO", "mark X done", "show TODO list", "remove from TODO", or asks about pending tasks. Also triggers on heartbeat to remind about stale items.