DocuSign

DocuSign API と Python SDK の実装ガイド – 認証・エンベロープ・Webhook

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

1. Python SDK のインストールとクライアント初期化

DocuSign が公式に提供している docusign‑esign パッケージは、OAuth 認証・API 呼び出し用のラッパーをすべて備えた成熟した SDK です。まずは環境にインストールし、ベース URL とアクセストークンだけで利用できる ApiClient を作成します。

1‑1. 基本モジュールと役割

モジュール 主な役割
ApiClient エンドポイント・認証情報を保持し、全リクエストの基礎となる
AuthenticationApi (※OAuth 用) JWT および Authorization Code フローでアクセストークン取得
EnvelopesApi エンベロープ作成・送信・状態取得など
AccountsApi アカウント情報やユーザー管理

:SDK のバージョン 3.x 系以降では、トークン取得は AuthenticationApilogin_options を使うのではなく、ApiClientrequest_jwt_user_token / request_access_token メソッドを利用します。

1‑2. ApiClient の初期化例


2. 認証方式の選択と実装

DocuSign では主に Authorization CodeJWT(JSON Web Token) の 2 種類が提供されています。以下でそれぞれのフローを最新 SDK に合わせて実装します。

2‑1. Authorization Code フロー(ユーザー操作が必要)

この方式は、Web アプリやデスクトップアプリでエンドユーザーに同意画面を表示させるケース向けです。

手順概要
1. 開発者ポータルで Integration Key とリダイレクト URI を作成
2. ユーザーを認可 URL にリダイレクトし、code(認可コード)を取得
3. 取得した code をアクセストークンに交換

実装サンプル

ポイント
- AuthenticationApi.generate_access_token の第一引数は grant_type="authorization_code" です。
- 取得したトークンは api_client.set_default_header("Authorization", f"Bearer {token}") で以降のリクエストに付与します。

2‑2. JWT フロー(バックエンド専用)

JWT はサーバー側だけで完結し、ユーザー操作が不要です。事前に Integration Key に Impersonation 権限を付与しておく必要があります。

必要なライブラリ

実装サンプル(SDK 3.x 系)

重要
- AuthenticationApi.request_jwt_user_token が現在の公式メソッド名です(過去の generate_access_token_using_jwt は廃止)。
- 取得したアクセストークンは同様に api_client.set_default_header("Authorization", f"Bearer {token}") で設定します。


3. サンドボックス環境と本番環境の切替え手順

DocuSign は Demo(Sandbox)Production の 2 つのエンドポイントを提供しています。コードベースは同一でも、ベース URL と Integration Key が別々になる点に注意が必要です。

環境 ベース URL 主な利用シーン
Sandbox (Demo) https://demo.docusign.net/restapi 開発・テスト、無料アカウントでの検証
Production https://www.docusign.net/restapi 本番リリース時に使用

切替え実装例

  • 環境変数 DOCUSIGN_ENVprod に変更するだけで本番エンドポイントに切り替わります。
  • 本番移行時は必ず Integration Key(クライアント ID)とシークレット、RSA 鍵 も Production 用のものに差し替えてください。

4. エンベロープ作成・送信とメールカスタマイズ

エンベロープは「文書 + 受信者 + メール設定」の集合体です。以下では PDF の Base64 エンコードから、件名・本文の個別カスタマイズまでを網羅的に示します。

4‑1. 文書と受信者オブジェクトの作成

4‑2. メール件名・本文の個別カスタマイズ

RecipientEmailNotificationSigner に直接設定すると、受信者ごとに異なるメール内容を送れます。

公式ブログ
メール件名と本文のカスタマイズ」 (2020‑02‑18)

4‑3. EnvelopeDefinition にまとめて送信


5. タブ取得と Connect Webhook の設定

署名完了後に入力されたフィールド(タブ)の値を取得したり、リアルタイムでステータス変化を受け取るには EnvelopesApiEventNotification が鍵になります。

5‑1. タブ情報の取得

公式ブログ
エンベロープのタブ情報取得」 (2020‑05‑21)

5‑2. Connect(Webhook)設定の組み込み

Connect はエンベロープ単位でイベント通知を外部システムへプッシュします。以下は「送信」および「完了」イベントを受け取る最小構成です。

公式ブログ
エンベロープに Connect Webhook を追加する」 (2020‑05‑27)

受信側実装のヒント
- DocuSign は X-DocuSign-Signature ヘッダーで署名検証を行います。必ずこのヘッダーをチェックしてください。
- POST ボディは JSON 形式で、eventEnvelope オブジェクトにエンベロープ ID やステータスが含まれます。


6. エラーハンドリング・レートリミット対策・リトライ戦略

実運用では HTTP ステータスコードごとに適切な処理を行うことが成功率向上の鍵です。以下は 429(レートリミット) に対する指数バックオフ実装例です。

6‑1. 主なステータスと推奨アクション

ステータス 原因例 推奨対応
400 パラメータ不正、必須ヘッダー欠損 入力検証・リクエスト構築ロジックの見直し
401 トークン期限切れ、無効トークン 再度認証フローを実行(JWT の場合は再取得)
403 権限不足、ユーザーが対象アカウントに未所属 Integration Key の権限・ユーザー設定を確認
429 レートリミット超過 Exponential Backoff でリトライ
500 系 DocuSign 側の一時障害 数回リトライし、継続失敗は監視アラートへ

6‑2. リトライユーティリティ


7. 本番環境移行チェックリスト

サンドボックスから本番へ切り替える際に見落としがちなのは「設定項目の差分」です。以下の項目を 必ず 確認してください。

チェック項目 内容・確認ポイント
ベース URL api_client.hosthttps://www.docusign.net/restapi になっているか
アカウント ID サンドボックスのものから本番アカウント ID に置き換えたか
Integration Key / シークレット 本番用に新規作成したものを使用しているか
リダイレクト URI 本番環境で公開する URL が OAuth 設定に登録済みか
Connect Webhook の URL HTTPS で外部から到達可能、証明書が有効か
レートリミット上限 デフォルトは 1,000 req/HR。必要なら DocuSign に増枠依頼
監査ログ保存期間 法令・社内ポリシーに沿った保管設定を実装したか
テストケースの再実行 本番環境で全フロー(認証 → エンベロープ送信 → Webhook)を最低 1 回は走らせたか

8. サンプルプロジェクトと活用方法

公式 GitHub リポジトリには、上記すべてのシナリオが動作するサンプルコードが格納されています。以下の手順でローカル環境にクローンし、実際に動かしてみましょう。

8‑1. クローンと依存パッケージインストール

8‑2. 環境変数の設定例 (.env)

.env ファイルは python-dotenv で自動ロードされます(requirements.txt に含まれています)。

8‑3. サンプル実行

ヒント
- ngrok などのトンネルツールを使うと、ローカル開発環境でも HTTPS の Webhook エンドポイントを公開できます。
- サンプルコードは最新 SDK に合わせて随時更新されているため、リポジトリの READMErelease notes を定期的に確認してください。


9. まとめ

項目 要点
SDK インストール pip install docusign_esignApiClient にベース URL とトークン設定
認証方式 UI が必要なら Authorization Code、サーバー側だけなら JWT(request_jwt_user_token
環境切替 api_client.host と Integration Key を環境変数で管理し、Demo ↔ Production を明示的に切り替える
エンベロープ作成 PDF の Base64 エンコード → EnvelopeDefinition に文書・受信者・メールカスタマイズを設定
タブ取得 & Webhook EnvelopesApi.list_tabsEventNotification でリアルタイム通知を実装
エラーハンドリング 429 は指数バックオフ、401/403 は認証情報再確認、500 系はリトライ+監視
本番移行 ベース URL・アカウント ID・鍵・Webhook の HTTPS 必須チェックを徹底
サンプル活用 公式 GitHub リポジトリからコード取得 → .env で設定 → 実行テスト

この手順通りに実装すれば、Python アプリケーションから DocuSign eSignature の全機能を安全かつスムーズに利用できます。問題が発生した場合は公式ドキュメント(https://developers.docusign.com/docs/esign-rest-api/)と GitHub の Issue トラッカーを参照してください。

スポンサードリンク

-DocuSign