【Node-REDで作ってみた】○○さんって、誰？テレワーク環境下の困り事を解決する LINE BOT

##1.自己紹介
普段は会社員として、自社システムと連携可能なAPIをお取引先さまのサービスに導入する際や導入後の運用の後方支援業務をしています。システムに関わる仕事ではあるものの、普段プログラムなど触ることがない非エンジニアです。ちなみに、<font color=red>JavaScriptの読み書きは全くできません</font>。
そんな超初心者ですが、今回<b>Node-RED</b>を使用した<b>LINE BOTの作成</b>にチャレンジしてみました！

##2.どんなBOTを作ったの？
その名も<b>「自己紹介しますBOT」</b>です。
![24e557ed-5ad4-417f-bce7-07e27e1d9a2c.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/bd4e5c34-0ed5-2d5c-07f8-0470b95cc98b.jpeg)
名前をメッセージで送ると、各社員のプロフィールを返してくれます。

##3.なぜ作ったの？
今の会社には2020年に中途採用で入社しました。ちょうど、新型コロナウイルス感染症（COVID-19）が流行し始めたころで、入社以来約2年間をほぼテレワーク環境下で過ごしています。
入社以来、業務上関わりのあるごく一部の方々としかコミュニケーションが取れていません。

- 名前は聞いたことがあるけれど、所属部署もどんな仕事をしている人なのかイマイチ知らない
- 電話の取次ぎで急いで連絡を取りたいけど、社用携帯の番号も分からない。（社用携帯の番号は共有ファイルでいつも確認）
- どんな人か見えないのでコミュニケーションをとるきっかけもない、いつまで経っても距離が縮められない！

そんな時にちょっと役立つツールがあればいいな、と考え今回のLINE BOTに落とし込んでみました。

##4.どんな風に作ったのか？
###使用したツール
今回は以下３つのツールを使用しています。

 - Node-RED
 - LINE Developers - Messaging API
 - Googleスプレッドシート  

※「LINE BOT」と「Node-RED」は事前に使用環境を整っている前提で作成方法を記載しています。

###完成イメージ
メッセージとして探したい人の「苗字（ひらがな）」を送ると、簡単なプロフィールと連絡先が表示されます。
今回漢字や検索対象とならない（メンバーにいない人の名前を想定）名前を送った場合は、正しい入力方法を案内するメッセージを返すようにしました。
![trim.AEA9E15C-A83A-436B-BE00-83AEE4344DB0.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/25a4a4d9-900c-688e-98d0-ac3966407e6b.gif)

###Node-RED上で作成したフロー###
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/fcb55369-c45d-bf58-47b1-66aed805cb72.png)

###具体的な各ノードの使い方メモ

####1. switchノード

LINEから送信されたメッセージ毎に分岐させました。
5番目の条件は、1～4番目の条件にマッチしない場合のルートで、そのままメッセージを返すようなフローにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/9e5c7292-7147-f3d4-7be6-0e76f078b1e7.png)
自己紹介に記載した通りJavaScriptの読み書きが全くできないので、比較演算子のルールについては、こちらの記事[【JavaScript】3分で学べる！比較演算子（”===”の意味）](https://it-biz.online/web-design/comparison/)を参考にして確認しました。

####2.switchノード1~4の行先

Googleスプレッドシートの中身を取り出します。
Googleスプレッドシートノードの使い方は<a herf="https://blog.enebular.com/nodes/letsuse-google-spreadsheet-node/">こちら</a>の記事を参考にしました。
switchノードから指定している先のGoogleスプレッドシートのデータは同じものを使用しています。
抽出対象のGoogleスプレッドシートの中身はこんな感じの作りにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/b865ce73-28c6-db9b-58b0-fa865b326f8b.png)
こんな感じでデバックされました。
この形が「配列」と言われる型であることも、今回はじめて学びました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/dfab2b1e-64f7-be9b-a8df-34dbab1f1a0d.png)

####3.changeノードを使用して中身を換える

上記工程で、佐藤さんの情報は、配列の1番目（payload[1]）に格納されていることが確認できました。
なので、「さとう」と入力したときのフローに、changeノードを追加してpayloadを佐藤さんだけの情報（payload[1])に置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/f7c47f15-89fd-7f2f-b09d-633752522dce.png)
同様に「やまだ」さん～「のはら」さんまでchangeノードでpayload+適切な配列の番号[4]の書き換えを指定しました。
changeノードの使い方については[こちら](https://qiita.com/joeartsea/items/1be1b7f8d08fab04ca73)のQiita記事を参考にしました。初心者の自分でも理解がすすむ内容でした。

####4.templateノードで返信メッセージを作成

置き換えたpayload[1]の中身から、さらに各項目（配列）の情報を取り出し、メッセージの適切な部分に挿入。
返信メッセージを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2495359/e2d84cca-3231-494d-ef84-b45f4747a765.png)

##5.最後に
今回、お試しという形で4人分のデータの出し分け、5つの分岐で作成しました。
実際このくらいの企業であれば、社内の人のことが分からないといった悩みはほぼ生まれないと思います。
人数が増えればこのようなツールの需要も出てくるかもしれませんが、例えば50人、100人、それ以上…となった場合、今回の作り方のように一人ずつフローを作成するのは、とても手間になると思います。

今回はこのような作り方に留まりましたが、もう少しJavaScriptについて理解を進められたら、functionノードを活用して

- キーワードの送信⇒データベースからキーワードを含む配列番号の抽出⇒抽出した配列番号をもとに、同じ行に表示されているデータを呼び出す&メッセージで返す ような処理
- 同一姓のメンバーが複数存在する場合の処理の追加（一旦メッセージを返信して更に分岐させたり）
- 顔やプライベートの様子がわかる写真一緒もメッセージと一緒に返す

といったことに挑戦してみたいです。もし実現できればもう少し有用性のあるルールになってくるだろうな、と思います。

以上
最後までお読みいただき、ありがとうございました！