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?

Makeを使ってちょっとスマートにLINEからスプレッドシートの値を変更する仕組みを作ってみます。

3章までは力技感ありますが、4章でちょっとスマートになります。

1. Makeを使ったオウム返しLINE Botを作る

まずは準備としてLINE Botを作ります。

こちらの記事の2章までを実施しましょう。

2. スプレッドシートを用意

スプレッドシートでこんな雰囲気の表を作ります。

スクリーンショット 2024-06-20 20.37.21.png

コピペ用

device	value	last update
ColorLED	255,0,0	2024/6/20 18:00:00
Servo	40	2024/6/20 18:00:00

念の為今回は誰でも編集可能な状態にしてます。連携するときにGoogle認証使うので編集可にしなくてもOKだと思います。

スクリーンショット 2024-06-20 20.36.50.png

3. Makeで書き込みしてみる(とりあえずスマートではない版)

とりあえず書き込みをできるようにしてみます。

オウム返しLINE BotのWatch Eventsの右側にスプレッドシートのUpdate a Rowモジュールを繋げます。

初回繋げる時はGoogle認証が入ると思います。(今回はそこの操作説明は割愛)

先ほど作成したスプレッドシートのIDを探して、シート名を指定(何も変更してなければシート1)します。

以下を設定します。

  • Row number: 3
  • Table Contains headers: Yes
  • Values:
    • decice(A): (空欄)
    • value(B): Events[].Message.Text (LINEモジュールからの変数)
    • last update(C): now(変数)

Row numberは3行目という意味ですが、現状のシートで3行目はServoになり、 スプレッドシートのセルでいうとB3のServoのvalueをLINEから送られてきた値に変更する設定を行なっています。

スクリーンショット 2024-06-21 1.17.39.png

ちなみにnowの変数は現在時間が入りますが、以下のGIFを参考に設定してみてください。

リプライメッセージも少し調整してみます。

これでRun Onceを行いLINEに話かけてみましょう。

更新されましたね。

これだけでも簡易的には使えそうな仕組みだと思います。

4. ちょっとスマートに変更してみる

これだけでも簡易的には使えそうですが、現状はデバイスがサーボ(3行目を決め打ちにしている)の値だけ変更でき、カラーLEDの値の変更は現状できません。

LINEでデバイス名と値を送ってシートの値を変更させるようにしてみます。

"ColorLED 255,0,0"とLINEに送るとColorLEDを検索して2行目の値を255,0,0に変更し、"Servo 10"とLINEに送るとServoを検索して3行目の値を10に変更するような仕組みにしてみます。

"ColorLED 255,0,0"

4-1. 変数を設定 - device

LINEのWatch EventsモジュールスプレッドシートのUpdate a Rowモジュールの間にSet variableモジュールを接続します。

以下を指定します。

  • Variable name: device
  • Variable lifetime: One cycle (ここよく分かってない。。苦笑)
  • Variable Value: {{first(split(1.events[].message.text; space))}}

Tips: Makeのsplit関数とfirst関数

Variable Valueの式の解説をします。

まずsplit()という関数があり、split(<文字列>;<区切り文字>)という使い方で特定の文字列を分割して扱うことができます。

仮にhello-worldという文字があった場合split(hello-world;-)と書くことで-で区切った前後の文字を分割して配列という形式にできます。["hello","world"]という形式になります。

さらにfirst()を使うことで配列の最初の要素を取得できます。この場合"hello"を抜き出すことができます。

この話を踏まえて、以下の書き方をすることで"Servo 10"とLINEに送られてきた文字の中のServoの部分だけを抽出できます。

スクリーンショット 2024-06-21 1.42.33.png
コピペ用: {{first(split(1.events[].message.text; space))}}

4-2. 変数を設定 - value

同じ要領で二つ目の変数を設定します。

  • Variable name: value
  • Variable lifetime: One cycle (ここよく分かってない。。苦笑)
  • Variable Value: {{last(split(1.events[].message.text; space))}}

先ほどのfirst()とは逆でlast()を指定することで配列の最後の値を取得できます。

4-3. Search Rowモジュールを追加

スプレッドシートのモジュールで行を検索するSearch Rowモジュールを追加します。
二つ目のSet variableモジュールの右に追加しましょう。

↑のスクリーンショットのように設定します。

  • Table contains headers: Yes(たぶんデフォルト)
  • Column range: A-CZ (たぶんデフォルト)
  • Filter:
    • (列指定): device(A)
    • Text operators: Equal to
    • (値指定): 先ほど設定した変数のdevice
  • Sort order: Ascending (たぶんデフォルト)
  • Order by: Row number (これで検索した行番号が出力される)
  • Field Type: Number

Set variableで設定したdeviceという変数が使えるようになっているはず...

4-4: Update Rowモジュールの更新

スプレッドシートのUpdate Rowモジュールを先ほど設定した変数などに設定変更をします。

  • Row Number: (Search Rowからの変数の)Row number
  • Value(B): (SetVariableで設定した変数の)Value

4-5: Send a Reply Messageの内容も更新

ここはやらなくても大丈夫ですが、LINE Botの見栄えて的に更新しておきます。

完成

Makeのシナリオはこんな感じです。

ColorLED 255,10,0などとLINEで送るとColorLEDの行を検索して、値を変えてくれるようになりました。

ちょっとスマートですね。

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?