ASTERIA WarpでDocuSign APIを使ってみた

電子署名サービス「DocuSign」で署名した契約書類をメタデータとあわせてBoxで管理したいという話があったので、WarpでDocuSign APIを試してみました。

## 準備

### アカウント作成
今回は開発用のアカウントを作成して試してみます。無料で使えてうれしい:clap:

https://go.docusign.com/o/sandbox/



アクセストークン取得まではこちらに沿って進めていきます↓

https://developers.docusign.com/platform/auth/authcode/authcode-get-token/


### クライアントIDとクライアントシークレットを追加
DocuSignの 設定＞アプリとキー より「アプリとインテグレーションキーの追加」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/d46f58a6-8ed5-cd2a-d993-7bfef0ba8077.png)

インテグレーションキーの追加ウィンドウでアプリ名を入力すると、「アプリの作成」ボタンが有効になるので、クリックして作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/75484182-38ee-39fd-1bd5-6761ce01999e.png)

インテグレーションキー作成後の編集画面がこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/a5cc70eb-8aee-9e66-74b5-f88a3f7423ac.png)

インテグレーションキーがいわゆるクライアントIDです。
認証カテゴリにある「秘密鍵の追加」をクリックするとSecret Keysにキーが追加されます。これがクライアントシークレットになります。

さらに下にスクロールして、リダイレクトURIを指定します。
このURIはlocalhostなど適当に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/7df9d723-4e9e-e603-5638-ecfd6398c189.png)

### Authorization Codeの取得方法

ブラウザで新規ウィンドウを開き、以下URLにアクセスします。
URL内のクライアントID、リダイレクトURIはそれぞれインテグレーションキーでの設定値に置き換えてください。

```
https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature&client_id=クライアントID&redirect_uri=リダイレクトURI
```
 

アクセス時にログイン画面や同意画面が表示されたら、表示内容に従って、「同意する」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/99cea506-4edd-3eb7-ae36-0edf65bbeca4.png)

正常に動作すると、設定したリダイレクトURIに遷移しブラウザのアドレスバーを確認します。
“code=”より右側の文字列をコピーしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/7fcad70c-3f78-a6f7-a608-72be01e978ca.png)

このあとのAccessToken取得フローはWarpでつくろうと思いますが、このcodeの有効期限は2分間！短い！
さすがに2分のうちにフロー作成～実行までするのは難しいので、
先にフローを作っておいて、あとから「codeを取得してWarpに反映させて実行」すると2分間で対応できると思います。
もし失敗したらcode取得用のURLにもう一度アクセスすればOKです。

## フロー作成
一から作るのは大変だな～、という方にフローテンプレートというものがあります。
今回はテンプレートから作成していきます。
このテンプレートは無料で誰でも使えるサンプルフローのようなものです。サポート対象外なので使う時は注意が必要ですが、ある程度フローが組まれているのでフロー開発の参考になるのでおススメです！

まずは以下URLからテンプレートをダウンロードします。
https://support.asteria.com/hc/ja/articles/4404481552665

### テンプレートのインポート
フローデザイナーの「ファイル」＞「テンプレートのインポート」からダウンロードしたzipファイルをインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/d620e426-f9b0-c93c-61af-2fa4271b7c10.png)

### テンプレートから新規プロジェクト作成
新規プロジェクトの作成画面からインポートしたテンプレートを選択します。カテゴリーで```DocuSign```と入力すると出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/31144479-291e-c9c1-0bea-db6f9735a1e8.png)

プロジェクト名をつけて「OK」をクリックすると、ナビゲーション画面が表示されます。
ここでは、さきほど取得したクライアントID、クライアントシークレット、Authorization Codeを入力します。Authorization Codeは空のまま作成して、フロー生成後に設定してもOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/b59afa18-81db-76e1-eb1d-5f08e8e648b1.png)

### フロー確認
ナビゲーション画面に沿って進めると、フローが2本生成されます。

・トークン取得 フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/91dafc0e-e0bb-dc22-5a92-e929b193f720.png)
初回のみトークン取得フローを実行します。このフローでアクセストークンとリフレッシュトークンを取得します。
実行するとプロジェクトフォルダ配下にtoken.csvが生成され、トークンが保存されます。**トークン取得フローはAuthorization Code発行から2分以内に実行する必要があります。**
Authorization Codeの設定をしたい場合は、フロー変数の「AuthorizationCode」の初期値に入力します。

・エンベロープ取得 フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/a37fc79a-b8ae-94fb-dead-ee3fde055326.png)
エンベロープ取得フローを実行すると、プロジェクトフォルダ配下に各エンベロープIDを名前とするフォルダが生成されます。デフォルトでは1ヵ月前～現在までの完了したエンベロープを取得します。期間や取得するエンベロープのステータス変更もフローを修正して対応できます。
その中にcustom_field.csv、document.pdf、document_certificate.pdfが保存されます。保存されるファイルは、それぞれエンベロープカスタムフィールド、完了済の書類、完了証明書にあたります。
フォルダ名やファイル名の変更にはフローの修正が必要です。

### 実行
実行すると完了したエンベロープのエンベロープカスタムフィールド、完了済の書類、完了証明書が保存されました～。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48286/3aedc035-c85f-d242-4c34-dbfb9f64f5e4.png)

## さいごに
Boxアダプターを使って、DocuSignから取得した情報をBoxのメタデータに連携させれば、電子帳簿保存法に対応したドキュメント管理も実現できますね。
APIドキュメントへたどり着くまでちょっと時間かかったのと日本語のドキュメントが見当たらなかったので、とっかかりはハードル高い感じがしましたが、フロー開発を進めていくとAPIの使いやすさに感動して今ではすっかりDocuSignのファンです～。
DocuSign APIはすごく充実しているのでほかにもいろいろなことができそうだなーと思いました！
フローテンプレートもぜひ使ってみてください。