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

## 本記事ついて

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

## 前回の記事

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

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

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

### コード

```javascript
// 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/49fce163-cbbb-eca1-4442-3431c22c8d5f.png)

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

![新しいデプロイ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/3225f641-85d4-313a-cd4c-75788b2e5ac2.png)

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

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

![完了画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/07b35fa8-1e87-0a46-3c92-075d70e5bd01.png)

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

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

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

![応答設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/431d10f8-5a34-d14f-5962-8e9e0dcd8a67.png)

Webhookをオンに（赤枠）
Messsaging API設定をクリック（青枠）

![URLAPI.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/c0429f26-f4c8-6f7e-93d9-7ec69081bd4a.png)

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

![こんにちは.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/23608704-cd67-3404-f99d-6478874b2f2b.png)

これで大丈夫です。

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

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

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

![住所.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/0c16726c-4e02-08e4-e7b5-1f5c9116dd59.png)

### コードを書く

```javascript
// 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/1ba684b8-f713-af44-df6c-78c78e31d4f5.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>