スキルアップを始める!

Contact Form7で送信があった時にGoogle Apps Scriptを使用してLine Notifyで通知を受け取る-Part3

WordPress(ワードプレス)
WordPress(ワードプレス)
この記事は約8分で読めます。

※記事中に広告情報を含みます。

\ワードプレスのスキルアップはこちら!/ WordPress入門読本

WordPressのContact Form7プラグインで送信があった際に、LINEに通知を受け取る方法です。前回の続きです。

Part2はこちら↓

スプレッドシートの値を取得する

前回のままだと、通知を送る際のメッセージは、固定されたままの内容になります。

フォームが送信されたときに、フォームに入力されている内容を取得して、メッセージを送れるようにしてみます。

スプレッドシートの値を取得して並べる

Contact Form7で送信を押した後に、スプレッドシートにデータが書き込まれるように設定している場合、スプレッドシートの値を取得して、送信メッセージを作成することもできます。

例えば、以下のような「col1」「col2」の変数を作成し、下記のように指定することで「1列目の最終行のデータ」「2列目の最終行のデータ」を取得することができます。

function doPost(e) {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastrow = sheet.getLastRow();
  const col1 = sheet.getRange(lastrow, 1).getValue();
  const col2 = sheet.getRange(lastrow, 2).getValue();
  return ContentService.createTextOutput('success');
}

.getLastRow()とは?

.getLastRow()は、指定したシートの最後の行の行番号を取得するために使用されるメソッドです。このメソッドは、シートにデータが含まれる場合にのみ機能し、空のシートの場合、0を返します。

const lastrow = sheet.getLastRow();

この表の場合は、12行目である「12」という数字が取得できます。

.getLastColumn()とは?

同様に、最終列を取得するときは、.getLastColumn();を使います。

getLastColumn()は、指定したシートの最後の列の列番号を返すメソッドです。

const lastcol = sheet.getLastColumn();

この場合、getLastColumn()は、4を返します。これは、データが含まれる最後の列の列番号であるためです。

.getRange(行, 列)とは?

getRange()は、指定したシート上のセルの範囲や場所を表すために使用されるメソッドです。このメソッドを使用することで、スクリプトでセルにアクセスしたり、値を設定したり、セルの値を取得することができます。

getRange(行, 列)

getRange(1, 1):1行目の1列目のセルを表す範囲オブジェクトを取得する
getRange(5, 1):5行目の1列目のセルを表す範囲オブジェクトを取得する
getRange(1, 4):1行目の4列目のセルを表す範囲オブジェクトを取得する

.getValue()を指定することで、getRangeで選択したセルの値を取得することができます。

下記の場合には、7行目1列目のセルの値をcol1という変数に格納します。

const col1 = sheet.getRange(7, 1).getValue();

A7セル、つまりcol1には「山本」という値が入ります。

メッセージを作る(message変数)

あとは、これらの仕組を使ってmessage変数をループで回します。

前回までのコードの復習です。

function doPost(e) {
  // Line Notifyに通知を送信する
  const token = 'Line Notifyのアクセストークン';
  const message = 'フォームの送信がありました!';
  const options = {
    'method' : 'post',
    'headers' : {'Authorization' : 'Bearer ' + token},
    'payload' : {'message' : message}
  };
  const url = 'https://notify-api.line.me/api/notify';
  UrlFetchApp.fetch(url, options);
}

まずは、message変数の値を修正します。messageの中身が変わっていきますので、let宣言に変更します。

function doPost(e) {
  // Line Notifyに通知を送信する
  const token = 'Line Notifyのアクセストークン';
  let message = '\nフォームの送信がありました!\n【送信内容】\n';
  const options = {
    'method' : 'post',
    'headers' : {'Authorization' : 'Bearer ' + token},
    'payload' : {'message' : message}
  };
  const url = 'https://notify-api.line.me/api/notify';
  UrlFetchApp.fetch(url, options);
}

let message = ‘\nフォームの送信がありました!\n【送信内容】\n’;

といった感じに変更しました。あとで見やすいように前後に改行コード「\n」を入れています。このあたりはお好みで調整ください。

項目名と最終行をループしてメッセージを作る

項目名と最終行をループしてメッセージを作ります。

イメージは、下記のような状態になります。

【送信内容】
名前:伊藤
血液型:A型
年齢:24歳
性別:男性

これが、フォーム送信時にmessage変数に格納されて、届くように作成していきます。

ループでmessageを作成する

あとは、「2行目:最終行」のループを繰り返します。

  const sheet = SpreadsheetApp.getActiveSheet();
  const lastrow = sheet.getLastRow();
  const lastcol = sheet.getLastColumn();
  for (var i = 0; i < lastcol; i++) {
    message += sheet.getRange(2, i+1).getValue() + ":";
    message += sheet.getRange(lastrow, i+1).getValue() + "\n";
  }

少し長くなりましたね…!順番に見ていきます。

まず、SpreadsheetApp.getActiveSheet();でスプレッドシートのデータを扱えるようにします。

次に、getLastRow()メソッドを使用して、シートの最後の行を取得し、lastrow変数に代入します。次に、getLastColumn()メソッドを使用して、シートの最後の列を取得し、lastcol変数に代入します。

その後、forループを使用して、列ごとにデータを取得します。変数「i」は、現在処理している列のインデックスです。このループでは、各列の2行目のセル最終行のセルの値を取得します。

message変数に2行目のセルの値を追加し、コロン(:)を追加します。その後、lastrowで指定された行のi+1列目のセルの値を追加し、改行コード(\n)を追加します。

最終的に、ループが完了すると、message変数には、すべての列の2行目と最終行の値が含まれるメッセージが格納されます。

ログを見ると、下記のような情報がmessage変数に格納できています。

【送信内容】
名前:伊藤
血液型:A型
年齢:24歳
性別:男性

ここは少し難しい部分かもしれませんので、何度か見て復習してみると良いかと思います。

デプロイする

あとは、デプロイしてURLを更新します。

function doPost(e) {
  // Line Notifyに通知を送信する
  const token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
  let message = '【送信内容】\n';
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastrow = sheet.getLastRow();
  const lastcol = sheet.getLastColumn();
  for (var i = 0; i < lastcol; i++) {
    message += sheet.getRange(2, i+1).getValue() + ":";
    message += sheet.getRange(lastrow, i+1).getValue() + "\n";
  }

  const options = {
    'method': 'post',
    'headers': { 'Authorization': 'Bearer ' + token },
    'payload': { 'message': message }
  };
  const url = 'https://notify-api.line.me/api/notify';
  UrlFetchApp.fetch(url, options);
}

Contact Form7側のxhr.open(‘POST’,XXX)、のURL部分を更新して、送信してみます。

送信内容が届きました!

まとめ

このように設定することで、メッセージ内容をLINEに通知することができます。※アクセストークンやメッセージ内容は適宜変更してください。

以上の手順で、Contact Form7で送信があった際にLINEに通知することができます。

URLをコピーしました!