第1回: Power Automate & Microsoft Lists で 時刻表LINE Botを作る (1) - データ準備 - MoreBeerMorePower
第2回: Power Automate & Microsoft Lists で 時刻表LINE Botを作る (2) - メインのロジック作成 - MoreBeerMorePower
第3回: Power Automate & Microsoft Lists で 時刻表LINE Botを作る (3) - LINE からのメッセージ受信と応答 - MoreBeerMorePower
Power Automate と Microsoft Lists で作る時刻表 LINE Bot、第二回はメインのロジック作成です。
ここでは LINE で入力された文字列から、前回作成した時刻表のうち、最も時間が近いものを抽出し、返却する処理を作成します。
作成時のTIPS
実際には 「LINE からのメッセージを受信するために HTTPリクエストの受信 トリガーを利用して、その中からメッセージを取ってきてー」という処理を最初に行いますが、ロジックを作る時点ではボタンフローで仮組みすることが多いです。
その場合、トリガーから得られる、後続処理で必要な情報を最初に [ 作成 ]アクション (Compose) に設定しておくとトリガーを入れ替えたときに後続処理が影響を受けにくくなります。
ここでは文字列ですが、トリガーで得られる情報がオブジェクト型の場合でも同様です。[ 作成 ] にテスト用のオブジェクトを入れておいて、後続処理では [ 作成 ] の結果に基づいて書いていきます。
最も近い時刻の1行を取得して結果の時刻を得る処理
メインになる処理は リストから、行き/帰りが一致していて かつ入力時刻に最も近い1行を取得することです。
メッセージの分割
まずは入力されたテキストから、行き/帰り と 時刻を分離します。この時ついでなので時刻に 2020/12/30 をくっつけて日時型にしておきます。
2つを取得するために、[ 作成 ] アクションを続けて2つ追加しましょう。
文字列の分割には split関数 を使います。
半角スペースで区切られている想定なので、半角スペースで分割するために split( output('Compose') , ' ' )
と書きます。
行き/帰りは分割の後ろ側にくるので last(split( output('Compose') , ' ' ))
を [ 作成 ] の中に入れましょう。
一方の時刻は分割の前側なので、first(split( output('Compose') , ' ' ))
となります。
これで日本時間での時刻と、行き/帰りをメッセージから取得できました。
タイムゾーン変換
Lists の日時型の列ではUTCでデータが入っています。これにより特定の時刻のデータを抽出するためには、メッセージの時刻もUTCに変換しておく必要があります。
[ タイムゾーンの変換 ] アクションを追加して、ベースになる時刻として先ほどの日本時間での時刻を入れた [作成] アクションの結果を指定します。
変換元タイムゾーンにはUTC+9を、変換先のタイムゾーンにはUTCを指定します。最後にフォーマットですが yyyy-MM-ddTHH:mm:ssZ
をカスタム値として設定してください。
リストからのアイテム取得
ここまでで UTCでの時刻と行き/帰りが得られたので、これらの情報をもとにリストからアイテムを取得します。
(フィルタークエリ部分は「試験的機能」をONにしておくともう少し簡単に作れます)
並び替えは、時刻を入れている列をasc (昇順)とします。
これで入力された時刻以降の最も近い1件が取得できました。
LINE で返却するためのタイムゾーン変換
さて、ここで取得できた時刻はUTCです。これをユーザーに返すわけにはいかないので、JSTに戻しておきましょう。
再び [ タイムゾーンの変換 ] アクションを挿入し、 ベースの時刻に first(outputs('Get_items')?['body/value'])?['time']
を指定します。
フォーマットには HH:mm
を指定しておきましょう。これで24時間表示の時刻になります。
おわり
これでメッセージからリストにある時刻表を検索し、もっとも近い時刻の1件を返す 一連の処理が完成しました。
次回は LINE Botとの接点部分を解説します。