LINE WORKSが友だちになったLINEユーザを可視化/一覧化したい

## LINE WORKSが友だちになったLINEユーザを可視化/一覧化したい

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

今回は、**外部LINE/LINE WORKS友だち可視化**です。

LINE WORKSが友だちになった外部LINE/LINE WORKSユーザの連絡先情報はアドレス帳に登録され、管理者は管理画面から全連絡先を確認できます。
が、全データを一画面で表示したり、メンバーごとの連絡先をソートしたり、CSVデータとして出力したりする事はできません。

そこで、LINE WORKS API2.0 x GAS を使って、アドレス帳上にあるLINE友だち情報を取得し、Google Sheet 上に表示します。

#### 実行イメージ

「連絡先データ」シートに全メンバーの外部LINE/LINEWORKSの連絡先を出力します
![image_20240306_21.33.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/5da46176-064e-dbd7-b1c0-c0932384417e.png)



また、「統計」シートには、各メンバーごとの連絡先レコード数のカウントを表示するようにしました。

![image_20240306_21.32.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/25406cdc-7ded-94da-eabf-958578f45fda.png)



:::note info
GASのスクリプトは手動実行もしくは毎時/毎日 など任意でスケジュール（トリガー）を設定し定期実行することもできます。
:::

## 必要なもの
* Googleアカウント（無償でもOK）
* LINE WORKS Developers Consoleへのアクセス権限を持つID
* [LINE WORKS 連絡先取得ツール](https://docs.google.com/spreadsheets/d/1EVlihLWg8KcilaJIHCuFc9V8_mWNNIponsHDqNkS5xg/copy#gid=2143936728)

## 事前準備

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

LINE WORKS Developers へアクセスして、アプリを新規追加します
<img width="500" alt="image.png" src="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**」をコピーしてメモしておきます


<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/c7e30934-0ac4-ee83-8361-a65d66b15ee6.png">


「**OAuth Scopes**」の管理にて、Scopeから「**contact.read**」と「**user.read**」を選択して保存します。

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/6a48cfc3-30ef-005e-8e3b-c3fe6da7c577.png">

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

<img width="500" 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/1EVlihLWg8KcilaJIHCuFc9V8_mWNNIponsHDqNkS5xg/copy#gid=524876154)します
https://docs.google.com/spreadsheets/d/1EVlihLWg8KcilaJIHCuFc9V8_mWNNIponsHDqNkS5xg/copy#gid=524876154

シート「jwtGenerator」を開き、


<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/6138e02d-2d30-703d-53a5-d861fa5b1146.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 Sheetと同じ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シートにもどり、
「トークンを発行」ボタンを押します

![image_20240306_22.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/4a0b351b-0108-1757-beb0-95d42ec5fac1.png)


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

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

## 連絡先を取得してみる

### 1. 手動で実行する

毎月１日にプログラムが定期実行されるように、
GASのトリガーを設定していきます。

Googleシートの「**拡張機能**」メニューから「**Apps Script**」を開きます
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/ae5ac3f9-5eec-9d02-f692-7e8ba9da254c.png">

ファイル：**getContact.gs** を選択して、**fetchAndProcessContacts** を **実行**してみてください。
![スクリーンショット 2024-03-06 222609.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/bd128520-4d4e-edae-79dd-54525b775c24.png)


処理が完了したら、Google Sheetに戻り、データが取得できている事を確認します
エラーが発生している場合は、もう一度手順を見直してください。



### 2. 定期実行を設定する

左側のメニューアイコンから、トリガーを選択します

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/91921beb-2292-d8f4-0e23-0fcc4253bbe2.png">


画面右下のほうにある「＋トリガーを追加」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/687a4bfe-ae45-f5fb-2bf3-bb5ea30c5c4e.png)

例として毎日夜間に１回最新の情報を取りに行く場合は、以下のとおりトリガーを設定します
タイミングは任意で設定してください

:::note info
・LINE WORKSのAPIにはRateLimit（分間実行制限）があります。最短でも1時間に1回くらいを目安にしてください。

・毎回データをクリアして上書きする仕様です。

・GASのスクリプト処理時間は最大6分間です。データ量が多く6分間で完了できない場合は、分割処理するなどスクリプトの改修が必要です。
:::

　実行する関数を選択：**fetchAndProcessContacts**
　実行するデプロイを選択：**Head**
　イベントのソースを選択：**時間主導型**
　時間ベースのトリガータイプを選択：**日付ベースのタイマー**
　時刻を選択：**午前０時～１時**
　エラー通知：**任意**


<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/ad43e7cf-038b-098e-4c63-38ee065c97b6.png">



以上で設定完了です。


## 動作確認




実行結果ログシートに結果が記録されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/b5b724e1-960a-6423-eaf5-d0e83f31b3be.png)


またはApps Scriptの画面左の「実行数」メニューを開きます
ここで定期実行のスクリプトが完了しているか、失敗しているか確認できます。

![スクリーンショット 2024-03-06 223739.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/72468fae-43f7-fe9d-8984-3c68a88abacd.png)

以上です。