2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINEミニアプリAdvent Calendar 2024

Day 15

24日目にLINEミニアプリが完成する初心者 ── Day15. スプレッドシートへの出力

Last updated at Posted at 2024-12-14

はじめに

前回は「24 日目に LINE ミニアプリが完成する初心者 ── Day14. 問い合わせメッセージ」と題して、Flex Message を使用した問い合わせ機能を完成させました。

今回は、問い合わせのあった内容をスプレッドシートへ出力していきたいと思います。

スプレッドシートの作成

はじめに前回同様スプレッドシートを作成します。

今回は「LINE お問い合わせ」という名前でスプレッドシートを作成しました。

以下のヘッダーには以下を設定します。

  • A1: 日時
  • B1: ユーザ ID
  • C1: カテゴリ
  • D1: 内容

以下のようになりました。

image.png

Google Apps Script の作成

スプレッドシートの作成が完了したら、GAS プロジェクトを作成します。

上部のメニューから「拡張機能」>「Apps Script」を選択しましょう。

image.png


プロジェクト名もスプレッドシートに合わせて「LINE お問い合わせ」としました。

コードは以下の通りです。

function doPost(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = JSON.parse(e.postData.contents);

  const timestamp = new Date();
  const { userId, category, details } = data;

  sheet.appendRow([timestamp, userId, category, details]);

  return ContentService.createTextOutput(
    JSON.stringify({ status: "success" })
  ).setMimeType(ContentService.MimeType.JSON);
}

GAS 側の実装はシンプルで、timestamp, userId, category, detailsをスプレッドシートに出力するのみの内容です。

GAS のデプロイ

URL を取得するため GAS でデプロイを行います。

右上の「デプロイ」ボタンから「新しいデプロイ」をクリックします。

image.png


種類の選択は「ウェブアプリ」を選択します。

image.png


デプロイの情報を入力し「デプロイ」を押しましょう。

image.png

image.png

デプロイが完了すると最後にデプロイ ID とウェブアプリの URL が表示されますのでコピーしておきましょう。

問い合わせ内容送信を実装

GAS 側の準備が完了したので、問い合わせ内容を GAS へ送信する機能を実装していきます。

環境変数の設定

先ほどコピーした Google Apps Script の URL を環境変数として設定しておきます。

.env.localファイルに以下を追加します。

NEXT_PUBLIC_GOOGLE_SCRIPT_URL_INQUIRY=your-script-url

Netlify にもline-liff-v2-starter配下のターミナルで以下のコマンドを入力して、環境変数を設定しておきます。

$ netlify env:set NEXT_PUBLIC_GOOGLE_SCRIPT_URL_INQUIRY "your-script-url"

API に処理を追加

それでば問い合わせ内容の送信処理を追加していきます。

まずはwebhook.tsに GAS の URL へ POST する関数を追加します。

src/nextjs/pages/api/webhook.ts
async function saveToSpreadsheet(data) {
  await fetch(process.env.NEXT_PUBLIC_GOOGLE_SCRIPT_URL_INQUIRY, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(data),
  });
}

この送信処理を今回は問い合わせお礼メールを送信する前に実行させるため、以下の部分へ追加を行います。

src/nextjs/pages/api/webhook.ts
      else if (
        userState.has(userId) &&
        userState.get(userId).step === "detailsInput"
      ) {
        const state = userState.get(userId);
        const category = state.category;
        const details = userMessage;

        // Google Apps Script にPOSTリクエスト
        await saveToSpreadsheet({ userId, category, details });

        userState.delete(userId);

        await sendReply(event.replyToken, [
          {
            type: "text",
            text: "お問い合わせいただきありがとうございます!ご回答には通常2営業日以内に返答いたします。なにかご不明点があれば、お気軽にお問合せください!",
          },
        ]);
      }

これで問い合わせ内容の送信処理の実装は完了です!

デプロイ

いつも通り、line-liff-v2-starter`配下のターミナルで以下のコマンドを入力してデプロイを行います。

$ netlify deploy --build --prod

動作確認

LINEから問い合わせを実行してみましょう。

問い合わせ内容を入力しお礼メッセージが送信されたらスプレッドシートを確認します。

問い合わせ内容がスプレッドシートに反映されていれば完了です!

image.png

まとめ

ここまでで、問い合わせ内容のスプレッドシートに出力が完成しました。

次回からは、新機能として顧客管理を実装していきたいと思います。

残りは 9 日!
気になる方は是非フォローやカレンダー購読をお願いします:star:

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?