7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINE Bot でGoogleフォームを使って簡易的なユーザー登録をさせ、プッシュメッセージを送る

Last updated at Posted at 2022-10-30

はじめに

LINE Botを作っていて、LINE ID やGroup Idを利用してpush message を送りたいときに、簡単なユーザー登録をさせるtipsです

YouTuberの仲条さんの動画で紹介されました!(ちょっと記事でつまづくことがあるので、この動画見ながらだと安心です!!!)
https://www.youtube.com/watch?v=YURez52I2Mc

使う技術

GAS
LINE Bot
Googleフォーム

前提

5分でつくるLINEBot を元に、「オウム返しBot」の作成は完了させておいてください
今回は、複数人が登録しているグループに追加されたBotが、グループIDを取得するまでを行います

Googleフォームの準備

Googleフォームの「事前入力したURLを取得」の説明

登録名とグループIDを入れる用の設問を用意します
グループIDは自動で入力させるのでユーザーが触らないように!という文言を書いておきます。(書き換えないかどうかは、ユーザーの善意頼りですが、プロトタイプなので良しとしましょう!)
スクリーンショット 2022-10-31 0.56.00.png

ページ右上のメニューを展開し「事前入力したURLを取得」を選択します
スクリーンショット 2022-10-31 0.56.19.png

IDの設問に適当な文字を入力し、「リンクを取得」を押します
スクリーンショット 2022-10-31 0.56.34.png

末尾に「test」とあるURLがコピーできたらメモ帳か何かに保存しておきましょう

https://docs.google.com/forms/d/e/1FAIpQLSfkTMZCaibmWcki1KS6Lv-3sQsDGlsUv1li9fnVGMsOnE87Dw/viewform?usp=pp_url&entry.36173468=test

試しに、この「test」の文言を「111222333444」に変更しURLにアクセスをすると

https://docs.google.com/forms/d/e/1FAIpQLSfkTMZCaibmWcki1KS6Lv-3sQsDGlsUv1li9fnVGMsOnE87Dw/viewform?usp=pp_url&entry.36173468=111222333444

スクリーンショット 2022-10-31 1.15.55.png

これを利用してユーザー登録を行います!

上記URLはサンプルなので、自分のフォームを作ってから先に進んでください

Googleフォームの回答を既存のスプレッドシートに出力する

5分でつくるLINEBotをやっている前提ですので、まだの人はこちらの作業を終えてから戻ってきてください。

Googleフォームでの作業です。
「回答」からスプレッドシートのマークを選択します
スクリーンショット 2022-10-31 1.20.14.png

スクリーンショット 2022-10-31 1.20.24.png

5分でつくるLINEBotでコピーしたスプレッドシートを選択すると、このようにシートが追加されます
スクリーンショット 2022-10-31 1.20.53.png

これでフォームの準備は完了です。

GAS の修正

5分でつくるLINEBotのGASのコードを修正していきます

Botがグループへ参加出来るようにするには、LINE Developersから「グループトーク・複数人トークへの参加を許可する」の設定を有効にしてください

スクリーンショット 2022-10-31 2.43.28.png

doPost関数を以下のように変更します。

//ポストで送られてくるので、ポストデータ取得
function doPost(e) {
  // 動作確認用のログ出力
  log_to_sheet("A", "doPost")

  //JSONをパースする
  json = JSON.parse(e.postData.contents);

  //返信するためのトークン取得
  reply_token= json.events[0].replyToken;
  if (typeof reply_token === 'undefined') {
    return;
  }

  let messages
  if (json.events[0].source['groupId'] && json.events[0].message.text === "ユーザー登録") {
    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    let url = "さっきコピーしたURLでtestを抜いたものをここにコピー(文末は、viewform?usp=pp_url&entry.36173468= みたいな感じになるかと思います)"
      // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    url = url + json.events[0].source['groupId']
    messages = [{'type': 'text', 'text': "ユーザー登録はこちらから " + url }]

  } else {
    // オウム返し
    messages = test_message()
  }


  // テスト動作ができたら、your_messageの中身を追加して、自分のオリジナルのLINEBotにしてみましょう
  // messages = your_message()

  // メッセージの中身を確認したい時には以下のコメントアウトを外して、sheet「log」に書き込まれる内容を確認しましょう
  // log_to_sheet("A", messages)

  // メッセージを返信
  send_reply_message(messages)

  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

コードの解説

ユーザーからのメッセージにグループIDが存在する場合、以下のコードで取得ができます。

json.events[0].source['groupId']

ユーザーからのメッセージにグループIDが存在して、メッセージが「ユーザー登録」の時だけユーザー登録用のURLを送信するようにします

if (json.events[0].source['groupId'] && json.events[0].message.text === "ユーザー登録") {

} else {

}

先ほどコピーをしたURLの「test」部分をユーザーから取得したグループIDで置き換えます

let url = 'https://docs.google.com/forms/d/e/1FAIpQLSfkTMZCaibmWcki1KS6Lv-3sQsDGlsUv1li9fnVGMsOnE87Dw/viewform?usp=pp_url&entry.36173468=' + json.events[0].source['groupId']

そうするとこのようにユーザー登録用のURLを返却してくれます
S__4620333.jpg

フォームを送信すると、スプレッドシートにデータが入っていることを確認できます
スクリーンショット 2022-10-31 1.43.10.png

プッシュメッセージ送信機能を実装

プッシュメッセージは無料の範囲だと月間1000メッセージしか送れないので注意しましょう

スプレッドシートのsheet1にこのようにプッシュメッセージで送りたい相手、送りたいメッセージを記載しておきます。
スクリーンショット 2022-10-31 2.38.23.png

(VLOOKUP関数を使って、対象家族の値でシート「フォームの回答1」を検索し、group_idをsheet1に取得しています)

プッシュメッセージを送信したら、ステータスに「送信完了」というメッセージを入れ、次から送信対象にしないようにします。

function test(){
  // sheet1 を指定
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
  // 全データを取得
  const all_data = sheet.getDataRange().getValues();

  let messages = []
  let group_id
  
  for(let i = 1; i < all_data.length; i++) {
    if(all_data[i][0] != "送信完了" && all_data[i][2]){ // ステータスが送信完了でなく、group_idが存在する場合
      group_id = all_data[i][2]
      messages.push({'type': 'text', 'text': all_data[i][3]})
      pushMessage(group_id, messages)
      sheet.getRange(i+1, 1).setValue("送信完了")
    }
  }
}

function pushMessage(group_id, messages) {
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'to': group_id,
      'messages': messages,
    }),
  });
}

これでGASで関数testを選択し、実行ボタンを押すと、プッシュメッセージが送信されるようになりました。
スクリーンショット 2022-10-31 2.29.34.png

実際には、この送信する関数を、GASの機能で定期的に実行するといったことが必要になってくると思いますが、ひとまずGoogleフォームでの簡単なユーザー登録とプッシュメッセージの送信ができるようになりました。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?