【ChatGPT × LINE WORKS】AI Bot を無料で簡単に作成！

今話題の ChatGPT をついに触り始めました！ヾ(*´∀｀*)ﾉ
気になってたんですよねー。3/1 に公開されて以来、ChatGPT API を使った様々なサービスが誕生しています。

LINE WORKS でも LINE CLOVA と統合して AI 事業参入するみたいなので、面白いサービスがいっぱいでてきそうですよね。(*'ω'*)ﾜｸﾜｸ

# 今回作る ChatGPT × LINE WORKS Bot は全部無料！
この構成で何と言っても嬉しいのは**全部無料**でできること～♪ヾ(*´∀｀*)ﾉ
業務用に自由に使えるサーバーがない人も。自分でサーバーを契約することに抵抗がある人も。
気にせず遊び倒せます！

- 開発環境は Google Apps Script です。Google アカウントがあれば**無料！**
- ChatGPT API を利用します。OpenAI に登録してから 3ヶ月間ほぼ**無料！**（18ドルの無料枠のため、気にせず使えるレベルです）
- LINE WORKS の Bot API を利用します。LINE WORKS アカウントがあれば**無料！**（LINE WORKS アカウントも **Free Plan で OK！**）

さて、それではさっそく作っていきましょー！

# ChatGPT Bot の作り方
1. Google アカウントの登録
1. OpenAI アカウントの登録
1. LINE WORKS アカウントの登録 & API 利用登録
1. Google Apps Script にコードを書く
1. LINE WORKS Bot と連携させる

## 1. Google アカウントの登録
さすがにわからない人いないと思うので割愛します('Д')

## 2. OpenAI アカウントの登録
OpenAI は ChatGPT を提供する企業です。登録して API キーを取得することで、ChatGPT を利用できます。

1. [OpenAI のサイト](https://openai.com/)にアクセス
2. OpenAI にアカウント登録（参考:[【チャットAI】話題の「ChatGPT」を試してみた](https://qiita.com/tk_aaa/items/19d7bb9594eb11721ed1#%E5%85%88%E3%81%9A%E3%81%AF%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90%E7%99%BB%E9%8C%B2)）
3. OpenAI API キーを取得（参考: [ChatGPT APIキー取得までの手順](https://qiita.com/kotattsu3/items/b936a65d173a5d39dad0#api%E3%82%AD%E3%83%BC%E5%8F%96%E5%BE%97%E6%89%8B%E9%A0%86)）

結構面倒かと思いきや、Google アカウントで OpenAI のアカウント登録は一瞬で終わってしまいました。おススメ。

## 3. LINE WORKS アカウントの登録 & API 利用登録
この記事を読んでいる人は LINE WORKS を使っている人だと思いますので、LINE WORKS の登録方法は割愛します。[公式サイト](https://line.worksmobile.com/jp)から登録できるよ！

LINE WORKS API は Developers Console でアプリを登録して認証キーを取得することで Bot API などの様々な API が利用できるようになります。

1. [LINE WORKS Developers Console](https://developers.worksmobile.com/jp/console/openapi/v2/app/list/view) にアクセス
1. アプリを登録して API で使用する認証情報を取得（参考: [【LINE WORKS】API認証情報の取得方法まとめ](https://qiita.com/kunihiros/items/54853e910ed1dff9ebdc)）

取得する認証情報は [Service Account 認証(JWT)で使用する認証情報](https://qiita.com/kunihiros/items/54853e910ed1dff9ebdc#service-account%E8%AA%8D%E8%A8%BCjwt%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1) の `Client ID`, `Client Secret`, `Service Account`, `Private Key` の 4つと、[Domain IDとTenant IDについて](https://qiita.com/kunihiros/items/54853e910ed1dff9ebdc#domain-id%E3%81%A8tenant-id%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)を参考に  `domainId` を取得します。

この認証情報を使って、Access Token を取得します。OpenAI の API キーのようなものですね。Access Token の取得は次に説明するコードの中に含まれているので、勝手にやってくれます。特に意識しなくて大丈夫！

## 4. Google Apps Script にコードを書く
では Google Apps Script にコードを書いていきましょー！

### Google Apps Script にアクセス
1. 自分の Google アカウントでログイン
1. https://script.google.com/home/projects/create にアクセス

### LINEWORKS ライブラリを登録

LINE WORKS API を使用するにあたり認証が必要になるのですが、この処理が非常に面倒だったのでライブラリを作りました。こちらを登録して利用してくださいませー。

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

### コードをコピペ
簡単魔法「こぴーしてぺったん」略してコピペ！ヾ(*´∀｀*)ﾉ
以下のコードをコピペします。

```
// ChatGPT API キー
const OPEN_AI_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// LINE WORKS の認証情報
function getEnv_() {
  return {
    CLIENT_ID: "xxxxxxxxxxxxxxxxxxx",
    CLIENT_SECRET: "xxxxxxxxxxxxxx",
    SERVICE_ACCOUNT: "xxx@xxxxxx",
    PRIVATE_KEY: "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----",
    DOMAIN_ID: 00000000,
    ADMIN_ID: "xxx@xxxxxx",
    BOT_ID: 0000000
  }
}

// 文章生成 API エンドポイント
const OPEN_AI_END_POINT = "https://api.openai.com/v1/chat/completions";

function doPost(e) {
  if (e == null || e.postData == null || e.postData.contents == null) return
  let requestJSON = e.postData.contents
  let requestObj = JSON.parse(requestJSON)

  // LINE WORKS からのメッセージを取得
  let requestMessage = requestObj.content.text

  // ChatGPT API リクエストの header 情報設定
  const openAiHeaders = {
    "Authorization":`Bearer ${OPEN_AI_KEY}`,
    "Content-type": "application/json",
    "X-Slack-No-Retry": 1
  };

  // ChatGPT API 設定
  const openAiParams = { 
    "headers": openAiHeaders, 
    "method": "POST",
    "payload": JSON.stringify({
      "model": "gpt-3.5-turbo", // ChatGPT モデルの設定パラメータ
      "max_tokens": 512, // 返信トークン数の最大値
      "temperature": 0.9, // 返信の”硬さ”
      "messages": [
        {"role": "system", "content": "あなたはチャットボットです。60文字以内で明るく返答してください"}, 
        {"role": "user", "content": requestMessage}
      ]
    })
  }

  // 文章生成リクエスト
  const res = JSON.parse(UrlFetchApp.fetch(OPEN_AI_END_POINT, openAiParams).getContentText());
  const replyMessage = res.choices[0].message.content;

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

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

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

### ChatGPT API キーと LINE WORKS の認証情報を入力

コピペしたコードに、2.の手順で手に入れた ChatGPT API キーと、3. の手順で手に入れた LINE WORKS の認証情報を入力します。

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)

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

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

3. 以下のように設定します
    - 説明: ChatGPT Bot 用ウェブアプリ（任意なのでなんでもいいです）
    - 次のユーザーとして実行: 自分(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)

## 5. LINE WORKS Bot と連携させる

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. 他の設定は適当にして「保存」をクリック

![l_1728761_353_0cff62e50f80c3ee8867d9f7fc1ec7e2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/e4dfb343-0b74-42b7-68b3-66c3e335ae6b.png)

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

## チャットBotが完成！

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

![l_1728761_354_8ecc521d439a66e0b6d28cd94bcace8f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/6f55f451-590c-ea1e-2dba-d04efd485d9d.png)

滑らかなリアクションしてくれましたねー！(*´▽｀*)
でも、hogehoge 通じないみたい。残念。漫才モードとかないかな。

# おわりに

ここまでお付き合いいただきありがとうございました。
ChatGPT さん、凄く頭良いですね！サンプルコードとかも出してくれるし、エラーのときとかもちょろっと聞くと参考 URL 出してくれるし。文章の添削とか構成とか、業務でも結構重宝するので、3か月後に課金するか悩ましいです。

早く LINE WORKS で CLOVA AI 使えるようにならないかなー。

ではまた！(^^)/

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

[【期間限定無料】ChatGPTのLINEボットを30分でプログラミングせずに作る](https://qiita.com/daigo_38/items/f5b329364e177a340bbb)
[【チャットAI】話題の「ChatGPT」を試してみた](https://qiita.com/tk_aaa/items/19d7bb9594eb11721ed1)
[ChatGPT APIキー取得までの手順](https://qiita.com/kotattsu3/items/b936a65d173a5d39dad0)

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