簽署工作階段與連結
收件者會在 Bona Fide 的簽署頁面上簽署:可以是位於 https://sign.bonafidesign.com/s/… 的託管頁面,也可以是透過 <bf-signing> 嵌入您產品中的同一個頁面。收件者不需要帳戶。讓他們進入簽署流程的是簽署工作階段。
簽署工作階段
標題為「簽署工作階段」的章節電子郵件傳遞會自動為您建立工作階段(也就是郵件中的連結)。若是嵌入式簽署或由您自行傳遞的簽署,請從您的後端核發工作階段:
curl https://api.bonafidesign.com/v1/envelopes/env_8Gm2kQ4rT1/sessions \ -H "Authorization: Bearer $BONA_FIDE_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "recipient": "rcp_5Jw0pLs9Xe", "mode": "embedded", "allowedOrigins": ["https://app.example.com"], "ttlSeconds": 600 }'{ "id": "ses_2Hq8vNw3Kd", "token": "bfs_…", "url": "https://sign.bonafidesign.com/s/?embed=1#session=bfs_…", "expiresAt": "2026-10-13T14:08:04.512Z"}| 欄位 | 說明 |
|---|---|
recipient |
信封中仍可簽署的收件者(不是副本收件者,且尚未完成) |
mode |
embedded(預設)或 hosted。託管式的 url 格式為 …/s/<token>,可用於重新導向或由您自行寄送 |
allowedOrigins |
最多 10 個可以用框架嵌入該頁面的來源 |
returnUrl |
簽署人完成後,託管頁面要將其帶往的位址 |
ttlSeconds |
60 到 3600,預設 600 |
工作階段只能使用一次:收件者提交後,工作階段即告失效;已使用或已到期的工作階段會傳回 410 Gone。請在每次轉譯頁面時核發新的工作階段。只有在信封處於 sent 狀態時才能建立工作階段,作廢信封則會讓其所有工作階段失效。
簽署人會經歷的步驟
標題為「簽署人會經歷的步驟」的章節簽署頁面(以及您以同一套 API 建置的任何自訂介面)會依照下列步驟進行:
- 交換:
POST /v1/signing/exchange { "token": "bfs_…" }會傳回一個保存在記憶體中的短效存取權杖(bfa_…)。整個過程不使用 Cookie,因此即使在 iframe 中封鎖第三方 Cookie 也沒有影響。 - 載入:
GET /v1/signing/session會傳回簽署人檢視(信封標題、寄件者、收件者的角色和欄位、預先填入的值、消費者揭露事項),並在第一次載入時記錄recipient.viewed。GET /v1/signing/document則是要顯示的 PDF。 - 驗證(僅限
email_otp):POST /v1/signing/otp會以電子郵件寄送 6 位數驗證碼(有效 10 分鐘),POST /v1/signing/otp/verify則負責檢查。驗證碼錯誤時會傳回verified: false以及剩餘的嘗試次數。如果收件者的驗證方式不需要驗證碼,檢視中的verification.verified已經是true。 - 提交:
POST /v1/signing/submit,附上欄位的values(手寫、鍵入或上傳的簽名)、對揭露事項的同意,以及viewedDocumentHash:也就是所顯示 PDF 的 SHA-256。如果文件在此之後有所變更,提交會遭到拒絕(409)。 - 或者拒絕:
POST /v1/signing/decline { "reason": "…" }會終止信封(envelope.declined)。
只有在先前的所有傳送群組都完成後,才會輪到該收件者;在此之前,檢視中的 canSign: false,提交則會傳回 409 not-your-turn。
簽署人驗證
標題為「簽署人驗證」的章節每位收件者都有一個 verification 方式:預設採用角色的驗證方式(在範本設計工具的角色面板中設定),除非信封針對該收件者加以覆寫(在傳送畫面中,或透過 recipients[].verification)。
| 方式 | 簽署人要做什麼 | 適用情境 |
|---|---|---|
none(預設) |
開啟唯一的簽署連結並簽署 | 連結以電子郵件寄給對方:只有能存取該收件匣的人才拿得到 |
email_otp |
開啟連結,然後輸入寄到同一地址的 6 位數驗證碼 | 您希望在簽署當下取得第二份即時證明(高價值合約、共用收件匣) |
integrator_asserted |
在您的產品中簽署,由您的產品為其身分背書(externalUserId) |
在您自己的登入機制之後進行的嵌入式簽署 |
之所以預設使用 none,是因為 Bona Fide 以電子郵件寄送的連結本身就是該收件者專屬且無法猜測的:能開啟連結,就表示對方掌控該電子郵件地址,而這正是電子簽名法律所依賴的歸屬依據(美國的 ESIGN / UETA,以及 eIDAS 下的簡易電子簽章)。同類產品也預設採用這種方式。以 email_otp 發布的範本會保留此設定,明確指定的 email_otp 在任何地方都會繼續有效。
有兩種流程絕不只依賴連結:
- 常設簽署連結(
/l/…):訪客會自行輸入其電子郵件地址,因此在建立信封之前,一律必須確認以電子郵件寄送的驗證碼,不論範本如何設定。 - 您核發的工作階段(
POST /v1/envelopes/{id}/sessions)完全不帶有電子郵件地址的證明:這是您登入機制的責任,因此請為這類工作階段使用integrator_asserted(搭配externalUserId)或email_otp。
完成證明書會為每位簽署人記錄實際使用的方式:
| 記錄內容 | 情況 |
|---|---|
| 電子郵件連結(唯一連結已寄至地址) | none,透過電子郵件中的連結簽署 |
| 電子郵件連結 + 一次性驗證碼(已寄至地址) | email_otp,透過電子郵件中的連結簽署 |
| 簽署連結 + 一次性驗證碼(已寄至地址) | 常設連結的訪客 |
| 一次性驗證碼(已寄至地址) | 在您核發的工作階段中使用 email_otp |
| 由寄件者核發的簽署工作階段 | 在您核發的工作階段中使用 none |
| 整合者聲明 | integrator_asserted |
公開驗證摘要會顯示相同的標籤,但不含地址。
簽署頁面、相關電子郵件(簽署要求、提醒、驗證碼、完成通知、作廢通知)、常設連結頁面以及檢視者狀態頁面提供 50 種語言。簽署人看到的語言依下列優先順序決定:
- 簽署人從頁面語言選單中選擇的語言(會在該裝置上記住);
<bf-signing locale="…">(嵌入式簽署)或託管連結上的?locale=;- 建立信封時為收件者設定的
locale(recipients[].locale,或信封上的locale,適用於所有未個別設定的人); - 簽署人瀏覽器的語言。
電子郵件在任何人開啟頁面之前就需要決定語言,因此會使用收件者的 locale,未設定時則使用英文。常設連結會以訪客頁面所顯示的語言寄送驗證碼郵件。
{ "template": "tpl_…", "locale": "es-419", "recipients": [ { "role": "client", "name": "Ana Souza", "email": "ana@example.com", "locale": "pt-BR" }, { "role": "company", "name": "Lee Park", "email": "lee@example.com" } ]}相近的語言標記也會被接受,並以其對應的語言儲存(de-AT → de、es-MX → es-419、zh-TW → zh-Hant);其他任何值都會視為驗證錯誤。翻譯版本的同意揭露事項會註明以英文文本為準,簽署人也可以切換到英文版本;閱讀揭露事項時所用的語言會隨簽名一併記錄(recipient.signed 稽核事件中的 consentLocale)。
| 代碼 | 語言 | 原文名稱 | |
|---|---|---|---|
ar |
阿拉伯文 | العربية | 由右至左 |
hy |
亞美尼亞文 | Հայերեն | |
bn |
孟加拉文 | বাংলা | |
bg |
保加利亞文 | Български | |
zh-Hans |
中文(簡體) | 简体中文 | |
zh-Hant |
中文(繁體) | 繁體中文 | |
hr |
克羅埃西亞文 | Hrvatski | |
cs |
捷克文 | Čeština | |
da |
丹麥文 | Dansk | |
nl |
荷蘭文 | Nederlands | |
en-GB |
英文(英國) | English (UK) | |
en-US |
英文(美國) | English (US) | |
et |
愛沙尼亞文 | Eesti | |
fil |
菲律賓文 | Filipino | |
fi |
芬蘭文 | Suomi | |
fr |
法文 | Français | |
fr-CA |
法文(加拿大) | Français (Canada) | |
de |
德文 | Deutsch | |
el |
希臘文 | Ελληνικά | |
he |
希伯來文 | עברית | 由右至左 |
hi |
印地文 | हिन्दी | |
hu |
匈牙利文 | Magyar | |
id |
印尼文 | Bahasa Indonesia | |
it |
義大利文 | Italiano | |
ja |
日文 | 日本語 | |
ko |
韓文 | 한국어 | |
lv |
拉脫維亞文 | Latviešu | |
lt |
立陶宛文 | Lietuvių | |
ms |
馬來文 | Bahasa Melayu | |
mr |
馬拉地文 | मराठी | |
nb |
挪威文 | Norsk bokmål | |
fa |
波斯文 | فارسی | 由右至左 |
pl |
波蘭文 | Polski | |
pt-BR |
葡萄牙文(巴西) | Português (Brasil) | |
pt-PT |
葡萄牙文(葡萄牙) | Português (Portugal) | |
ro |
羅馬尼亞文 | Română | |
ru |
俄文 | Русский | |
sr-Latn |
塞爾維亞文(拉丁字母) | Srpski | |
sk |
斯洛伐克文 | Slovenčina | |
sl |
斯洛維尼亞文 | Slovenščina | |
es-419 |
西班牙文(拉丁美洲) | Español (Latinoamérica) | |
es-ES |
西班牙文(西班牙) | Español (España) | |
sw |
史瓦希里文 | Kiswahili | |
sv |
瑞典文 | Svenska | |
te |
泰盧固文 | తెలుగు | |
th |
泰文 | ไทย | |
tr |
土耳其文 | Türkçe | |
uk |
烏克蘭文 | Українська | |
ur |
烏爾都文 | اردو | 由右至左 |
vi |
越南文 | Tiếng Việt |
常設簽署連結
標題為「常設簽署連結」的章節簽署連結是一個永久 URL,適用於許多人以相同方式簽署的合約:免責聲明、承攬人協議、試行方案條款等。每位完成簽署的訪客都會取得自己的信封。
curl https://api.bonafidesign.com/v1/signing-links \ -H "Authorization: Bearer $BONA_FIDE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "template": "tpl_…", "visitorRole": "contractor", "countersign": { "role": "company", "mode": "auto" }, "limits": { "perEmailPerDay": 3, "perIpPerHour": 20, "dailyCap": 200, "allowedEmailDomains": ["example.com"] } }'visitorRole是訪客所擔任的簽署人角色。連結支援一位訪客和最多一位副署人:mode: "auto"會以 Bona Fide 平台印章自動副署,mode: "person"則會將信封傳送給指定的email。其他任何非副本角色都會沒有收件者,因此這類範本會遭到拒絕。- 訪客輸入姓名、電子郵件和範本的變數,然後在建立任何內容之前確認電子郵件驗證碼(先呼叫
POST /v1/links/{id}/start,再呼叫POST /v1/links/{id}/verify)。 limits可依每個電子郵件每天(預設 3 次)、每個 IP 每小時(預設 20 次)、每天總量以及電子郵件網域限制使用次數。啟用dedupe(預設開啟)時,已經簽署過的電子郵件地址會收到409 already-signed。PATCH /v1/signing-links/{id}可暫停(active: false)、繼續連結,或將其改用較新的版本;刪除連結會保留它已建立的信封。每次使用都會發出signing_link.used。