LINEで簡単！ 会議前に１人でも会議っぽいシミュレーションができる！？

## 何も決まらないぞ！
どうも、アラ還サラリーマンです。
みなさん、会社で会議多くないですか？
そのほとんどは連絡事項だけとか、情報共有だけの集まりです。
何かを決めなければいけない会議も、いつの間にか世間話になっていたり・・・。
こんなんじゃいか～ん！　何か決めるための会議だよね！
というわけで、会議前に１人でも会議っぽいシミュレーションができるLINE Botをつくってみました。

## 今回使用したツール
<dl>
  <dt>LINE Developers</dt>
  <dd>LINE Botを使用しました。</dd>
  <dt>ChatGPT API</dt>
  <dd>会議の相手をしてくれます。</dd>
  <dt>Googleスプレッドシート</dt>
  <dd>会議相手との応答内容の蓄積や返答の加工に使用しました。</dd>
  <dt>Make</dt>
  <dd>LINE Bot、Googleスプレッドシート、ChatGPT APIを操作します。</dd>
</dl>

## 実際にできた動画がこちら！

https://x.com/hiromae123/status/1828099352012976299

西遊記でおなじみの、孫悟空・沙悟浄・猪八戒が、
ある時はとぼけて、またある時はまじめに会議の相手をしてくれます。
　
**操作方法**
* 『○○の会議を始めよう！』で始めてください。
* 孫悟空・沙悟浄・猪八戒がお相手します。
* リッチメニュー（デフォルトでは隠しています）の【新しい会議を始める】で、それまでの会議内容を消去します。

ただし、ChatGPT APIを組み込んだLINE Botは、前の会話の内容はすっかり忘れるとのこと。
なので忘れないような仕掛けが必要になります。

下記の記事を参考にさせていただきました。とてもわかりやすかったです！

https://qiita.com/okinakamasayoshi/items/07a6b2c41fb6d50dbd5e

## Googleスプレッドシートがこちら
**ファイル名：GPTまとめ**
* シート名：返答
![スクリーンショット 2024-08-24 165722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/e27c2cfe-41e3-7355-f5be-ec705b81b38a.png)
ChatGPT APIからの返答がA1に入力されます。
B1には **=FLATTEN(SPLIT(A1,char(10)))** という関数を予め入力しておきます。
A1の値を改行で分割してくれます！　しかもB2、B3にも値が反映します！
Excelにこんな関数あったっけ？（知らないの、自分だけ？）
スプレッドシートすごい！
　
* シート名：応答
![スクリーンショット 2024-08-24 165844.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/039dde6f-a776-1f1b-87a3-560c77ae26ce.png)
A、B列にChatGPT APIとの会話が記録されます。

## Makeの全体のシナリオがこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/0a81f127-9bf7-5c65-87a6-74bbd930d5de.png)

**条件分岐**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/a9da5518-637a-d7f9-f70e-37fb812b61b9.png)
リッチメニュー【新しい会議を始める】で送られるテキストと一致するかしないかで処理を分けています。

**会議中の処理**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/3d6a45a2-3c91-6d41-b821-e3197b1837a5.png)
ChatGPT APIに以前の会話内容を渡す下準備。
スプレッドシートの**シート名：応答**の以前の会話内容を取得しています。
参考記事から引用しました。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/76b817d8-1d4f-c34b-8498-f5fd6af9951d.png)
Message 1とMessage 2に上記で取得した会話内容を渡しています。
Message 3には孫悟空・沙悟浄・猪八戒に返答させるプロンプトを入れています。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/ceb8e5a0-c3de-7de0-1dab-e5e1fec9e0ed.png)
スプレッドシートの**シート名：返答**のA1にChatGPT APIからの返答を入力。
その後、A1の値を分割したB1、B2、B3の値をそれぞれ取得しています。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/81da623c-edf1-79d4-ebd6-a74f9d0bb510.png)
LINEの応答処理で、孫悟空・沙悟浄・猪八戒のそれぞれの返答を入れています。
その後、スプレッドシートの**シート名：応答**に新しい会話を追加しています。

**リッチメニューからの処理**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842559/b22a661c-41af-825c-bf66-29199d8a98f2.png)
スプレッドシートの**シート名：応答**に記録された会話内容を消去。
スプレッドシートの**シート名：返答**のA1の値を消去。
その後、LINEで消去したことを通知します。

## またまた配列絡みで一苦労・・・
ChatGPT APIからは、孫悟空・沙悟浄・猪八戒の返答がひとかたまりで返されます。
最初はそれをそのまま返答させていましたが、孫悟空・沙悟浄・猪八戒がそれぞれ返答した方がおもしろいかなと思いました。
しかし、ひとかたまりの返答を改行で分割して配列にして、それぞれの返答を Send a Reply Messageモジュール に渡そうと試みましたがうまくいかず・・・。
そんな時、スプレッドシートで FLATTEN関数と SPLIT関数を組み合わせる方法をネットで発見しました！
こっちの方が簡単です！　あの悩んだ時間は何だったのか・・・。

## 結構まじめに答えるぞ！　感動！
今回、ChatGPT APIを組み込んだLINE Botを初めてつくってみました。
孫悟空・沙悟浄・猪八戒もそれぞれ思っていたよりもいい返答をしてくれます。
ただ、たまに猪八戒だけが訛るときがあります（笑）
動画の中にもありましたが、『あれ、何の会議だったっけ？』と質問しても、ちゃんと以前の会話を認識して返答してくれました。

お気づきの方もいらっしゃるかもしれませんが、もう１つのリッチメニューは工事中になっています。機能を与えていません。
今後は会議の議事録を出力する機能を割り振ってみたいですね。

ではでは、今日はこのへんで！　下記の言葉で締めたいと存じます。

**・・・世の中には会議のための会議というものが存在する・・・**
（某天下の国営放送局でやっていたコント番組のネタをオマージュしました）