event 欄位指出觸發的事件種類。把 body 當 discriminated union、用這個欄位分流。
string
Discriminator。
session.ended / call.ended / session.finalized / recording.ready 之一。string
Pathors session ID。
string
事件 emit 時的 ISO 8601 timestamp。
session.ended
對話結束時觸發。對 call session,通話的最終狀態跟時長此時可能還沒就緒。
string
對話結束時 agent 停在的 pathway node。
number
messages 的長度 —— 這個 payload 送出的 user/assistant 對話輪數。array
對話逐字稿,依對話順序排列的
{ role, content, timestamp? } 物件。role 為 user 或 assistant —— tool call/result 跟 system prompt 都會被濾掉。timestamp 是該輪對話的 ISO 8601 時間,有記錄到才會出現。語音通話 finalize 後,這裡是 agent-authoritative 的對話內容(使用者實際聽到的版本)。object
這個 session 提取出來的變數,以名稱為 key。除了 agent 對話中提取的值之外,也包含 session 建立時注入的變數:
startAt / endAt、通話 metadata(fromNumber、toNumber),以及 —— 若該電話號碼有設定 header capture 的 SIP 通話 —— 被擷取的 custom SIP header 值,以各 header 設定的 attribute 名稱為 key(例如 X-Campaign-Id header 設定擷取為 campaignId,就會出現在 extractedVariables.campaignId)。string
已棄用
event 在多事件支援之前的 legacy 別名。未來版本會移除 —— 新 receiver 請改用 event。call.ended
通話結束時觸發。Call session 限定 —— text session 不會收到這個事件。
string
擁有此 agent 的 project ID。
string
最終 domain status。可能值:
userHangup、agentHangup、transferred、voicemail、errorTransferred、busy、userNoAnswer、userRejected、invalidNumber、sipTrunkFailure、agentNoAnswer、error、unknown、Ended。number
通話秒數。對於不計費的結束狀態(busy、no-answer、無效號碼)為
0。recording.ready
通話錄音處理完成後觸發 —— 成功與失敗都會觸發。Call session 限定,text session 不會收到。
對 call session 來說,錄音處理會 gate session.finalized:finalization 會等到錄音成功或失敗才發生(有 timeout backstop),成功的 recordingUrl 也會一併放進 session.finalized 的 payload。想單獨收到錄音訊號才需要訂閱 recording.ready —— 它是唯一會告訴你錄音失敗的事件;否則 session.finalized 已經帶了 URL。
string
擁有此 agent 的 project ID。
boolean
錄音是否成功處理並存檔。為
false 時不帶 recordingUrl。string
合併後音檔的臨時下載連結。只有
success 為 true 時才有。連結為短期有效(約 15 分鐘)—— 請儘快下載。過期後目前沒有 API 可重新取得,請改從 Pathors 後台的通話記錄下載錄音。session.finalized
這個 session 的所有事情都做完時觸發 —— 對 call session 來說包含錄音處理。Payload 已經把原本要從 session.ended、call.ended、recording.ready 各自抓出來的資料合併到同一個 body,receiver 只需處理這一個事件。
對 text session,call 相關欄位(callStatus、callDuration)整個被省略(不是設成 null)。用欄位有沒有來區分 call vs text:
string
擁有此 agent 的 project ID。
string
對話結束時 agent 停在的 pathway node。
number
messages 的長度,同 session.ended 的 messagesCount。array
對話逐字稿,格式與過濾規則同
session.ended 的 messages。object
同
session.ended 的 extractedVariables —— 電話號碼有設定 header capture 時,一樣包含擷取到的 custom SIP header 值。string
Call session 限定。 同
call.ended 的 callStatus。Text session 被省略。number
Call session 限定。 同
call.ended 的 callDuration。Text session 被省略。string
Call session 限定。 合併後音檔的臨時下載連結,同
recording.ready 的 recordingUrl。有錄音且處理成功時才有;text session 與錄音失敗時省略。連結為短期有效(約 15 分鐘)—— 請儘快下載。實作範例
用event 欄位 dispatch 各事件的 receiver:
順序
session.finalized 對某個 session 一定最後到:它只在所有預期的步驟都完成後才觸發 —— text session 只等 session.ended;call session 等 session.ended、call.ended 加上 recording.ready。
Call session 的典型順序:
session.endedcall.endedrecording.readysession.finalized
session.ended 跟 session.finalized 緊接著到。
個別步驟(session.ended、call.ended、recording.ready)彼此之間在 edge case(例如使用者直接掛斷在 agent 還沒走到結尾節點時)沒有嚴格順序,而且 recording.ready 的 HTTP 送達可能跟它解鎖的 session.finalized 請求互相 race。可以依賴的是:收到 session.finalized 時錄音處理必定已結束,成功的錄音 URL 就在該 payload 裡。