外展序列建構器
接收一個購買信號。產生個人化的多渠道外展序列。輸出可直接發送的訊息,涵蓋電子郵件、LinkedIn 和電話。
關鍵規則: 每個訊息都必須根據您載入的上下文完整填入。僅允許使用 {{first_name}} 作為變數。不得使用 [公司名稱] 括號或 [INSERT PAIN POINT] 這類佔位符。如果您沒有足夠資訊可填入內容,請先詢問再開始撰寫。絕不發送含有未填入佔位符的訊息。
步驟 1:設定檢查
確認必要的環境變數:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "COMPOSIO_API_KEY: ${COMPOSIO_API_KEY:-未設定,將跳過 Gmail 草稿建立}"
如果缺少 GEMINI_API_KEY: 停止。告訴使用者:「需要 GEMINI_API_KEY。請到 aistudio.google.com 取得。並將其加入您的 .env 檔案。」
如果缺少 COMPOSIO_API_KEY: 繼續。序列將以格式化文字輸出,方便複製貼上。Gmail 草稿建立功能將會跳過。
步驟 2:載入上下文
檢查現有的 ICP 檔案和客戶帳戶檔案:
ls docs/icp.md 2>/dev/null && echo "找到 icp" || echo "缺少 icp"
ls docs/accounts/ 2>/dev/null && echo "找到 accounts" || echo "缺少 accounts"
如果 docs/icp.md 存在: 讀取它。擷取:
- 目標人物(職稱、資歷、部門)
- 公司概況(規模、產業、融資階段)
- 核心痛點(使用買家的確切語言)
- 關鍵差異化優勢(您的產品相較於替代方案的優勢)
如果 docs/accounts/{company}.md 存在: 讀取相關檔案。擷取:
- 公司名稱、規模、近期背景
- 已知的技術棧或痛點
- 任何現有的關係或先前的聯繫
如果兩者都不存在: 向使用者詢問這 4 個問題。在全部 4 個問題得到回答之前,不得繼續:
- 您的產品是做什麼的?(一兩句話)
- 您的目標對象是誰?(職稱、公司規模、產業)
- 您解決的主要問題是什麼?(從買家的角度,而非您的角度)
- 您的關鍵差異化優勢是什麼?(與他們目前使用的替代方案相比,您的優勢在哪)
步驟 3:識別信號
判斷適用哪一種信號類型。請參閱 references/signal-playbook.md 以了解每種信號類型的完整洞察、橋接、開場白和請求。
7 種信號類型:
| 信號 | 定義 |
|---|---|
| 融資後 | 公司在過去 30 天內完成了一輪融資 |
| 招聘信號 | 公司在你服務的領域發布了 5 個或以上的職位 |
| 競爭對手取代 | 聯絡人正在使用競爭對手產品並表現出挫折感 |
| 產品發布 | 公司發布了新產品或重大功能 |
| 內容參與 | 聯絡人對您的內容按讚、評論或分享 |
| 活動後續 | 您在某會議或網路研討會中見過面或參加同一場次 |
| 轉職 | 聯絡人在過去 60 天內轉到新公司 |
如果使用者在提示中提供了信號: 確認類型並擷取具體細節(融資輪金額、職位名稱、產品名稱、活動名稱等)。
如果沒有明確的信號: 詢問:「這次外展的觸發原因是什麼?(例如:他們剛完成融資、他們正在招聘工程師、您在活動中見過他們)」
在繼續之前,請說明檢測到的信號類型和具體細節。
步驟 4:發展切入點
使用步驟 2-3 中載入的信號類型和上下文,定義四個切入點要素。請參閱 references/signal-playbook.md 了解此信號類型的公式。
在產生任何訊息之前,先明確寫出:
信號:[具體信號 + 具體細節]
洞察:[這個信號揭示了他們處境的什麼信息]
橋接:[您的產品如何與信號所揭示的內容產生連結]
開場白:[一句話,引用具體信號細節]
請求:[最小可行的行動呼籲,少於 10 個字]
開場白必須指名具體的觸發事件。模糊的開場白將被拒絕。
好的:"恭喜您完成 1800 萬美元的 B 輪融資 — 快速擴張銷售團隊通常會產生入職培訓缺口。" 不好的:"我看到貴公司最近獲得了融資。"
步驟 5:規劃渠道順序
設計 4-6 個橫跨電子郵件、LinkedIn 和電話的接觸點。規則:
- 總持續時間:10-14 天
- 最少間隔:任意兩次接觸之間至少間隔 2 天
- 絕不連續兩次使用相同渠道
- 每次後續接觸都必須提供新的價值(新資源、新切入點、新證明點)。絕不是「只是跟進而已」。
- 最後一個接觸點是簡短的告別訊息
大多數信號的預設節奏:
第 1 天:電子郵件(首次接觸,以信號為主導的開場白)
第 3 天:LinkedIn(建立聯繫的附註或簡短私訊)
第 7 天:電子郵件(新切入點或案例研究)
第 9 天:電話(通話話術 + 語音信箱腳本)
第 12 天:電子郵件(不同的框架或針對異議的回應)
第 14 天:電子郵件(簡短的告別訊息)
根據信號類型調整:
- 融資後:加快節奏(第 1、2、4、7、10 天)。在公告後 48 小時內行動。
- 活動後續:從 LinkedIn 開始,而非電子郵件(先使用較溫暖的渠道)
- 內容參與:先從 LinkedIn 回覆或留言開始,再使用電子郵件
在撰寫訊息之前,先說明每個接觸點的規劃日期和渠道。
步驟 6:產生序列
完整閱讀 references/sequence-format.md。閱讀 references/output-template.md 並為此信號類型選擇模板。
將 Gemini 請求寫入一個臨時檔案:
cat > /tmp/outreach-sequence-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "你是一位 B2B 銷售文案撰寫人,專門撰寫能獲得回覆的陌生開發訊息。規則:每則訊息的第一句話都是關於「他們」,而不是你的公司。在首封訊息中,必須指名並詳細說明具體的購買信號。自然地使用縮寫。使用短句。不要使用企業行話。禁用詞彙: synergy(綜效)、leverage(槓桿)、touch base(聯繫)、circle back(回訪)、ping(提醒)、loop in(知會)、alignment(對齊)、innovative(創新)、cutting-edge(尖端)、best-in-class(同級最佳)、world-class(世界級)、game-changing(改變遊戲規則)、disruptive(顛覆性)、bandwidth(帶寬)、deep dive(深入探討)、low-hanging fruit(唾手可得的果實)、move the needle(產生影響)。不使用客套話:不寫『我希望這封郵件讓您一切安好』、不寫『週一愉快』、不寫『只是想』。每次後續接觸都提供新的價值——絕不『只是跟進』。硬性限制:電子郵件正文少於 100 字、LinkedIn 訊息少於 300 個字符、電話開場白少於 20 字。僅允許 {{first_name}} 作為變數——從提供的上下文中填入所有其他細節。告別訊息要簡短(3-4 句)、友好,並保留未來聯繫的空間。"
}]
},
"contents": [{
"parts": [{
"text": "CONTEXT_AND_INSTRUCTIONS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/outreach-sequence-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
將 CONTEXT_AND_INSTRUCTIONS_HERE 替換為:
- 步驟 2 中的產品描述、目標人物、痛點和差異化優勢
- 步驟 4 中的信號類型、具體細節和四個切入點要素
- 步驟 5 中的渠道計劃
- 撰寫每個接觸點(包含主旨行(電子郵件)、字符數(LinkedIn)和通話話術(電話))的指示
對於每個電子郵件接觸點,需要提供兩個主旨行變體(A/B 測試)。
步驟 7:預測並處理異議
產生序列後,針對此信號類型找出 2-4 個最可能的異議。在現有的接觸點中自然地預先處理每個異議。不要新增單獨的異議處理訊息。將預先處理融入序列中。
閱讀 references/sequence-format.md 中的異議處理手冊。找出哪個接觸點負責處理哪個異議。
4 個需要預先處理的標準異議:
| 異議 | 預先處理方法 |
|---|---|
| "我們已經有解決方案了" | 承認他們現有的工具,將您的產品定位為互補或下一步 |
| "現在不是合適的時機" | 將信號直接與「為什麼現在是合適時機」連結 |
| "太貴了" | 說明投資報酬率,錨定在他們關心的數字上 |
| "需要更多人參與" | 提供易於分享的資源(一頁說明、錄製的產品導覽) |
在呈現最終序列之前,說明哪個接觸點負責處理哪個異議。
步驟 8:自我品質檢查
在呈現之前,執行所有檢查並修正任何違規:
- 每則訊息都以關於「他們」的句子開頭
- 至少在首個接觸點中提及具體的信號細節
- 除了
{{first_name}}之外,沒有未填入的佔位符 - 電子郵件正文少於 100 字(計算並說明每個訊息的字數)
- LinkedIn 訊息少於 300 個字符(計算並說明每個訊息的字符數)
- 電話開場白少於 20 字
- 所有訊息中都沒有禁用詞彙
- 任何後續訊息中都沒有「只是跟進而已」
- 每次後續接觸都加入新的切入點或價值
- 沒有連續兩次使用相同渠道
- 在整個序列中至少預先處理了 2 個異議
- 告別訊息為 3-4 句、友好、不帶愧疚感
在呈現之前修正任何違規。
步驟 9:輸出與儲存
在一個程式碼區塊中呈現完整的序列。
儲存至檔案:
mkdir -p docs/sequences
cat > docs/sequences/信號類型.md << 'EOF'
序列內容
EOF
echo "序列已儲存至 docs/sequences/信號類型.md"
如果已設定 COMPOSIO_API_KEY: 詢問:「要透過 Composio 在 Gmail 中建立電子郵件草稿嗎?」
確認後,針對每個電子郵件接觸點:
# Agent 呼叫 GMAIL_CREATE_EMAIL_DRAFT Composio 動作
# subject = [主旨行], body = [電子郵件正文], recipient = [聯絡人電子郵件(如果已知)]
建立草稿後:「電子郵件草稿已在 Gmail 中建立。請檢查您的草稿資料夾。」
LinkedIn 訊息: 以單獨的複製貼上區塊呈現,並為每個接觸點加上清楚標籤。LinkedIn 不支援程式化發送訊息。
電話腳本: 以格式化的通話話術呈現,使用項目符號,而非僵硬的腳本。