[GAS x LINE WORKS] GoogleAppsScriptでLINE WORKSのチャットBOTを作る(API2.0 ver)

4/1にLINE WORKS API 2.0が[正式リリースされました！](https://jp1-notice.worksmobile.com/view/#/detail-view/567?usess=1&serviceType=12&serviceLanguage=ja_JP)(*´▽｀*)

新しくなって統一感出ましたよね～。とてもわかりやすいです。

ただ、API 2.0では認証方式が変更になっていて、従来のやり方ではAPI Requestができません。そこで、今回新しくAPI 2.0に対応した記事を書くことにしました！
GASも当時とだいぶ仕様が変わっていたので、その辺りも更新しましたよー。
なお、旧APIはまだ利用できるようなので[前の記事](https://qiita.com/kunihiros/items/a94221ad7c9f4de84cf8)はそのままにしています。
なので、「昔読んだのの焼き直しやないかい！( ﾟДﾟ)」というツッコミは仕舞っておいていただけると助かります(_ _)

# 個人で使うサーバー環境にお困りではないですか？

独学でWEB APIを勉強したいけど、自由に使えるサーバーはない。
業務で検証作業を頼まれたけど、やっぱり自由に使えるサーバーはない。
ngrokはとても便利なんだけど毎回URLが変わるから常用はできない。
Herokuは無料なんだけど英語だしGitするのが面倒くさい。
AWSを勉強して無料枠内でやればいいんだろうなーって思うけど下手こいて目の飛び出る請求が来るが怖い。

そんなこと、ありませんか？

### それならGoogleAppsScriptを使えばいいじゃないか！

言語は何でもよくて、取り敢えず動作が見たいor動作すればいい。
って言うのならGoogleAppsScriptがオススメです。
Googleアカウントがあれば利用できるし、サーバも別に用意する必要がない。
インターネット接続環境さえあればいつでも開発できる。
何といっても、**無料！！**
他にも色々と利点はありますので、興味のある方は他の方の記事をご参考くださいませ。

# LINE WORKSのチャットBOTを作る

では、さっそくBotを作っていきましょー♪

## アカウント登録等の事前準備

まず、準備として以下のことをやっておきます。

1. Googleアカウントの取得
2. LINE WORKSアカウントの取得
3. [LINE WORKS Developr Console](https://developers.worksmobile.com/jp/console/openapi/v2/app/list/view)でアプリを新規追加して以下の認証情報を取得
    - Client ID 
    - Client Secret
    - Service Account
    - Private Key
4. 3.で追加したアプリのOAuth Scopesに`bot`を追加

認証情報の取得方法については[こちらの記事](
https://qiita.com/kunihiros/items/54853e910ed1dff9ebdc)で詳しく解説していますのでご参考ください。

## GoogleAppsScript

### 1. Google Spreadsheetに空のシートを作る

http://spreadsheet.google.com にアクセスして空のシートを作ります。
シート名はなんでも良いので「chat bot」としました。

### 2. スクリプトエディタを開く

「拡張機能」-「App Script」を選んでスクリプトエディタを開きます。

### 3. ライブラリを登録する

LINE WORKS APIを使用するにあたり**JWT認証**が必要になるのですが、この処理が非常に面倒だったのでライブラリを作りました。こちらを登録して使ってください。
自分でコード書きたい！って人は後ほど解説しますのでそちらを参照してください。

1. 「ライブラリ」の＋ボタンをクリック
2. 「ライブラリを追加」の欄に `1aLcCr3CWqfenPMyM0_FWIDUgRcTxsit9bO6BTx61NCXrCtkY2zbHBlod` を入力して検索ボタンをクリック
3. 「LINEWORKS」ライブラリが表示されるので最新バージョンを選んで追加ボタンをクリック

### 4. コードを書く。

以下のコードを丸っとコピペしちゃってください。

```js
function doPost(e) {
  if (e == null || e.postData == null || e.postData.contents == null) return
  let requestJSON = e.postData.contents
  let requestObj = JSON.parse(requestJSON)
  let text = requestObj.content.text // 応答メッセージ（今回はオウム返し）

  let env = getEnv_()
  env.userId = requestObj.source.userId

  // LINE WORKS にメッセージを送信
  LINEWORKS.userMessageSend(env, text)
}

function getEnv_() {
  return {
    CLIENT_ID: "xxxxxxxxxxxxxxxx",
    CLIENT_SECRET: "xxxxxxxxxxxxxxxx",
    SERVICE_ACCOUNT: "xxxxxx.serviceaccount@xxxxxxxxxx",
    PRIVATE_KEY: "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0xxxxxxxxxxxxxxxxxxxxxxxxxxxxx==\n-----END PRIVATE KEY-----",
    DOMAIN_ID: 10000001,
    ADMIN_ID: "xxxx@xxx.com",
    BOT_ID: 20000001
  }
}

function createBot() {
  let env = getEnv_()
  env.BOT_ID= LINEWORKS.qiitaSampleBotCreate(env).botId
  LINEWORKS.qiitaSampleBotDomainRegister(env)
  Logger.log("BOT_ID: " + String(env.BOT_ID))
}
```

`function getEnv_()`　内の各パラメータには事前準備で取得した認証情報を入力します。
PRIVATE_KEYについてですが、実際に見てもらうとわかる通りもの凄く長い上に変な改行が入っています。少々面倒なのですが、
`"-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9...\n-----END PRIVATE KEY-----"` となるように `\n` と `\n` の間に認証キーを入れて**一行で**表記します。

BOT_IDは使いたいBotのIDを入力してください。
まだLINE WORKS Botはよくわからないよーって方は簡単に登録できるコードを書いておいたので、以下の手順でBot登録を行ってください。

#### Botを登録してBOT_IDを取得する

1. 上部のメニューの▼を押して`createBot`を選択
2. 「▷実行」ボタンをクリック
![1649408632.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/bea09b3e-ca79-6f3a-c763-853f93c09b6d.png)

3. 実行ログが表示されます。表示された値をBOT_IDに記載します。
![1649985637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/b61e1b36-3da5-590f-1081-facc5e9fd23d.png)


### 5. コードをデプロイする

完成したコードをウェブアプリケーションとしてデプロイします。
 
1. 上部の「デプロイ」-「新しいデプロイ」を選択
2. 歯車マークの設定ボタンをクリックして「ウェブアプリ」を選択
![1649645380.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/64aa2246-98f7-40ec-a4b0-b61c9f0a15dc.png)

3. 以下のように設定します
    - 説明: Qiitaお試しウェブアプリ（任意なのでなんでもいいです）
    - 次のユーザーとして実行: 自分(xxxx@gmail.com)
    - アクセスできるユーザー: 全員
4. デプロイをクリック

> このとき、Googleからセキュリティの警告が出て許可を求めることがあります。
> 気にしない人はそのまま許可してください。
> 気になる人は調べてから許可してください。
> とりあえず許可しないとBotとしては利用できません。

#### デプロイ完了

「デプロイID」と「ウェブアプリのURL」が取得できます。
「ウェブアプリのURL」をコピーしてGoogleAppsScriptの設定はおちまいです。
![1649645754.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/1a9ad051-70b0-dd77-e771-134fb8d32ae9.png)

## LINE WORKS Developer Console

### 6. BotにCallback URLを登録する

LINE WORKS Developr ConsoleでBot情報を修正します。

1. Develope Consoleのbotのページにアクセス
https://developers.worksmobile.com/jp/console/bot/view
2. 登録したBotの詳細ページを開いて「修正」ボタンをクリック
3. Callback URLをONに設定
4. Callback URLに先ほど取得した「ウェブアプリのURL」を入力
5. 「テキスト」にチェック
6. 他の設定は適当にして「保存」をクリック

![1649992275.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/76109af7-eb9b-5946-aa29-c0bb47f2f9a1.png)

これで設定はすべて終わりです！(*´▽｀*)

## チャットBotが完成！

さぁ、Botに話しかけてみましょう！hogehoge！

![1649992906.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/1ac84a0b-6501-8206-e225-c78a3b18dd6c.png)

ちゃんとメッセージを返してくれました！やったね！(*´▽｀*)

# おわりに

ここまでお付き合いいただきありがとうございました。
私のQiita初投稿がAPI 1.0 verの「[GoogleAppsScriptでLINE WORKSのチャットBOTを作る](https://qiita.com/kunihiros/items/a94221ad7c9f4de84cf8)」でした。
あれから3年以上が経っている…早いものです。

JWT認証については大きく変わっていなかったのでスムーズに移行できました。
こちらについてもそのうち記事書こうかな？
取り合えずしばらくAPI 2.0をいじりつつ記事を書いていこうと思っています。
カレンダーや掲示板のAPIも新しく追加されてますしね！
何か気になるAPIがあればRequestしてみてくださいませ～

ではまた！(^^)/

# 参考にさせていただきましたm(_ _)m

[GoogleAppsScript 公式サイト](https://developers.google.com/apps-script/reference/)
[LINE WORKS Developers](https://developers.worksmobile.com/jp/document?lang=ja)