Skill 寫法圖鑑

contact-research

Anthropic | 商業與營運 | 原文 | Apache-2.0

用 Common Room 資料查出特定聯絡人的檔案、活動和對話切入點

中文翻譯

---
name: contact-research
description: "用 Common Room 的資料研究特定的人。當使用者說『who is [name]』『look up [email]』『research [contact]』『is [name] a warm lead』,或任何聯絡人層級的問題時觸發。"
---

# 聯絡人研究(Contact Research)

從 Common Room 取得完整的聯絡人檔案。支援用 email、社群帳號,或姓名加公司查詢。回傳的是豐富化後的資料,包括活動歷史、Spark、分數、網站造訪紀錄和 CRM 欄位。

## 步驟 1:找到聯絡人

Common Room 支援多種查詢方式,使用者給什麼就用什麼:

| 使用者提供的資訊 | 查詢方式 |
|---------------------|--------------|
| Email 位址 | 用 email 查詢(最可靠) |
| LinkedIn、Twitter/X 或 GitHub 帳號 | 用社群帳號查詢,要明確指定帳號類型 |
| 姓名 + 公司 | 用姓名加組織網域做身分比對;如果有歧義,列出符合的對象 |
| 只有姓名 | 用姓名搜尋;如果有多個符合,顯示簡短清單,請使用者確認 |

如果找不到符合的對象,就回覆:「Common Room doesn't have a record for this person.」不要猜測,也不要捏造檔案資料。

## 步驟 2:取得聯絡人欄位

用 Common Room 的物件目錄查看有哪些欄位群組以及裡面的內容。要完整檔案就請求所有群組;針對性的問題就只請求相關的部分。

**要知道的關鍵欄位群組:**
- **分數(Scores)**:一律回傳原始值或百分位,絕對不要用標籤
- **近期活動**:用 `Contact Initiated` 篩選(近 60 天),看的是對方自己的行動,不是你們團隊的
- **網站造訪**:總次數加上具體頁面(近 12 週)
- **Spark**:要追蹤互動隨時間的演變時,取回所有的 Spark

## 步驟 3:執行 Spark enrichment(如果有的話)

如果有 Spark 就用。Spark 提供:
- 專業背景和工作經歷
- 社群存在感和影響力訊號
- 人物類型分類:Champion、Economic Buyer、Technical Evaluator、End User 或 Gatekeeper
- 推測在採購流程中的角色

如果沒有 Spark,但有真實的活動資料(近期行動、網站造訪、社群互動),就從這些訊號推測人物類型。如果 Spark 和活動資料都沒有,就歸類為 Unknown,不要只憑職稱去猜人物類型。

當使用者想了解這位聯絡人的互動如何隨時間演變時,要取回**所有 Spark**(不只最新的)。

## 步驟 4:評估帳號背景

針對這位聯絡人所屬的公司,拉一份精簡的帳號快照。要記下:
- 帳號層級的未結商機、擴展訊號或流失風險
- 這家公司其他聯絡人是否也很活躍
- 這個人的互動程度和同事相比如何

## 步驟 5:找出對話切入角度

根據活動和訊號,挑出最強的 2 到 3 個切入點:
- 最近一次 `Contact Initiated` 的活動(社群貼文、產品事件、支援單)
- 他們最近造訪的特定網頁,特別是帶有評估意圖的
- 換工作、升職或公司新聞
- 他們的 Spark 人物類型,以及這代表的溝通風格
- 他們在已知進行中 deal 裡的角色

## 輸出格式

只放實際有回傳資料的段落。沒有資料的段落直接省略,不要用猜測去填。

**資料豐富時:**

```
## [Contact Name] — Profile

**Overview**
[2 sentences: who they are, their role, and relationship status]

**Details**
- Title: [title]
- Company: [company]
- Email: [email]
- LinkedIn: [URL]
- Other profiles: [Twitter/X, GitHub, CRM link if available]

**Scores** [If scores returned]
[All scores as raw values or percentiles]

**Recent Activity** (last 60 days) [If activity returned]
[3–5 bullets with dates]

**Website Visits** (last 12 weeks) [If visit data exists]
[Total visit count + list of pages visited]

**Spark Profile** [If Spark data is non-null]
[Persona type, background summary, influence signals]

**Segments** [If segments returned]
[List of segment names this contact belongs to]

**Account Context**
[1–2 sentences on their company's status]

**Conversation Starters**
[2–3 specific, signal-backed openers]
```

**資料稀少時(例如只回傳姓名、職稱、email、標籤;sparkSummary 是 null):**

```
## [Contact Name] — Profile (Limited Data)

**Data available:** [List exactly what Common Room returned]

[Present only the returned fields]

**Web Search**
[Any findings from searching their name + company]

**Note:** Common Room has limited data on this contact. No activity history, scores, or Spark profile available. I can run deeper web searches or look up their company for additional context.
```

不要用稀少的資料去產生對話切入點、人物類型推論或互動評估。這些都需要真實的訊號。

## 品質標準

- 查詢必須針對輸入類型使用正確的方法,不要在 email 和帳號之間亂猜
- 分數只用原始值/百分位,絕對不要用標籤
- `Contact Initiated` 的活動(近 60 天)是主要的互動訊號,要放在最前面
- 如果沒有 Spark,就直接說沒有,不要只憑職稱捏造人物類型
- 只要聯絡人最近一次活動超過 30 天,就要標註出來

## 參考檔案

- **`references/contact-signals-guide.md`**:完整的欄位說明、Spark 人物類型指南,以及對話切入點的原則

英文原文

---
name: contact-research
description: "Research a specific person using Common Room data. Triggers on 'who is [name]', 'look up [email]', 'research [contact]', 'is [name] a warm lead', or any contact-level question."
---

# Contact Research

Retrieve a comprehensive contact profile from Common Room. Supports lookup by email, social handle, or name + company. Returns enriched data including activity history, Spark, scores, website visits, and CRM fields.

## Step 1: Locate the Contact

Common Room supports multiple lookup methods — use whichever the user has provided:

| What the user gives | Lookup method |
|---------------------|--------------|
| Email address | Look up by email (most reliable) |
| LinkedIn, Twitter/X, or GitHub handle | Look up by social handle — specify handle type explicitly |
| Name + company | Identity resolution by name + org domain; present matches if ambiguous |
| Name only | Search by name; if multiple matches, show a brief list and ask the user to confirm |

If no match is found, respond: "Common Room doesn't have a record for this person." Do not speculate or fabricate profile data.

## Step 2: Fetch Contact Fields

Use the Common Room object catalog to see available field groups and their contents. For full profiles, request all groups. For targeted questions, request only what's relevant.

**Key field groups to know about:**
- **Scores** — always return as raw values or percentiles, never labels
- **Recent activity** — use `Contact Initiated` filter (last 60 days) for their actions, not your team's
- **Website visits** — total count + specific pages (last 12 weeks)
- **Spark** — retrieve all Sparks when tracking engagement evolution over time

## Step 3: Run Spark Enrichment (If Available)

If Spark is available, use it. Spark provides:
- Professional background and job history
- Social presence and influence signals
- Persona classification: Champion, Economic Buyer, Technical Evaluator, End User, or Gatekeeper
- Inferred role in the buying process

If Spark is unavailable but real activity data exists (recent actions, website visits, community engagement), infer a persona from those signals. If neither Spark nor activity data is available, classify as Unknown — do not guess a persona from title alone.

Retrieve **all Sparks** (not just the most recent) when the user wants to understand how this contact's engagement has evolved over time.

## Step 4: Assess Account Context

Pull an abbreviated account snapshot for this contact's parent company. Note:
- Open opportunities, expansion signals, or churn risk at the account level
- Whether other contacts at this company are also active
- How this person's engagement compares to their colleagues

## Step 5: Identify Conversation Angles

Based on activity and signals, surface the strongest 2–3 hooks:
- A recent `Contact Initiated` activity (community post, product event, support ticket)
- A specific web page they visited recently — especially if it signals evaluation intent
- A job change, promotion, or company news
- Their Spark persona and what that suggests about communication style
- Their role in a known active deal

## Output Format

Only include sections where data was actually returned. Omit sections with no data rather than filling them with guesses.

**When data is rich:**

```
## [Contact Name] — Profile

**Overview**
[2 sentences: who they are, their role, and relationship status]

**Details**
- Title: [title]
- Company: [company]
- Email: [email]
- LinkedIn: [URL]
- Other profiles: [Twitter/X, GitHub, CRM link if available]

**Scores** [If scores returned]
[All scores as raw values or percentiles]

**Recent Activity** (last 60 days) [If activity returned]
[3–5 bullets with dates]

**Website Visits** (last 12 weeks) [If visit data exists]
[Total visit count + list of pages visited]

**Spark Profile** [If Spark data is non-null]
[Persona type, background summary, influence signals]

**Segments** [If segments returned]
[List of segment names this contact belongs to]

**Account Context**
[1–2 sentences on their company's status]

**Conversation Starters**
[2–3 specific, signal-backed openers]
```

**When data is sparse (e.g., only name, title, email, tags returned; sparkSummary is null):**

```
## [Contact Name] — Profile (Limited Data)

**Data available:** [List exactly what Common Room returned]

[Present only the returned fields]

**Web Search**
[Any findings from searching their name + company]

**Note:** Common Room has limited data on this contact. No activity history, scores, or Spark profile available. I can run deeper web searches or look up their company for additional context.
```

Do not generate conversation starters, persona inferences, or engagement assessments from sparse data. These require real signals.

## Quality Standards

- Lookup must use the correct method for the input type — don't guess on email vs. handle
- Scores as raw/percentile only — never labels
- `Contact Initiated` activity (last 60 days) is the primary engagement signal — lead with it
- If Spark is unavailable, say so — don't fabricate a persona from title alone
- Flag any contact where the most recent activity is older than 30 days

## Reference Files

- **`references/contact-signals-guide.md`** — full field descriptions, Spark persona guide, and conversation starter principles