40 代おっさんGAS使ってLINE Botで値を送ってみる！

## 本記事ついて

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

## 今回の目標

・GASを使ってLINEに特定の値を送ってみる。

## 準備

### Bot用のチャンネルを作成

LINE Develogersにログイン

<https://developers.line.biz/ja/>

![LIEN.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/c734d783-68ad-2924-230d-e7b23444f63b.png)

Messsaging API(赤枠)をクリック

画面遷移するので
「今すぐはじめよう」をクリックしてみてください

次は
LINEアカウントでログインをしてください

### プロバイダー作成になるので

|項目|入力内容|
|----|-------|
|チャンネルの種類|LINE Messaging API|
|プロバイダー|任意の名前で（テストにしました）|
|会社・事業者の所在地|日本|
|チャンネル名|任意の名前で（テストにしました）|
｜チャンネル説明|LINE botのテスト|
|大業種|ウェブサービス|
|小業種|ウェブサービス（その他）|

あとは利用規約にレ点を入れてください

作成をクリック

あとは同意してクリックしてください。

プロバイダー作成できたと思います。

### チャンネルアクセストークンのコピー

コンソール（ホーム）の画面に遷移しますので

そこからMesssaging APIのタブをクリック

![Messsaging API.の設定PNG.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/295b1e8c-0d8b-b86e-4e40-76035bf5a554.png)

下のほうを見ると

チャンネルアクセストークンと言う場所があり
そこに発行というボタンがあるのでクリック（赤枠）

![サクセストークン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/876f8801-1e11-13de-3a4d-af8878a46a60.png)

発行ができましたらそれをコピーしてメモ帳でもよいので張っておいてください。
後で使います。

### 自動応答をオフに

QRコードがあったと思います。
そうすると
テストを友達追加してください。
開くと

![LINEあいさつ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/158f3351-1c6e-6afd-ba46-6893c5629a87.png)

とメッセージがでたと思います。
この設定をオフにしたいと思うので

![アクセストークン２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/b254b9d2-28e1-8f17-ed89-0263b9e16c2f.png)

赤字の所を無効にしたいので、横にある編集をクリック

![応答設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/2607a90e-356a-2cba-444f-963e9e313078.png)

こちらのあいさつ・応答メッセージのところをオフに（赤枠）

### ユーザーIDをコピー

コンソール（ホーム画面）に戻って
チャンネル基本設定のタブをクリック
下のほうにある
あなたのユーザーIDをコピーしてメモ帳にでも貼り付けしてください。

![IDあなたの.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/4e993202-710f-d63b-85d3-187f19d1fd94.png)
これで準備はできました。

## 実践

まずはLINEに何か文集と時間を送りたいと思います。

[チャネルアクセストークン]に先ほどコピーしたトークンを
[ユーザーID]も同様にコピーしたものを

```javascript
// LINE Message API チャネルアクセストークン
const ACCESS_TOKEN = '[チャネルアクセストークン]';
//ユーザーIDを指定
const USER_ID = '[ユーザーID]';
// 通知用のLINE API
const PUSH = 'https://api.line.me/v2/bot/message/push';

/** 
 * push
 * botからメッセージを送る
 */
function push() {

  const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm');

  // リクエストヘッダ
  const headers = {
    'Content-Type' : 'application/json; charset=UTF-8',
    'Authorization' : 'Bearer ' + ACCESS_TOKEN //"Bearer "にスペースありこれがないと動かない
  };
  // メッセージ
  const postData = {
    'to': USER_ID, 
    'messages' : [
      {
        'type' : 'text',
        'text' : `${date}利樹がかわいい～～１時間以上かけて飯食った＞＜早く食べてよ～～`
      }
    ]
  };
  // POSTオプション作成
  const options = {
    'method' : 'POST',
    'headers' : headers,
    'payload' : JSON.stringify(postData)
  };
  return UrlFetchApp.fetch(PUSH, options);
}
```

＊"Bearer "にスペースありこれがないと動かないのところでかなりハマったので注意～
JSONをしっかり学んでいないのが分かるところですよね＞＜

では実行ボタンを押してください。
そうするとLINEに文章が遅れたはずです。

## せっかくなのでスプレッドシートから文章を送る

スプレッドシートから値をLINEに送りたいと思います。

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

![スプレッドシート.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/44c8680c-dd85-44b1-aa43-39ca127efe03.png)

### コードを記入

const File = SpreadsheetApp.openById('[GoogleスプレッドシートのID]');
これでスプレッドシートを取得

const baseSheet = File.getSheetByName('シート1');
これでシートを取得

const mikan = baseSheet.getRange('B3').getValue();
これでセルから値を取得しています。

```javascript
// LINE Message API チャネルアクセストークン
const ACCESS_TOKEN = '[チャネルアクセストークン]';
//ユーザーIDを指定
const USER_ID = '[ユーザーID]';
// 通知用のLINE API
const PUSH = 'https://api.line.me/v2/bot/message/push';

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

/** 
 * push
 * botからメッセージを送る
 */
function push() {

  const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm');

  //セルのB3の値（みかん）を取得
  const mikan = baseSheet.getRange('B3').getValue();
  const bodyText = `${date}利樹は${mikan}が大好きです`;
 
  // リクエストヘッダ
  const headers = {
    'Content-Type' : 'application/json; charset=UTF-8',
    'Authorization' : 'Bearer ' + ACCESS_TOKEN //"Bearer "にスペースありこれがないと動かない
  };
  // メッセージ
  const postData = {
    'to': USER_ID, 
    'messages' : [
      {
        'type' : 'text',
        'text' :  bodyText
      }
    ]
  };
  // POSTオプション作成
  const options = {
    'method' : 'POST',
    'headers' : headers,
    'payload' : JSON.stringify(postData)
  };
  return UrlFetchApp.fetch(PUSH, options);
}
```

結果は

![LINEみかん.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/d72115ff-abd0-57c6-aaf7-1480e2aeac31.png)

このように
const bodyText = `${date}利樹は${mikan}が大好きです`;

${mikan}でスプレッドシートからみかんを取ってきているのがわかります。

## 参考資料

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