【3分クッキング】コピペとGASで作るLINEBot入門(2024/4)

##概要
LINEBotやってみたいけど、よくわかんないんだよなーっていう方おられませんか！
入門記事も沢山あり、内容が古いもの、動かないもの、いろいろ転がっています。
とくに[GAS(Google App Script)](https://developers.google.com/apps-script?hl=ja)は導入が無料かつ実装が楽なので特にアウトプットされやすい模様です。

普段はAWSを使っていて、GASは数年振りだったので入門記事を模索しながら、自分なりの[テンプレートコード](https://github.com/inoue2002/linebot-gas-template)を作成しました。

▼テンプレートを使ったらカップラーメンよりも先にLINEBotができちゃう

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">僕は2&#39;30秒以内にLINEBotを構築できます。<br>※ソースコードやコンソール画面は準備した状態<br>久しぶりにGASを使う業務が来たのでテンプレ作成した<a href="https://twitter.com/hashtag/lineapi?src=hash&amp;ref_src=twsrc%5Etfw">#lineapi</a> <a href="https://twitter.com/hashtag/linedc?src=hash&amp;ref_src=twsrc%5Etfw">#linedc</a> x3 <a href="https://t.co/Ys5iIxf717">pic.twitter.com/Ys5iIxf717</a></p>&mdash; ようかん / Yosuke Inoue @LAE (@inoue2002) <a href="https://twitter.com/inoue2002/status/1353673441279238150?ref_src=twsrc%5Etfw">January 25, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

###①LINE公式アカウントを作成
[LINEDeveloperConsole](https://developers.line.biz/)こちらにいき作っていきます。
この辺りからアクセストークンを取得するあたりはどの記事を読んでも書いているので省略します。
とりあえず、友達登録とアクセストークンを発行してメモだけしておきましょう。

###②GASにソースコードをデプロイしていく
GASはみんな大好き[GoogleDrive](https://drive.google.com/)から作ることができます。　
スプレッドシートをデーターベースのように扱うこともできるので、まずはスプレッドシートを作成しましょう。スプレッドシートを開くことができたら、上のタブから`ツール`>`スクリプトエディタ`と選択していきます。
スクリプトエディタが開いたら、エディタ内に書かれているものを全て消します。そして以下
のソースコードをコピペします。

```index.js
const ACCESS_TOKEN = "先ほど取得したアクセストークンを貼り付ける";
async function doPost(e) {
  for (let i = 0; i < JSON.parse(e.postData.contents).events.length; i++) {
    const event = JSON.parse(e.postData.contents).events[i];
    const message = await eventHandle(event);
    //応答するメッセージがあった場合
    if (message !== undefined) {
      const replyToken = event.replyToken;
      const replyUrl = "https://api.line.me/v2/bot/message/reply";
      UrlFetchApp.fetch(replyUrl, {
        headers: {
          "Content-Type": "application/json; charset=UTF-8",
          Authorization: "Bearer " + ACCESS_TOKEN,
        },
        method: "post",
        payload: JSON.stringify({
          replyToken: replyToken,
          messages: [message],
        }),
      });
    }
  }
  return ContentService.createTextOutput(
    JSON.stringify({ content: "post ok" })
  ).setMimeType(ContentService.MimeType.JSON);
}

async function eventHandle(event) {
  let message;
  switch (event.type) {
    case "message":
      message = await messagefunc(event);
      break;
    case "postback":
      message = await postbackFunc(event);
      break;
    case "follow":
      message = await followFunc(event);
      break;
    case "unfollow":
      message = unfolowFunc(event);
      break;
  }
  return message;
}
//メッセージイベントの処理
async function messagefunc(event) {
  return { type: "text", text: event.message.text };
}
//ポストバックイベントの処理
async function postbackFunc(event) {
  return { type: "text", text: event.postback.data };
}
//友達登録時の処理
async function followFunc(event) {
  return { type: "text", text: "友達登録ありがとうございます!!" };
}
//友達解除後の処理
async function unfollowFunc() {
  return undefined;
}

```
貼り付けが完了したら、コードの一行目`"先ほど取得したアクセストークンを貼り付ける"`を`"ajsjkdddeifsjdksdj-1"`のように書き換えるのをお忘れなく。

`デプロイ`>`新しいデプロイ`>`デプロイ`>`警告みたいなのが出たら左下にある詳細を押して許可する`>`URLをコピー`>`LINEのコンソールのWebhookURLに貼り付ける`>`webhook`をオンにする!!


###③おうむがえしするか確認する
LINEのトークでBotに喋りかけるだけ!!


#終わりに
いかがだったでしょうか。何かわからないこととか、気になることがあればtwitter[@inoue2002](https://twitter.com/inoue2002)までご連絡ください。
できる限り相談にのらせていただきます😁
お疲れ様でした。

#AWSにも挑戦してみたい方へ
以前、AWS使ったことのない人でもLINEBotをAWSで作れるQiita記事を連載しております。是非合わせてご覧ください→[AWSLINEBotをみんなで作ろう1日目](https://qiita.com/inoue2002/items/a87df2b520f8b6e37f42)