GASでクラウドサインの契約書を作成する

2021/07/11時点の情報です

# はじめに
クラウドサインを作成するには利用申し込みが必要となります。詳細は[こちら](https://help.cloudsign.jp/ja/articles/2681259-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%B5%E3%82%A4%E3%83%B3-web-api-%E5%88%A9%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89)

# 作成の流れ
## 1. tokenを取得
- [API仕様書](https://app.swaggerhub.com/apis/CloudSign/cloudsign-web_api/0.16.1#/default/post_token)

### 引数
- clientId
    - 各アカウントごとに固有

### ソース
```javascript:token取得
function getToken(clientId){
  const url = 'https://api.cloudsign.jp/token'
    + `?client_id=${clientId}`;

  const response = UrlFetchApp.fetch(url);
  const json = JSON.parse(response.getContentText());
  return json.access_token;
}

```

## 2. 書類を作成
- [API仕様書](https://app.swaggerhub.com/apis/CloudSign/cloudsign-web_api/0.16.1#/default/post_documents)


### 引数
- token
    - 1で取得したtoken
- templateId
    - テンプレートのID。テンプレートをひらいた際のurlから判断できます

### ソース
```javascript:書類を作成

function createDocument(token, templateId){

  const url = 'https://api.cloudsign.jp/documents';

  const options = {
    headers : {
      'accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded',
      'Authorization': `Bearer ${token}`
    },
    method : 'post',
    payload : `template_id=${templateId}`
  };
  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());
  return json;
}

```

```javascript:余談　書類を取得
function getDocument(token, documentId){
  const url = `https://api.cloudsign.jp/documents/${documentId}`;
  const options = {
    headers : {
      'accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded',
      'Authorization': `Bearer ${token}`
    },
    method : 'get',
  };
  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());
  return json;
}

```

## 3. 送信先を設定
- [API仕様書](https://app.swaggerhub.com/apis/CloudSign/cloudsign-web_api/0.16.1#/default/put_documents__documentID__participants__participantID_)

### 引数
- token
    - 1で取得したtoken
- documentId
    - 2で作成したdocumentのid
- destinationId
    - 0が送信元、1が送信先に(現在)なっています。
- email
    -  設定したいメール
- name
    - 設定したい名前

### ソース
```javascript:送信先を設定
function setDestination(token, documentId, destinationId, email, name){

  const url = `https://api.cloudsign.jp/documents/${documentId}/participants/${destinationId}`;

  const options = {
    headers : {
      'accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded',
      'Authorization': `Bearer ${token}`
    },
    method : 'put',
    payload : `email=${email}&name=${name}`
  };
  UrlFetchApp.fetch(url, options);
}

```

## 4. 入力項目を設定
- [API仕様書](https://app.swaggerhub.com/apis/CloudSign/cloudsign-web_api/0.16.1#/default/put_documents__documentID__files__fileID__widgets__widgetID_)


### 引数
- token
    - 1で取得したtoken
- documentId
    - 2で作成したdocumentのid
- fileId
    - 2で作成したdocumentに付随するfileのid
- widgetId
    - 2で作成したdocumentに付随するwidgetのid
    - テンプレートからのidは紐付いていないので、2の時点でwidgetIdListを保持しておくのがベター
- text
    - 設定したいテキスト

### ソース
```javascript:入力項目を設定
function setForm(token, documentId, fileId, widgetId, text){

  const url = `https://api.cloudsign.jp/documents/${documentId}/files/${fileId}/widgets/${widgetId}`;

  const options = {
    headers : {
      'accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded',
      'Authorization': `Bearer ${token}`
    },
    method : 'put',
    payload : `text=${text}`
  };
  UrlFetchApp.fetch(url, options);
}
```