Makeを使ってちょっとスマートにLINEからスプレッドシートの値を変更する仕組みを作ってみます。
3章までは力技感ありますが、4章でちょっとスマートになります。
1. Makeを使ったオウム返しLINE Botを作る
まずは準備としてLINE Botを作ります。
こちらの記事の2章までを実施しましょう。
2. スプレッドシートを用意
スプレッドシートでこんな雰囲気の表を作ります。
コピペ用
device value last update
ColorLED 255,0,0 2024/6/20 18:00:00
Servo 40 2024/6/20 18:00:00
念の為今回は誰でも編集可能な状態にしてます。連携するときにGoogle認証使うので編集可にしなくてもOKだと思います。
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から送られてきた値に変更する設定を行なっています。
ちなみに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の部分だけを抽出できます。
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
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の行を検索して、値を変えてくれるようになりました。
ちょっとスマートですね。