見出し画像

素人が2020年までの1ヶ月でLINE BOTに挑戦する毎日note. 【Day 9:技術的な実現可能性チェック part1】

こんにちは!
素人ながら1ヶ月でスケジュール調整BOTの開発に挑戦している"くろ"です。

どんなBOTなのかはこちらをご確認下さい!

今日は昨日完成した暫定版のフローチャートを基に技術的な実現可能性を見ていきたいと思います。

完全に自己流になってしまうのですが、サーバや機能ごとに箇条書きで1つずつ検証していきたいと思います。

①日程調整依頼(BOTとLIFFサーバがメイン)

フローチャートでいくとこの部分です。

スケジュール調整-日程調整依頼

【検証内容】

BOT周りの仕様に関しては、LINE社さんが公式ドキュメントを公開してくれているので、そちらを中心に見ていきます。

・BOTをグループに招待

グループについては、こちらに記載がありました。https://developers.line.biz/ja/docs/messaging-api/group-chats/

画像1

トークルームとグループの2種類があって、どちらにも招待させることはできそうです。

画像2

画像3

また、グループに参加した時には”参加イベント”というWebhookイベントが発生するようです。参加イベントには応答できますと書いてあるので、参加した際になにかメッセージを送るみたいなこともできそうです。

※Webhookイベントとは?
【自分なりの解釈】
Web上のアプリケーションで何かのイベントが発生した時に、予め指定しておいたURLに、こういうイベントが発生したよと通知してくれる仕組みと解釈しておきます。
APIとの違いという記事もあったので、そちらにも言及しておくと、ほっといても何かのイベントをフックに通知してくれるのがWebhookで、お願いしないと動かないのがAPIのようです。

【引用】
Webhookとは、Webアプリケーションでイベントが実行された際、外部サービスにHTTPで通知する仕組み。あるいは、あるイベントに対して、指定したURLにPOSTリクエストする仕組み。
APIはリクエストをした際に何らかの反応を返してくれますが、Webhookは事前に決められた基準を満たした際に何らかの反応を返してくれます。もう少し具体的に考えていきましょう。例えばあなたが、あるサーバー上のデータが更新されたのを知りたいとします。APIの場合は、更新されたかということをなんどもAPIに指示を与え確認させる必要があります。更新されるまでなんども。しかしWebhookの場合は最初に「更新されたら教えてね」という指示を与えておきます。すると更新される度に「更新があるよ!」と教えてくれます。
出典:
https://qiita.com/soarflat/items/ed970f6dc59b2ab76169
https://tomowarkar.com/api-webhook/
※POSTリクエストとは?
【自分なりの解釈】
HTTPという規格でデータを送受信するための型の1つ。
ボディ部分にデータを記述できるからこの規格をwebhookでは使うみたい。

【引用】
POSTメソッドとは、HTTP通信でクライアント(Webブラウザなど)からWebサーバへ送るリクエストの種類の一つで、URLで指定したプログラムなどに対してクライアントからデータを送信するためのもの。GETやHEADなどのリクエストでは送信されるのはヘッダのみだが、POSTメソッドの場合にはサーバからの応答(レスポンス)と同じようにボディ部があり、ここに送信したいデータを記述する。大きなデータやファイルをサーバに送るのに使われる。
http://e-words.jp/w/POST%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89.html

・参加しているグループのメンバー全員のUIDと表示名を取得

画像4

先程のページに上記の記述があったので、グループ・トークルームどちらもユーザーIDとプロフィールは取得できそうです。

と思ったら怪しい記述が、、、認証済みアカウントになっておく必要がありそうです。アカウント種別についてはこちら
これはすぐに申請しておかないと。

画像5

それはそれとして、詳しく見ていきます。

グループメンバーのユーザーIDを取得する
LINE公式アカウントが参加しているグループのメンバーの、ユーザーIDを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのユーザーIDも取得します。

グループメンバーのプロフィールを取得する

LINE公式アカウントが参加しているトークルームのメンバーのユーザーIDが既知である場合に、そのメンバーのユーザープロフィールを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのプロフィールも取得します。

トークルームメンバーのユーザーIDを取得する
LINE公式アカウントが参加しているトークルームのメンバーの、ユーザーIDを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのユーザーIDも取得します。

トークルームメンバーのプロフィールを取得する

LINE公式アカウントが参加しているトークルームのメンバーのユーザーIDが既知である場合に、そのメンバーのユーザープロフィールを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのプロフィールも取得します。

上記の通り、ユーザーIDもプロフィールも、先程のグループ・トーク参加時の参加イベントで飛んできたgroupIdもしくはroomIdを指定して、リクエストすることで取得できそうです。

また、取得できるプロフィール情報も下記の通りなので、名前を取って来ることもできそうです。

プロパティ     タイプ   説明
displayName   String     表示名
userId              String     ユーザーID
pictureUrl        String     プロフィール画像のURL

・LINEログイン

幹事が日程調整を作る際、ユーザー情報を特定するためにLINEログインを利用します。ここも大丈夫そうですが、詳しい所までの理解がまだできそうにないので、深堀りせず進めます。

https://developers.line.biz/ja/docs/line-login/web/integrate-line-login/

・BOTから日程調整依頼のアナウンスメッセージ

これはもちろんできると思ってやっているのですが、念の為確認。

画像6

大丈夫そうですね。ちなみにメンションは残念ながらできなさそうです。埋もれるLINEの中からメンションがあると見つけやすいんですが、ここは仕方ないですね。

・グループIDを利用してメンバーのID、表示名、プロフィール画像を取ってくる

この部分がちょっと僕の知識レベルだと判定できなさそうなので、議題の1つにして、師匠に聞いておきたいと思います。

【要検証】取得したグループやトークルームに参加しているメンバーのユーザーIDと表示名をグループIDをパラメなどで引き回して、DBから取ってくることはできるのか?

これができないと、日程調整条件設定で、メンバーを選んでもらうのがめんどくさくなりそう。

これら踏まえて書き直したフローチャートがこちらです。

スケジュール調整-日程調整依頼 (1)

本日は以上になります。

明日はこの続きもやりながら、プログラミング自体の勉強も進めていかないとヤバそうなので、それもして行きたいと思いますが、いかんせん師匠が捕まらなくてやばい笑。


追記

リファレンスを見ていて気づいたのですが、グループから退出させられた時に走っている日程調整をどうするか?も仕様にいれないと行けないですね。

この記事が参加している募集

よろしければサポートお願いします! 頂いたサポートはクリエイター活動に活用させて頂きます。