Slide 1

Slide 1 text

Postman Flowsで作るAPI連携LINE Bot Koki Miura(@k_miura_io)

Slide 2

Slide 2 text

自己紹介 • 三浦 耕生(こうき) • Acallのバックエンドエンジニア • JAWS UG名古屋&神戸 運営 • Cloudflare Meetup 名古屋 運営 @k_miura_io koki.miura05

Slide 3

Slide 3 text

アジェンダ • 自己紹介 • イントロダクション • Postman Flowsについて • LINE botの紹介 • デモ

Slide 4

Slide 4 text

API Night Nagoya初開催!

Slide 5

Slide 5 text

2024年9月 Serverless Days Tokyo

Slide 6

Slide 6 text

Postman API Night を名古屋に誘致

Slide 7

Slide 7 text

2日目のワークショップにて

Slide 8

Slide 8 text

ワークショップ のシナリオ

Slide 9

Slide 9 text

Postman Flowsを始めて触った

Slide 10

Slide 10 text

Postman Flowsとは? • Postmanで作成したAPIコレクションのリクエストを組み合わせて ノーコードでワークフローが作成できるツール • 作成したワークフローをWebhookで起動することができる

Slide 11

Slide 11 text

ん、Webhook?

Slide 12

Slide 12 text

LINE botって? • LINE上でメッセージのやり取りを行うbot • 自前でWebhookサーバーを立てることでLINE のプラットフォームからWebhookが飛んでくる • サーバーは受け取ったイベントに対してLINE のMessaging APIを使って返信を行う • Webhookなのでサーバーのレスポンスに決ま りがない

Slide 13

Slide 13 text

これができる!

Slide 14

Slide 14 text

というわけで作ってみた • BotのHelloWorld的存在のオウム返しボット • ユーザーが送ったメッセージをそっくりそのまま返す • テキストメッセージ以外(画像、スタンプなど)はオウ ムがえしに対応しないので、そのメッセージも返すよ うにしている

Slide 15

Slide 15 text

DEMO

Slide 16

Slide 16 text

全体のフロー

Slide 17

Slide 17 text

条件分岐 • メッセージの条件分岐にはFQL(Flows Query Language)を使用 • 条件文を記述することで下部のデータの 方向を決める • FQLは独自の言語なので、迷ったら Snippetsから選択して書き換えるのもあり (この条件もSnippetsを参照)

Slide 18

Slide 18 text

Webhookのボ ディをAPIのリク エストパラメー タにいれる • リクエストパラメータにWebhookから受け取る値を入 れたいときは、リクエストの中に変数を設定しておく • ここではreplyTokenとmessageを変数として設定して いる

Slide 19

Slide 19 text

フローから来たJSONから値を取り出す • APIのリクエストで設定した変数に入力され たWebhookから来たJSONを流し込むと変数 が格納される • 各変数に格納したい値をJSONのキーを直 接指定するとその値がリクエストに使われる • CHANNEL_ACCESS_TOKENはコレクション の変数として設定しているのでここには線を つなげていない

Slide 20

Slide 20 text

更に改良する • Postmanを使っているので他のAPIと連携したLINE Botにアレンジをしていく(タイトル回収) • GoogleのVision APIと連携してユーザーが送信し た画像に映り込んだロゴの会社を検出するボット にアレンジしていく

Slide 21

Slide 21 text

全体のフロー

Slide 22

Slide 22 text

追加で使用しているAPI • 自作API • Vision API

Slide 23

Slide 23 text

自作API • LINEのAPIで画像取得をするとバ イナリで取得されるため、Flowsで 扱うにはbase64でエンコードしない といけない • Flows内でTypeScriptを使ってエン コードをやろうとしたが、ワークフ ローの規模がでかいのか落ちた (アップデートに期待) • 仕方なくCloudflare Workersで画像 取得APIを叩いて取得したレスポン スをbase64で返す自前APIを用意

Slide 24

Slide 24 text

Vision API • よく知られるプロダクトのロゴを画像から検出 するGoogleのAPI • 入力画像をbase64形式で指定できるのが直 感的で、Flows内でリクエストもやりやすい • 右のように検出範囲を画像で出力できるが、 今回は検出したプロダクト名をテキストに返す ように修正

Slide 25

Slide 25 text

DEMO2

Slide 26

Slide 26 text

変数を格納 • タスクの出力を他のタスクで使いまわした いときは変数に格納すると確実 • 「Create Variable」ブロックをStartブロック につないでおくことで他のタスクで Webhookのボディを使い回せる

Slide 27

Slide 27 text

変数を使う • 「Get Variable」ブロックを配置し、使用したいタスクに 向けて線を引くと格納した変数を使い回すことができる • ただフローを流すだけじゃない方法で使いたい値を呼び 出せるので覚えておくと便利!

Slide 28

Slide 28 text

まとめ • Postman Flowsを使うことでWebhookを使ったイベントドリブンのワーク フローを組むことができる • LINE Messaging APIのようなWebhookのイベントから受け取る値を使う 前提のAPIの動作確認をする時に使える • 慣れないと変数の扱いとかで詰まるが、そこさえわかってしまえばアイ デア次第でいろんなワークフローを組めるようになるはず

Slide 29

Slide 29 text

今回紹介したデモの記事 https://bit.ly/3YZCrLj

Slide 30

Slide 30 text

END