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

【Make】この商品はいつくるの?LINEが商品の納品日を教えてくれる。

Last updated at Posted at 2025-05-29

これいつ入ってくるんだっけ?

みなさんこんにちは。

北海道の某小売り業で朝から働くおじさん(主任)です。

普段から働いていて、部下からよくこんなことを言われるのです。
「主任!この商品Aがないよ!次いつ入ってくるの!?」
そう言われると大体
「ちょっとまって!今調べてくるわ!」

こんなやり取り日常茶飯事です。

調べるって言っても、パソコン(またはタブレット)のある場所まで行って、立ち上げて、発注画面を開くためにログインして、発注確認して、現場に戻る・・・。

1回ならいいけど、五月雨式に言われると結構手間がかかります。 あと、歩くのが疲れる。

なので、LINEBotを活用して、
「商品名を聞いたら、その商品の発注内容を返してくれる」
そんなものを作ろうと思います。

素人だから、いろいろ苦労すると思いますが、まずは手を!頭を!動かそう!

完成品

line完成.gif

使用ツール

※Makeのフリープランの場合、1か月の利用制限があるのでご注意を!

Make全体の構造

構造全体.png

この処理一連の流れを、Scenarioシナリオ)と言います。

作成開始

Googleスプレッドシートの作成

まずデータの素となる発注表を作成します。
サンプルとしてこんな感じ。

スプレッドシート1.png

実際の発注画面から似たような形で出力が可能です。
データは出力した日から1週間分です。実際の発注画面も1週間分の表示しかできないため、この形をフォーマットとします。

Scenarioの作成

LINEトークで商品名を打ち、同じ商品があるかを検索し、あった場合はその商品の1週間分の発注を出力し、ない場合は存在しない旨を出力します。

1.トーク内容から商品名を探す

まず、LINEのトーク内容から、Googleスプレッドシートの商品名(A列)を探します。Googleスプレッドシートモジュールの中身は

こんな形で、商品を探す際の条件を加えます。条件として、equal to(完全一致)にしたいところですが、ここでは探しやすいようにContains(部分一致)にしました。Containsにした理由は後述します。

2.条件分岐させる

一つも該当しない場合と区別するために、一致した件数を取得します。ここでは、Flow Control→Array aggregatorモジュールを使用します。

このモジュールを活用することで、一致した商品名を配列化してくれます。そして、その配列の要素数(Total number of bundles)を取得することで、件数を求めることが出来ます。

↑Routerを用いて分岐させる

↑左:0件の場合 右:1件の場合

見つかった場合と、見つからなかった場合の条件を分岐させます。先ほど取得した件数が1の時は、
入荷日1→個数
入荷日2→個数
入荷日3→個数

となるように出力させます。また、0件の場合は「その商品はないようです・・・。」

と出力させます。

これで基本ベースは完成になります。

line2.gif

↑動作

色々なパターンを考える

このままでも確かに使うことは可能ですが、商品名が似たようなパターン(りんごとりんご酢)の場合や、そもそも商品名が長すぎてトークを打つのに時間がかかってしまう場合があります。そこで、商品名の選択肢を表示させ、その選択肢をタップすることで、求めたい商品の発注状況を表示できるようにしよう。

似たような商品名を載せたスプレッドシートになります。A、AA、AB、Cのパターンを入れてあります。

スプレッドシート2.png

このパターンを考慮し、LINEトークで打った内容がGoogleスプレッドシートの商品名の文字列を含む場合も条件分岐させます。このために、equal to(完全一致)ではなく、Contains(部分一致)にしたというとになります。

件数が2件以上見つかった場合の条件分岐をさせます。


↑Greataer thanは、〇〇以上大きい になります。

2件以上候補に出た場合、LINEからFlex messageを送信し、ユーザーに発注を表示したい商品を選ばせる形にします。

  • LINE Flex messageとは、複数のブロックを自由に組み合わせて、パネル型のメッセージを作成できる機能です。ブロックにはテキストやボタン、画像や動画を設定できます。色や大きさもカスタマイズできるので、イメージに合わせて柔軟にメッセージを作れるのが特徴です。
  • LINE Developersが提供するFlex Message Simulatorを使うと、メッセージを実際に送信しなくても、描画された状態を確認できます。

LINE Flex messageを使うために、HTTPモジュール→Make a requestを使います。
モジュールの設定の参考画像を載せておきます。

Bearerとチャネルアクセストークンの間には、半角スペースが必要です!

右画像のRequest contentにFlex messageを送信するためのJSONを打ち込みます。先ほど紹介したFlex Message Simulatorを使って作成するのがオススメ。
実際に自分が打ち込んだJSONを貼っておきます。

{
  "to": "{{LINE.events[].source.userId}}", 
  "messages": [
    {
      "type": "flex",
      "altText": "発注商品を選択してください",
      "contents": {
        "type": "bubble",
        "body": {
          "type": "box",
          "layout": "vertical",
          "contents": [
            {
              "type": "text",
              "text": "発注商品を選んでください",
              "weight": "bold",
              "size": "lg",
              "margin": "md"
            },
            {
              "type": "separator",
              "margin": "md"
            },
            {
              "type": "button",
              "action": {
                "type": "message",
                "label": "{Googleスプレッドシートの商品名を選択}",
                "text": "{Googleスプレッドシートの商品名を選択}"
              },
              "style": "primary",
              "margin": "md"
            }
          ]
        }
      }
    }
  ]
}

更に実行する前に、Makeで実行タイミングを設定する必要があります。
画面左下の「Immediately as data arrives」をONにして、「OK」を選択します。もし画面左上にキューに関する表示がされたら、今回は「Delete old data」で削除して大丈夫です。設定できたらScenarioを保存します。

RUN.png

そしてScenarioを有効化します。

ONにしよう.png

この設定をすることで、LINEにイベント(商品名を打つ)が発生したら、常にこのScenarioが起動するようになります。実はこの設定が大事!

Flex messageを使った際の処理は下図のようになります。


このような形で、選択した商品の発注状況を返してくれます。仮にABの品名がかなり長い商品名だったとしても、タップするだけで打てれば楽ですよね!

ちなみに、Scenarioの処理としては、

疑似ループ.png

↑Scenario処理の図

①LINEで商品名を入力
②Routerで条件分岐し、2件以上候補が出た場合上のHTTPモジュールへ処理が進む。
③ここで候補の商品名すべてがFlex message で返ってきて、処理が終了
④Flex messageの選択肢をタップすることで、タップした商品名が入力される
⑤条件分岐の際に、タップした商品名1件が見つかり、下の分岐へと進む。
⑥見つかった商品の発注状況が返ってくる。

先ほど実行タイミングを設定したことで、③で処理が終了してしまうが、④で再びScenarioが始まるので、疑似的なループのような処理になります。

課題と反省点

似たような商品名の場合ですが、よっぽど似てない限りは正しく動作してくれます。が、先ほど紹介した「りんご、りんご酢」のパターンでりんごを選択してしまうと、先ほどのScenario処理の図⑤で再び2件以上の候補が見つかってしまうので、またHTTPモジュールへと進み、Flex messageが返ってきます。結果として発注状況を返す処理に進むことができません。

lineエラー.gif

商品とJANコードのような判別する何かと関連付けたりとか・・・いろいろ方法はありそうですね。考えることはまだまだ多い!

最後に

今回はLINEBotを用いてGoogleスプレッドシートにアクセスさせたり、Flex messageを使ってみましたが、Makeは奥が深い!モジュールも沢山あるし、やれること無限大なんだろうなーと感じました。

また、今回初めて生成AIを使って情報収集してみましたが非常に便利で、なんで今まで使ってこなかったんだろう?と後悔しています。(笑)
これから世の中の便利なツール生かして、デジタルおじさんになれるよう頑張っていきます。

ここまで見ていただき、ありがとうございました!

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