【自分専用ボット】定型メールはLINEでらくらく送信!(4/5)

GASでメール送信プログラムを作る

ウサギ先輩
さて、Google Apps Scriptでプログラムを作っていくわけだが。
プログラム記述は「JavaScript」がベースになっているから、取っ付きやすいんじゃないかな。

まずは私が「メール送信」のプログラムを書いてみるので、写経してごらん。

わん太郎
イエッサー!


/*
 メール送信【テレワーク開始・終了】
  actType:"開始"または"終了"
  actTime:何時何分
*/
function sendMail_telework(actType, actTime) {
  
  var sheetAddress = SpreadsheetApp.getActive().getSheetByName("宛先");
  var sheetTemplate = SpreadsheetApp.getActive().getSheetByName("定型文");
  
  //【宛先】
  //宛先シートからA1セルの値を取得
  var toAddress = sheetAddress.getRange("A1").getValue();
  
  //【メール本文】
  var body = "";
  //定型文シートのすべてのセルデータを取得
  var values = sheetTemplate.getDataRange().getValues();
  for (var i = 0; i < values.length; i++){
    if (body != ""){
      body += "\n";
    }
    body += values[i][0];
  }
  //"{TIME}"キーワードを置換
  body = body.replace("{TIME}", actTime);
  //"{ACTION}"キーワードを置換
  body = body.replace("{ACTION}", actType);
  
  //件名
  var subject = "テレワーク" + actType;
  //オプション
  var option = {name: "わん太郎"};    //送信者名
 
  //Gmail送信
  MailApp.sendEmail(toAddress,subject,body,option);
}
【GAS】メール送信ファンクション
【ポイント解説】
スプレッドシート操作、メール操作のGASメソッドを解説しよう。
8行目:
SpreadsheetApp.getActive().getSheetByName([シート名])
GASと関連付いている親スプレッドシートから、指定したシートを参照しているぞ。
13行目:
sheet.getRange([セル位置]).getValue()
シートから指定したセルの値を取得できるぞ。
18行目:
sheet.getDataRange().getValues()
シート全体のセルの値を取得する。取得されるデータは2次元配列だ。
values[行インデックス][列インデックス]という指定で参照できるぞ。
36行目:
MailApp.sendEmail([宛先], [件名], [メール本文], [オプション])
Gmailでメールを送信するぞ!
使われるGmailアカウントは、GAS管理者のアカウントだ。
オプションには今回指定した「name(送信者名)」の他、「cc」「bcc」「noReply(返信不可)」が指定できる。
わん太郎
うんうん!
「定型文」シートから読み込んだメール本文に対して、置換キーワードをファンクション引数の値で置換してますね!

actType("開始"または"終了"), actTime(何時何分)の引数の値は、LINEメッセージからもらうのかな?

ウサギ先輩
そうだ。察しがいいね!
では、「LINE Messaging API」からのメッセージを受信するプログラムを作っていこう。

「LINE Messaging API」からのメッセージ受信

ウサギ先輩
「LINE Messaging API」からは、HTTPS通信のPOSTリクエストでメッセージが送られてくる。
POSTリクエストを受け取るのが、doPostファンクションだ。

/*
 POSTリクエスト受信
  request:受信リクエスト
*/
function doPost(request) {
  //POSTリクエストをJSONデータにパース
  var receiveJSON = JSON.parse(request.postData.contents);
  
  for (var i = 0; i < receiveJSON.events.length; i++){
    var event =  receiveJSON.events[i];
    
    //メッセージ受信の場合
    if (event.type == "message"){
      //テキストメッセージの場合
      if (event.message.type == "text"){
        //テキストメッセージ取得
        var msg = event.message.text;
        //改行コード区切りで配列に分解
        var msgAry = msg.split("\n");
        
        if (msgAry.length >= 2){
          var actType = msgAry[0];  //"開始"または"終了"
          var actTime = msgAry[1];  //何時何分
          
          switch (actType){
            case "開始":
            case "終了":
              //メール送信【テレワーク開始・終了】
              sendMail_telework(actType, actTime);
              break;
          }
        }
      }
    }
  }
}
【GAS】POSTリクエスト受信ファンクション
【ポイント解説】
受信したLINEメッセージについて解説。
7行目:
var receiveJSON = JSON.parse(request.postData.contents);
LINEからのPOSTリクエストはJSON形式のテキストデータだ。
参照しやすいようにJSONオブジェクトに変換しよう。
13行目:
if (event.type == "message"){
event.typeでLINEから受信したデータのイベント種別を判別しよう。
"message"(メッセージ受信)以外のイベントは処理しないようにしているぞ。
15行目:
if (event.message.type == "text"){
event.message.typeでメッセージ種別を判別しよう。
"text"(テキストメッセージ)以外のメッセージは処理しないようにしているぞ。
ウサギ先輩
LINEでメッセージ入力する時に、
1行目には"開始"または"終了"、2行目には「何時何分」を入力する
という仕様を考えてみた。
ルールが決まれば、そのようにメッセージを分解して処理に使えばいいよね。

わん太郎
なるほど〜!
「改行コード」を入力データの区切りにするわけですね。
データ区切りといえば「カンマ区切り」が思いつくけど、改行のほうがLINEでの入力が楽ですよね!

GASをWebアプリケーションとして公開する

ウサギ先輩
以上で、GASのプログラミングは完了!
最後にLINEから呼び出せるように、GASをWebアプリケーションとして公開するぞい。

わん太郎
きた〜〜!!



■STEP1:メニューを選択

「公開」メニューから「ウェブ アプリケーションとして導入」をクリックします。

■STEP2:Webアプリデプロイ画面

Webアプリのデプロイ画面が表示されるので、
  1. 「Project version:」には、「New」を選択
  2. 「Execute the app as:」には、自分のアカウントを選択
  3. 「Who has access to the app:」には、「Anyone, even anonymous」を選択
して、「Deploy」をクリックします。

■STEP3:アクセス権限の許可

「Authorization required」(許可が必要)というダイアログが表示されるので、
「許可を確認」をクリックします。
起動される別ウィンドウで、自分のアカウントを選択します。
【ポイント解説】
選択するアカウントが有料アカウント(G Suite)の場合はすんなり次のアクセス許可画面に行くのだが、
無料アカウント場合は「このアプリは確認されていません」という警告画面が出てくる。
その場合は、まず「詳細」をクリックしよう。
すると下に「[GASのプロジェクト名](安全ではないページ)に移動」のリンクが出てくる。
そのリンクをクリックすると、無事にアクセス許可画面に移動できるぞ。
「スプレッドシートの操作」「Gmailの操作」についてアクセス許可が求めらるので、
「許可」をクリックします。

■STEP4:デプロイ完了

デプロイ完了画面に「WebアプリのURL」が表示されます。
ウサギ先輩
最後の「WebアプリのURL」は、「LINE Messaging API」から呼び出すURLになるので、メモしておこう!

わん太郎
了解です。コピーしました!


あなたへのおすすめ記事