LoginSignup
6
2

More than 1 year has passed since last update.

40 代おっさんGASを使ってLINE Botで問い合わせに応じて値を返してみる!

Last updated at Posted at 2022-02-28

本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

前回の記事

https://qiita.com/kou1121/items/d9a6618d96eceefb1de7

こちらでBot用のチャンネル作成していますので見てください

こんにちはと返すBotプログラムを作る

コード

// LINE Message API チャネルアクセストークン
const ACCESS_TOKEN = "[チャネルアクセストークン]";
// リプライ用のLINE API
const REPLY        = "https://api.line.me/v2/bot/message/reply";

/** 
 * ユーザーからのアクションに返信する
 */
function doPost(e) {
  const json = JSON.parse(e.postData.contents);

  const postMsg    = json.events[0].message.text;
  const replyToken = json.events[0].replyToken;
  let replyText = '';

  if(postMsg == 'こんにちは') {
    replyText = 'こんにちはー!!';
  }

  if(replyText == "") {
    return;
  } else {
    //replyするメッセージの定義
    const postData = {
      'replyToken' : replyToken,
      'messages'   : [
        {
          'type' : 'text',
          'text' : replyText
        }
      ]
    };
    
    //リクエストヘッダ
    const headers = {
      'Content-Type'  : 'application/json; charset=UTF-8',
      'Authorization' : 'Bearer ' + ACCESS_TOKEN //'Bearer 'スペース忘れずに
    };

    //POSTオプション作成
    const options = {
      'method'  : 'POST',
      'headers' : headers,
      'payload' : JSON.stringify(postData)
    };

    return UrlFetchApp.fetch(REPLY, options);
  }
}

デプロイ

デプロイをクリック(赤枠)

デプロイ.PNG

新しいデプロイを選んで
種類の選択のタブをクリック
ウェブアプリを選択

新しいデプロイ.PNG

アクセスできるユーザーを全員を選んでください(赤枠)
*ちなみにおれはこれを忘れてえらい目にあいました。

これができたら
ウェブアプリのURL(赤枠)が出るのでそれをコピーしてメモ帳に貼ってください。

完了画面.PNG

次にLINE Official Account Managerの応答設定に行ってください

分からなければ
こちらを↓

https://qiita.com/kou1121/items/d9a6618d96eceefb1de7

応答設定.PNG

Webhookをオンに(赤枠)
Messsaging API設定をクリック(青枠)

URLAPI.PNG

Webhook URL(赤枠)に先ほどのデプロイでコピーしたURLを
保存をクリック

こんにちは.PNG

これで大丈夫です。

スプレッドシートに乗っている住所を押してくれるBot

スプレッドシートに乗っている住所を教えてくれるBotを作りたいと思います。
これは、在宅ケア(介護)などを行うときに、利用者の住所などを教えてくれるものがあったらどうかなと思って作って見ました。

スプレッドシートにデータを入れる

住所.PNG

コードを書く

// LINE Message API チャネルアクセストークン
const ACCESS_TOKEN = "[チャネルアクセストークン]";
// リプライ用のLINE API
const REPLY        = "https://api.line.me/v2/bot/message/reply";

// GoogleスプレッドシートをID取得
const File = SpreadsheetApp.openById('[GoogleスプレッドシートのID]');
//シートをシート名で取得
const baseSheet = File.getSheetByName('シート1');

/** 
 * ユーザーからのアクションに返信する
 */
function doPost(e) {
  const json = JSON.parse(e.postData.contents);

  const postMsg    = json.events[0].message.text;
  const replyToken = json.events[0].replyToken;
  let replyText = '';

  if(postMsg == '札幌駅') {
    replyText = baseSheet.getRange('B1').getValue();
  } else if(postMsg == '時計台') {
    replyText = baseSheet.getRange('B2').getValue();
  } else if(postMsg == 'モエレ沼公園') {
    replyText = baseSheet.getRange('B3').getValue();
  } else if(postMsg == '函館駅') {
    replyText = baseSheet.getRange('B4').getValue();
  }

  if(replyText == "") {
    return;
  } else {
    //replyするメッセージの定義
    const postData = {
      'replyToken' : replyToken,
      'messages'   : [
        {
          'type' : 'text',
          'text' : replyText
        }
      ]
    };
    
    //リクエストヘッダ
    const headers = {
      "Content-Type" : "application/json; charset=UTF-8",
      'Authorization' : 'Bearer ' + ACCESS_TOKEN //'Bearer 'スペース忘れずに
    };

    //POSTオプション作成
    const options = {
      'method'  : 'POST',
      'headers' : headers,
      'payload' : JSON.stringify(postData)
    };

    return UrlFetchApp.fetch(REPLY, options);
  }
}

住所2.PNG

こんな感じで選択肢が増えています。
もう少し勉強したらGoogleマップなんかを使うのも良いと思います。

参考資料

https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-Google-Apps-Script%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88/dp/4798064742

https://qiita.com/ymd65536/items/f352632aad904bd02b1c

https://qiita.com/jun_higuche/items/0cfaa9f7466ba6bed469#2line-developers%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%A6bot%E7%94%A8%E3%81%AE%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90

6
2
1

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
6
2