Open in
將 ThunderPhone 與 n8n 一同使用
安裝適用於 n8n 的 ThunderPhone 節點、連接伺服器 API 金鑰,並建立一個在每次通話結束時執行的工作流程。
n8n 是一個工作流程自動化工具。適用於 n8n 的 ThunderPhone 套件 新增兩個節點:
- ThunderPhone 觸發器 會在通話結束時(通話已完成)或通話評分執行完成時(通話已評分)啟動工作流程。
- ThunderPhone 可撥打外撥電話、將聯絡人加入並啟動推廣活動、取得包含逐字稿及錄音的通話資料,以及列出你的智能體及電話號碼。
這是已驗證的社群節點,列於 n8n 上的 ThunderPhone。
安裝節點
在 n8n 編輯器中,按一下 + 開啟節點面板,然後搜尋 ThunderPhone。執行個體擁有人可能需要先設定已驗證節點,其他使用者才可新增節點。
如你使用自行託管的 n8n,亦可按套件名稱安裝:開啟
設定 > 社群節點,然後安裝 n8n-nodes-thunderphone。安裝前請先檢查社群節點風險及你的執行個體政策。
建立伺服器 API 金鑰
- 開啟「金鑰」分頁
在 ThunderPhone 中,前往 組織 → 金鑰,然後按一下 建立金鑰。
- 命名
使用可說明金鑰所在位置的名稱,例如「n8n」。
- 立即複製
完整的
sk_live_...密鑰只會顯示一次。關閉對話方塊前請先複製。
只有管理員或擁有人可以建立金鑰,而 ThunderPhone 會將使用該金鑰發出的請求 視為由該人士發出。觸發器及推廣活動操作要求該人士持續擁有管理員或擁有人角色。 建立伺服器 API 金鑰說明如何輪替及撤銷金鑰。
在 n8n 新增憑證
- 在 n8n 中,建立類型為 ThunderPhone API 的憑證。
- 將金鑰貼到 API 金鑰。
- 儲存並執行憑證測試。測試會透過
GET /v1/calls?limit=1讀取你組織的一個通話記錄。
建立第一個工作流程
此工作流程會在每次通話結束時,於 Google 試算表新增一列。
- 新增觸發器
新增 ThunderPhone Trigger,選擇你的 ThunderPhone API 憑證,並將 Event 設為 Call Completed。
- 取得通話資料
新增一個 ThunderPhone 節點。將 Resource 設為 Call、Operation 設為 Get,並將 Call ID 設為運算式
{{ $json.data.call_id }}。 輸出內容包括通話記錄、transcripts及recording_url;後者為短期有效連結,沒有錄音的通話會顯示為null。 - 新增一列
新增一個可附加列的 Google Sheets 節點,並從 Get Call 輸出對應你需要的欄位 (見下表)。
- 啟用工作流程
儲存並啟用。觸發器會將其正式環境 URL 註冊為你 ThunderPhone 組織中的 Webhook 端點。停用工作流程會刪除此端點。
- 測試
在建置器中開啟一個智能體,按一下 Talk,然後結束通話。建置器測試通話會以
web.complete傳送,這是 Call Completed 所涵蓋的兩種事件之一,因此工作流程會執行並新增一列。
實用欄位:
| 欄位 | 運算式 |
|---|---|
| 通話 ID | {{ $json.call_id }} |
| 方向 | {{ $json.direction }} |
| 來電號碼 | {{ $json.from_number }} |
| 受話號碼 | {{ $json.to_number }} |
| 開始時間 | {{ $json.start_time }} |
| 時長(秒) | {{ $json.duration_seconds }} |
| 狀態 | {{ $json.status }} |
| 結束原因 | {{ $json.end_reason }} |
| 通話連結 | https://app.thunderphone.com/dashboard/call-history/{{ $json.call_id }} |
通話連結會為你組織的成員在 ThunderPhone 控制台中開啟該通話,並顯示其逐字稿及錄音,因此試算表毋須儲存兩者。
如仍要加入逐字稿,請對應
{{ $json.transcripts.filter(t => typeof t.content === 'string').map(t => t.role + ': ' + t.content).join('\n') }}。
錄音 URL 會過期,因此請儲存通話 ID,並在需要新連結時再次執行 Get Call。通話逐字稿、摘要及錄音可能包含個人或健康資料。只可將其傳送至你的組織獲准使用該等資料的應用程式;如涉及健康資料,須簽訂 BAA,並只保留所需欄位。
觸發器會輸出完整事件:type、event_id 及 data。請參閱
telephony.complete / web.complete 及
call.graded 了解所有欄位。傳送至少一次,而同一事件重試時 event_id 保持不變,因此請在不可重複執行的步驟前先檢查它。
安全地撥打外撥電話
撥打外撥電話(資源 外撥電話、操作 撥打) 接受:
| 欄位 | 含義 |
|---|---|
| 智能體名稱或 ID | 已儲存的智能體。下拉式選單會列出你的智能體。 |
| 電話號碼名稱或 ID | 撥出號碼。下拉式選單只會列出已啟用外撥功能的號碼。 |
| 目標號碼 | E.164 格式的目的地號碼,例如 +14155552671。 |
| 變數 | 用於智能體提示詞中佔位符的值所組成的 JSON 物件。 |
| 冪等性金鑰 | 來自上游記錄或事件的穩定 ID。必填。 |
將 冪等性金鑰 對應至觸發執行的來源 ID,例如
CRM 記錄 ID 或觸發器的 event_id。節點會傳送
n8n:<node ID>:<your value>,因此:
- 自動重試或 重試執行 會傳送相同金鑰,而
ThunderPhone 會回傳原來的通話並附上
idempotent_replay: true, 不會再次撥號。 - 兩個接收相同記錄的 ThunderPhone 節點會傳送不同金鑰。
- 空白值會在傳送任何請求前失敗。
避免使用時間戳記、隨機值,以及 n8n 執行或工作流程 ID。重試時使用新值會 撥打第二通實際電話。整個金鑰最多可包含 128 個字元。以不同智能體、號碼或變數 重複使用金鑰會因衝突而失敗。
活動。 新增聯絡人(資源 活動)會將聯絡人新增至
草稿活動。它接受活動 ID 及聯絡人 JSON 陣列。每位聯絡人都需要 phone_number;其他金鑰
會成為通話變數。當所有聯絡人均被拒絕時,節點會失敗;如只有部分聯絡人被拒絕,
則會設定 partial_success: true。開始 需要勾選確認方塊,確認活動會撥打實際電話並使用 ThunderPhone
點數。請參閱外撥活動。
工作流程開始撥打電話前:
- 如 ThunderPhone 要求你的機構確認其外撥電話 符合 TCPA 及其他通話法規,管理員必須先在控制台記錄 該確認。
- 撥出號碼必須已啟用外撥功能。你從自有電訊供應商攜入的號碼 在完成驗證後即可使用。ThunderPhone 號碼初始只支援 來電,並可獲批准用於外撥:管理員可在電話號碼頁面提出申請。請參閱 取得電話號碼。
- 你的機構有責任確保已取得撥打每個號碼的同意, 並遵守適用的通話法規。請參閱 外撥通話法規。
工作流程範例
- 將 CRM 聯絡人加入活動。 將 CRM 聯絡人新增至 ThunderPhone 草稿活動,然後在有人批准名單後啟動活動。
- 將已完成通話寫入客戶記錄。 在通話完成時,執行取得通話, 並將逐字稿及錄音連結儲存至相符的客戶記錄。
- 將低分通話送交審核。 在通話評分時,篩選
{{ $json.data.grade.score }},並將低分通話連同通話 ID 及評分詳情 路由至審核佇列。一通電話可被評分多於一次, 而每次完成評分執行均會觸發觸發器,因此請只保留每個通話 ID 最新的graded_at。
通話逐字稿、摘要及錄音可能包含個人或健康 資訊。只應將其傳送至你的機構獲准使用該等資料的應用程式;如涉及健康資訊, 應在 BAA 下處理,並只保留所需欄位。