こんにちは!アナログな町内会運営を変えるべく、「GASで機能拡張した町内会公式LINE」を作りました。たくさんの記事を参考にしながら、オープンソースの文化に触れる中で、助け合いの大切さを実感しつつ、ようやく完成させることができました。
Pay forwardの精神で、これから町内会LINEに追加した機能をシリーズで紹介していきます。初心者なので完璧なコードではないかもしれませんが、少しでも役に立てば嬉しいです!
なお、ブログ通りに作業してもうまく動かない方のために、「ココナラ」でサポートを提供しています。良かったらご覧くださいね♪
今回は「スプレッドシートから一斉送信」について説明します。
いよいよプログラミング!って感じでテンション上がりますよ~
是非チャレンジしてみてください。
町内会・自治会のLINE公式チャネルにおけるGoogleアカウントとGAS活用の5つのメリット
1. 中央管理と一元化
町内会専用のGoogleアカウントを使用することで、全てのデータや情報を一元管理できます。
具体例:
- 住民の連絡先情報、イベント情報、緊急連絡先などを一箇所にまとめることができ、管理が簡単になります。
- データの一元化により、情報の重複や抜け漏れを防ぐことができます。
2. 自動化と効率化
GASを使ってスプレッドシートからメッセージを一斉送信することで、手動作業を大幅に削減し、運営の効率化が図れます。
具体例:
- 定期的な連絡事項(例えば、毎週のゴミ出し日程や月次のイベント情報)を自動で住民に送信できるため、担当者の負担を軽減します。
- 一斉送信により、同じ内容のメッセージを複数の住民に対して個別に送信する手間を省けます。
3. 正確性の向上
スプレッドシートのデータを基に自動でメッセージを作成・送信するため、手動入力による誤りを防ぐことができます。
具体例:
- 定型文のメッセージをスクリプトで自動生成するため、一貫性のある情報提供が可能になります。
- データの自動取り込みにより、誤送信や入力ミスを防ぎます。
4. メッセージ送信履歴の確認
GASを使うことで、スプレッドシートにメッセージの送信履歴を記録し、後から確認することができます。
具体例:
- いつ、どのメッセージが送信されたかをスプレッドシートで確認できるため、送信漏れや誤送信の確認が簡単に行えます。
- 過去のメッセージ履歴を参照することで、住民からの問い合わせ対応が迅速に行えます。
5. コスト削減
専用のソフトウェアや外部サービスを利用する必要がなく、Googleの無料ツールを活用することで、運営コストを削減できます。
具体例:
- 高価なメール配信サービスや管理ソフトウェアの代わりに、無料のGASとスプレッドシートを使うことで、運営コストを抑えることができます。
デメリット
初期設定と学習コスト:GASを利用するためには、初期設定やスクリプトの作成が必要であり、担当者がスクリプトを理解し、使用できるようになるまでの学習時間が必要です。
依存度の高さ:GoogleアカウントやGASに依存するため、Googleのサービスに何らかの障害が発生した場合に、メッセージ送信が滞る可能性があります。
セキュリティとプライバシー:住民の個人情報をGoogleスプレッドシートで管理するため、適切なセキュリティ対策を講じる必要があります。
スプレッドシートからLINEに一斉送信するスクリプトを作成する
では、早速スクリプト作成に移りましょう。
新しいスクリプトを作成
前回はコード.gsという名前でファイルを作り、LINEのチャネルアクセストークンを設定するコードを作りましたね。今回新しくファイルを作成します。
このまま作ったコード.gsにズラーっとコードを書き連ねてもいいんですが、数が増えてくると管理が大変です。なので、機能ごとに新しくファイルを作成することをお勧めします。
ファイル右側の「+」ボタンから、スクリプトを選択します。
新しいスクリプトのファイル名は、「一斉送信」とでもしておきましょうか。
以下のコードをペーストします。(デフォルトで表示されているmyFunctionを上書きしてOKです)
function onOpen() { //スプレッドシートのメニューにカスタムメニュー「LINE一斉送信 > 実行」を作成 トリガー:スプレッドシート起動時
var ss = SpreadsheetApp.getActiveSpreadsheet();
var subMenus = [];
subMenus.push({
name: "チェックしたメッセージを一斉送信する",
functionName: "broadcast" //実行で呼び出す関数を指定
});
ss.addMenu("★LINE一斉送信", subMenus);
}
function broadcast() {
const url = 'https://api.line.me/v2/bot/message/broadcast';
const token = PropertiesService.getScriptProperties().getProperty('LINEb_TOKEN'); //チャネルアクセストークン
const messages = getMSG();
const payload = {
messages: [
{ type: 'text', text: messages}
]
};
const params = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: 'Bearer ' + token },
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(url, params);
}
function getMSG(){
var spreadsheet = SpreadsheetApp.openById("自分のスプレッドシートのID");
var sheet_broadcast = spreadsheet.getSheetByName('一斉通知履歴');
const lastRow = sheet_broadcast.getLastRow();
var date = new Date();
var timeZone = 'JST';
var format = 'yyyyMMdd HH:mm:ss';
var b_date = Utilities.formatDate(date, timeZone, format);
let message ="";
for(let i = 2; i <= lastRow; i++) {
if(sheet_broadcast.getRange(i,1).getValue() === true ){ //送信時間に何も入ってない&チェックボックスにチェックが入っていないとき
if(sheet_broadcast.getRange(i,3).getValue()===""){
message = sheet_broadcast.getRange(i, 2).getValue();
sheet_broadcast.getRange(i, 3).setValue(b_date);
sheet_broadcast.getRange(i, 1).setValue(false); //チェックボックスをfalseに戻す
Browser.msgBox("LINE一斉送信を完了しました"); // ブラウザへ完了通知
return message;
}else{
Browser.msgBox("このメッセージは配信済みです。再送したい場合は送信日時をクリアしてください。");
}
}
}
console.log(b_date + message)
}
上記には3つのメソッドが書いてあります。
メソッドとは、ザックリいうと「操作を定義したもの」です。
メソッド1:onOpen() メソッド”broadcast”を実行するサブメニューを増設
メソッド2:broadcast() メソッドgetMSGで得たメッセージを一斉送信
メソッド3:getMSG() 指定のスプレッドシートからメッセージを受け取る
スプレッドシートでの作業
スプレッドシートのIDをペーストしよう
先ほどのスクリプトの指示を明確にするために、「どのスプレッドシート」を用いるか、を指定せねばなりません。
作成したスプレッドシートを開きます。(現GoogleAppsScriptファイルに連携しているシート、ですよ)
スプレッドシートのIDは、「…docs.google.com/spreadsheets/d/」 「/edit?gi…」の間にある文字列です。
これをコピーしてスクリプトのメソッド3:function getMSG()の2行目、
(“自分のスプレッドシートのID”)
内の” ”にペーストします。(””は消さないでくださいね。この間にペーストします)
スプレッドシートのシート名を変えよう
シートの名前を「一斉通知履歴」とします。
もし、シート名を他の名前にするならば、メソッド3:function getMSG()の3行目にあるシート名も変えます。
スクリプトを実行しよう
では、いよいよスクリプトを実行していきます
スプレッドシートにサブメニューを実装しよう
onOpenメソッドを実行します。もし、Googleアカウントへのアクセスのアラートが出ても、前回同様突破します(今後何度も出てくるので、同様に突破してください)。
実行完了 と示された後にスプレッドシートに戻ると…
メニューの右端に、「★LINE一斉送信」というサブメニューが新設されました!
ここら辺から、「自分がプログラミングでこんなことできちゃうなんて…」という全能感が生まれてきます笑
送信したいメッセージを入力しよう
まず、A2に「TRUE」と入力します。理由は後で説明しますので、ひとまず入力してください。
次に、B2に送信してみたいメッセージを入力します。
ここでの注意点は、1行目ではなく、「2行目から」入力することです。1行目は見出しに用いるため検索対象外にしてあります。
サブメニューから一斉送信してみよう
サブメニュー「★LINE一斉送信」を実行してみます。
すると、自分のLINEに通知が…
開いてみると!
無事に送信できましたね!
先ほどのスプレッドシートに戻ってみると…
TRUE→FALSEに、C2には送信済の日時が表示されました。
スプレッドシートを見やすく整えよう
一斉送信出来てテンションが上がったところで、スプレッドシートをさらに見やすく整えていきます。
見出しをつける
1行目に見出しをつけます。
チェックボックスに変更する
次に、TRUE/FALSEの代わりにチェックボックスを使います。
挿入→チェックボックスを選択します。
これで、チェックボックスON = TRUE =送信する
チェックボックスOFF = FALSE =送信しない の設定ができました。
こちらのほうが、視覚的に作業できますね。
トリガーを設定する
現在の設定だと、スプレッドシートをいったん閉じると「★LINE一斉送信」のサブメニューは消えてしまいます。
毎回onOPENのスクリプトを実行しないとサブメニューに追加されない状態です。これでは使いにくいので、「スプレッドシートを開けたタイミングで」onOpenのスクリプトが自動的に実行されるように設定しましょう。
新しいトリガーを追加 →
実行する関数 onOpen
デプロイ Head
イベントのソース スプレッドシートから
イベントの種類 起動時
これを保存すると、スプレッドシートを閉じても、再度開いたときに自動的にサイドメニューが追加されるようになります。便利ですね!
LINE一斉送信の注意点
LINE公式アカウントは、現在月に200通までは無料で使えます(2024年7月現在)。
LINE公式アカウント 料金プラン
送信できることが嬉しくて何でも送信していると、200通/月超えて無料料金範囲内では送信できなくなってしまいます。
友達の数が増えると、一斉送信数 × 友達の数 でカウントされていきます。
100人のユーザーに無料で送信できるメッセージは2回/月です。
一方で、自動返信機能を使ったメッセージ返信はカウントされません。なので、自動返信機能を持たせると出来ることがぐっと広がります。
最終的に何人で運用する予定なのか、運用形態を考えておきましょう。
ご利用は計画的に。
まとめ
今回はスプレッドシートからの一斉通知について手順を説明しました。
内容を書き換えれば、いろんな応用が出来そうですね!
誰かのお手伝いになったら幸いです。
ちなみに、この町内会LINEを作成するにあたり参考にしたのは、ノンプロ研の高橋さん「いつも隣にITのお仕事」のブログ記事のGASの部分です。「おすすめの書籍ありますか?」とお問い合わせいただきましたので、高橋さんのGASの書籍を紹介しておきます。