前提
- Web系全然知らない
- Webからの問い合わせ時の内容をLINEグループに通知させたい
作業1 - LINE Developers
1. LINE DevelopersサイトでProvider を新規作成する
2. channcelを新規作成する
- TOP > 作成したProviderページを開く
- Messaging APIを選択する
- Providerは作成したものを選び、他も埋めていく
3. 作成したchannelの設定をする
Messaging APIタブを選択し、一番下のChannel access tokenのIssueを押下してアクセストークンを発行してメモしておく
4. LINE Botアカウントの設定を変更する
- Botアカウント選択する
- 右上の設定(歯車)を選択する
- アカウント設定 > 機能の利用 > トークへの参加を「...許可する」を選択する
- アカウント設定 > アカウント情報 > ベーシックIDをメモしておく(これがLINEでID検索するときのID)
作業2 - LINEアプリ
1. Botを追加したいLINEグループを作成する
2. 作成したLINEグループに作業1-4-4でメモしたLINE IDで検索し追加する(@マークまで入れて検索)
作業3 - Google Apps Script
通知を飛ばす先のLINEグループのidを把握するために行う。他の方法でもできるらしいがこれが一番楽かも(特にWeb開発経験ないなら)。
1. Googleスプレッドシート作成
- Google DriveでGoogleスプレッドシートを新規作成する
- 作成したGoogleスプレッドシートIDをメモする
スプレッドシートのURLが以下のようになっているのでXXX箇所がスプレッドシートID
https://docs.google.com/spreadsheets/d/XXX/edit#gid=0 - 作成したGoogleスプレッドシートのシート名をメモする
注意点としては上部のファイル名ではなく下部のシート名のこと(下のサンプルだとtest1)
てっきりシート名をファイル名だと思っていてタイムロスをしたので注意
2. Google Apps Script設定
- 開いているGoogleスプレッドシートの拡張機能 > Apps Script でGoogle Apps Scriptを作成する
- 以下のスクリプトを実装する
const ACCESS_TOKEN = "作業1-3でメモしたアクセストークン";
function doPost(e){
let json = JSON.parse(e.postData.contents);
let userId = json.events[0].source.userId;
let groupId = json.events[0].source.groupId;
const spst = SpreadsheetApp.openById("作業3-2でメモしたスプレッドシートID").getSheetByName("作業3-3でメモしたシート名");
let row = spst.getLastRow();
spst.getRange(row + 1,1).setValue(getUserName(userId));
spst.getRange(row + 1,2).setValue(userId);
spst.getRange(row + 1,3).setValue(groupId);
}
function getUserName(userId) {
const url = "https://api.line.me/v2/bot/profile/" + userId;
const response = UrlFetchApp.fetch(url, {
"headers" : {
"Authorization" : "Bearer " + ACCESS_TOKEN
}
});
return JSON.parse(response.getContentText()).displayName;
}
- スクリプトを保存する(上の実行の左にあるフロッピーディスクマークを選択する)
3. デプロイする
-
右上のデプロイ > 新しいデプロイ > 種類の選択横の歯車マーク > ウェブアプリを選択
-
説明を記入し、アクセスできるユーザーを全員にする
ここで全員にしないとLINE Bot側で実行した時にエラー返ってきて困ったので注意 -
デプロイする
-
デプロイしたウェブアプリのURLをメモする
どこに表示されているかわからなくなったら右上のデプロイ > デプロイを管理 > デプロイしたプロジェクトを選択する
作業4 - LINE Developers
1. 作業1-2で作成したchannelを開く
2. Webhookの設定
- Messanger APIタブに切り替えてWebhook settings > Webhook URLに作業3-8でメモしたURLを貼る
- Webhook settings > Webhook URLの下にあるverifyを選択してsuccessが返ってくることを確認する
もしエラーレスポンスが返ってきたら何かしたら設定をミスしているのでエラー内容で調べるなりここまでの作業を見直すなりで対応 - Webhook settings > Use webhook をONにする
作業5 - LINEアプリ
1. Botを動かす
- 作業2-2でBotが追加されているLINEグループにてメッセージを適当に送信する(誰からでも良いので自分で)
作業6 - Google スプレッドシート
1. LINEグループIDの確認
- 作業3-1で作成したGoogleスプレッドシートを開く
- 3列分データが記入されていることを確認する
されていなかった場合は何かしらの設定ミスで以下を確認
a. 作業4-2-2で問題がないか
b. 作業3で作成&デプロイしたGoogle Apps Scriptは最新になっているか
デプロイ後に間違いに気づき修正した場合は再デプロイをすること
└ デプロイ > デプロイを管理 > 該当を選択 > 編集 > バージョン > 新しいバージョン > デプロイ
c. Google Apps Scriptの画面にて左側の実行中を選択し、実行結果を確認する
自分の場合はscriptに記載するシート名を間違っていたことが原因でした - データがある場合はC列のグループIDをメモする
- 3ができたらwebhook設定は不要なので作業4-2-3の設定をOFFに戻す
作業7 - メッセージを送信する実施
諸事情により、ここは試さず終いになってますので以下などを参考に実装すれば問題ないはず。。
https://qiita.com/aokuyama/items/a12ca1dbb1097b79b6a7#%E5%AE%8C%E6%88%90%E5%BD%A2
https://www.geek.sc/archives/2106
LINE Botを実際に導入しないことにした理由
LINE Botで気になったのは、グループに参加を許可しないといけない → 許可したので仮にLINE BotのIDがヒットした場合に他者もBotを追加できる → 想定していない他者にも問い合わせの通知がいく可能性があるということで、通知させる内容によっては個人情報問題などで良くないのでは?ということです。
代案を探してみたらLINE Notifyがあった
Botを作らずに通知を投げる方法があるではありませんか。。公式アカウントに紐づけて作れるのか不明だったので個人アカウントに紐づけてのLINE Notify設定なので運用上大変(設定しているLINEアカウントが削除されたり)かもしれませんがこれなら懸念していた点は問題なし。
ということで、今回はLINE Notifyを採用するのでLINE Botは使いませんが時間がかかったことのメモとして残しておきます。
参考にしたサイト
https://www.nakakamado.com/2022/05/line-bot-get-id.html
https://qiita.com/aokuyama/items/a12ca1dbb1097b79b6a7
https://qiita.com/aokuyama/items/a12ca1dbb1097b79b6a7#%E5%AE%8C%E6%88%90%E5%BD%A2
https://www.geek.sc/archives/2106
https://daily-coding.com/gas_line/