記事内に広告が含まれています。

ノンプログラマーが作る【GASでLINE構築】公式アカウント③スプレッドシートからLINE一斉送信

【GAS・LINE】自治会・町内会編

こんにちは!アナログな町内会運営を変えるべく、「GASで機能拡張した町内会公式LINE」を作りました。たくさんの記事を参考にしながら、オープンソースの文化に触れる中で、助け合いの大切さを実感しつつ、ようやく完成させることができました。

Pay forwardの精神で、これから町内会LINEに追加した機能をシリーズで紹介していきます。初心者なので完璧なコードではないかもしれませんが、少しでも役に立てば嬉しいです!

なお、ブログ通りに作業してもうまく動かない方のために、「ココナラ」でサポートを提供しています。良かったらご覧くださいね♪

GASを用いた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の書籍を紹介しておきます。