LINE WORKS メンバー100名以上を一括追加

## LINE WORKSで100名以上のメンバーを一括追加したい

LINE WORKSの標準機能では出来ないあれやこれやを、
LINE WORKS API 2.0 x GASを使ってサクッと解決するシリーズ第一弾

今回は、**メンバー一括追加**です。
LINE WORKSは管理画面からCSVファイルをアップロードして一括追加が可能ですが、一度に100名までが上限となっています。

APIであれば、100名以上の流し込みは可能です。
そこで、LINE WORKS API2.0 x GAS を使って、Google Sheet に入力したデータを流し込みます。 




#### 実行イメージ

Google Sheetにメンバー情報を入力し、インポート開始ボタン押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/c6c5d7f5-d8d0-9c39-ffa0-7eb09472e9bc.png)

インポートする件数を確認し、OK
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/d449bfa5-743f-dc0e-021d-903b4ba67fab.png">

インポート完了
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/98003508-c258-1a55-6d64-a4881c5e8954.png">



実行結果をログで確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/393c3f98-088b-7f1c-b5de-f5c5fb81d7e7.png)

:::note info
GASはスクリプトの実行時間が最大6分という上限があるため、
一回の処理で流し込めるメンバー数はだいたい300~360名ほどです
それ以上の数を実行する場合は、処理が止まった時点から続けて実行してください。
:::

## 必要なもの
* Googleアカウント（無償でもOK）
* LINE WORKS Developers Consoleへのアクセス権限を持つID
* [LINE WORKS 便利ツール](https://qiita.com/nonattonolife/items/16181d666b8246e3f28d)

## 事前準備

### 1. LINE WORKS Developersから認証情報をコピー

LINE WORKS Developers へアクセスして、アプリを新規追加します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/9442be87-7f4e-4c47-188f-0594ad5e3023.png)

 「アプリの説明」に任意のテキストを入力します
 「**Client ID**」をコピーしてメモしておきます
 「**Client Secret**」をコピーしてメモしておきます
 「Redirect URL」に任意のURLを入力します
 「**Domain ID**」をコピーしてメモしておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/c7e30934-0ac4-ee83-8361-a65d66b15ee6.png)


「**OAuth Scopes**」の管理にて、とりあえずすべてのScopeを選択して保存します。
*Scopeは利用範囲に応じて狭めてください

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/f46623fe-61cf-657d-d3e9-d5287989f1ab.png">

「**Service Account**」をコピーします
「**Private Key**」の発行ボタンを押してkeyファイルをダウンロードします 

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/f82383a7-b690-8320-7902-7395645f5766.png">

### 2. GASの設定

Google Sheetの[テンプレートをコピー](https://docs.google.com/spreadsheets/d/1TyvRvWeLlLifDeeHovdtzAqNHxdg9KbizBvRqzhai_A/copy#gid=1141509122)します

シート「jwtGenerator」を開き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/0fb6d93e-d883-106b-64b6-c5cb05950690.png)
「事前設定」のフィールドに先ほどコピーした
* **Client ID**
* **Client Secret**
* **Service Account**
* **Private Keyのファイル名** _(「private_2023xxxxxxxx.key」というような名称)_
* **OAuth Scopes**はそのまま
* **Domain ID**
を、それぞれ入力します

#### Private KeyファイルをDriveにアップロードする
つぎに、先ほどLINE WORKS Developers Consoleからダウンロードした
**Private Keyファイル**を、「LINE WORKS 便利ツール」と同じGoogle Driveのロケーションに配置します。

ロケーションへの移動の仕方は以下

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/a5f2f2a8-c8f1-ed33-bc6b-d72517e65222.png">

ドラッグ＆ドロップで.keyファイルをアップロード


<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/ed63759c-63ce-93b5-83b2-9d3bc9d15141.png">

### 3. token発行のテスト

jwtGeneratorシートにもどり、
「トークンを発行」ボタンを押します

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/2144b007-5139-53cd-c86d-5488279bc04b.png">

Access Token と Refresh Tokenに何やら文字列が表示されたら、テスト成功
LINE WORKS便利ツールの準備完了です。

文字列がなにも表示されない場合は、
手順を最初から見直してみてください。

## メンバーを一括追加する

### 1. メンバー情報を入力する

「importUser」シートを開きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/31c323a2-dc7c-9914-f0d9-80351279a0da.png)

1行目の「記入例」を参考に、情報を入力していきます。

<table>
  <caption></caption>
  <thead>
    <tr>
      <th>項目</th> <th>説明</th> 
    </tr>
  </thead>
  <tr>
    <td> 姓名 </td> <td>どちらか一方は必須</td>
  </tr>
  <tr>
    <td> ログインID </td> <td>必須。ログイン時に使うID。Advanced Planの場合はメールアドレス</td>
  </tr>
  <tr>
    <td> パスワード </td> <td>管理画面のパスワードポリシーを適用,<br>
            空白の場合はメンバー自身で設定</td>
  </tr>
  <tr>
    <td> カナ姓名 </td> <td>任意</td>
  </tr>
  <tr>
    <td> 英語姓名 </td> <td>任意。多言語表示の場合に適用</td>
  </tr>
  <tr>
    <td> 個人メールアドレス </td> <td>任意。パスワードが空白の場合は必須</td>
  </tr>
  <tr>
    <td> ニックネーム </td> <td>任意</td>
  </tr>
  <tr>
    <td> 組織のexternalKey </td> <td>任意。*Developers Console設定した組織のexternalKeyを指定する
<br>複数指定する場合はカンマ区切り（例：org1,org2,org3)</td>
  </tr>
  <tr>
    <td> 役職のexternalKey </td> <td>任意。*Developers Consoleで設定した役職のexternalKeyを指定する
<br>複数指定する場合はカンマ区切り（例：pos1,pos2,pos3)</td>
  </tr>
  <tr>
    <td> 利用権限タイプのexternalKey </td> <td>任意。*Developers Consoleで設定した利用権限タイプのexternalKeyを指定する
  </tr>  <tr>
    <td> 電話番号 </td> <td>任意</td>
  </tr>
  <tr>
    <td> 携帯番号 </td> <td>任意</td>
  </tr>
  <tr>
    <td> 言語 </td> <td>任意。日本語は ja_JP 
<br> 韓国語：ko_KR, 英語：en_US, 中国語(簡体)：zh_CN, 中国語(繁体)：zh_TW</td>
  </tr>
  <tr>
    <td> 住所 </td> <td>任意</td>
  </tr>
</table>

*組織、役職、利用権限タイプを指定する場合は、事前にまず externalKeyの設定が必要です。
手順は以下を参照してください。

[Developers Console 組織連携](https://developers.worksmobile.com/jp/console/org/config/view) へアクセスし、
画面をスクロールして、「External Key Mapping」のセクションを表示します

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/071d7a76-32cc-5d22-dd0d-46876cc1da6a.png">

External Key Mappingのセクションで、
「一覧のダウンロード」よりCSVファイルをダウンロードします。

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/4b01639b-849f-0bda-921c-f8e28d8b9fe3.png">


CSVファイルを開き、「External Key」のカラムに、任意のexternal Keyの値を入力し、
保存 > アップロードします。

データチェックでエラーが発生したら、内容を確認して再度アップロードしてください。
成功したら、externalKeyの設定完了です。


### 2. インポート開始


データが準備できたら、インポート開始ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/b2e89536-23b6-a876-29e6-39f186aff3cc.png)

ポップアップの確認で「OK」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/39c9e3ba-563d-8b4f-654d-50f4c29e115d.png)

１件あたりの実行に約１秒を要します
処理が完了、または途中で失敗したら、その時点で処理を中止して、ポップアップが表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/8237b94c-1713-99b9-bef2-c4246d109325.png)

失敗した場合は、その時点のログインIDと、エラー理由が表示されます
以下はIDが重複していたケース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/11c9f11a-0b3f-7692-f0f5-382fb5f5808f.png)

### 3. 実行結果の確認

「log」シートを開きます
タイムスタンプ、実行結果、追加したログインID、Request Body, Responseが記録されます。
失敗して途中で処理が止まった場合は、どこまでのIDがインポートできているか確認し、
続きのデータをインポートできるようimportUserシートを修正した上で再実行しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/0cebffe1-290b-a0cc-3ebe-7e6b55bcb188.png)


今回はメンバー一括追加を紹介しました。
ただ、GASのスクリプト実行が6分間までなので、
1,000以上のメンバーを流し込みたい場合は、小間切れになってしまいやはりちょっと手間ですよね。

どうしても一気に流し込みたい！という方は、
以下、masato-3さんのPowerShellでCSVデータを流し込むツールもお試しください。こちらは制限時間もなく一気にいけます。
https://github.com/msato-3/Import-LWUsers/



-----------------------------------

LINE WORKSの標準機能では出来ないあれやこれやを解決するLINE WORKS便利ツール
今後はこんなツールを予定しています

* ユーザを一括削除したい
* 組織を一括追加したい
* グループを一括追加したい
* ID名を一括変更したい
* メッセージを一斉配信したい
* 監査ログを自動保存したい
* SNSのコメントやメッセージをLINE WORKSへ通知したい
etc...

今後なにかご要望があればお知らせください
作ってみるかもしれないです。