Postman Flowsで作るノーコードLINE Bot(API連携編)
以前、Postman Flowsを使ってLINE Botを作成してみました。
ここではシンプルなオウム返しのLINE Botを作成しましたが、やはりPostmanといえばAPIのテストツールなので、他のAPIと連携したLINE Botを作成してみたいと思います。
今回はその連携先のサンプルとして、Difyを使ってみます。Difyでは、UI上でチャットボットだけではなく、APIを使用したチャットも作成することができます。
前提条件
- Difyのアカウント(Cloud版、Self-hosted版どちらでも可)
- Postmanのアカウント
- LINE Developersのアカウント
あらかじめ、以下の記事のオウム返しのLINE Botを作成している前提で進めます。
Difyのchat-messages API
今回使用するAPIのリクエストはCurlコマンドだと以下のようになります。
curl --location --request POST 'https://api.dify.ai/v1/chat-messages' \
--header 'Authorization: Bearer ENTER-YOUR-SECRET-KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"inputs": {},
"query": "eh",
"response_mode": "streaming",
"conversation_id": "1c7e55fb-1ba2-4e10-81b5-30addcea2276",
"user": "abc-123"
}'
また、レスポンスは以下のようになります。
{
"event": "message",
"message_id": "9da23599-e713-473b-982c-4328d4f5c78a",
"conversation_id": "45701982-8118-4bc5-8e9b-64562b4555f2",
"mode": "chat",
"answer": "iPhone 13 Pro Maxの仕様は次のとおりです:...",
"metadata": {
"usage": {
"prompt_tokens": 1033,
"prompt_unit_price": "0.001",
"prompt_price_unit": "0.001",
"prompt_price": "0.0010330",
"completion_tokens": 128,
"completion_unit_price": "0.002",
"completion_price_unit": "0.001",
"completion_price": "0.0002560",
"total_tokens": 1161,
"total_price": "0.0012890",
"currency": "USD",
"latency": 0.7682376249867957
},
"retriever_resources": [
{
"position": 1,
"dataset_id": "101b4c97-fc2e-463c-90b1-5261a4cdcafb",
"dataset_name": "iPhone",
"document_id": "8dd1ad74-0b5f-4175-b735-7d98bbbb4e00",
"document_name": "iPhone List",
"segment_id": "ed599c7f-2766-4294-9d1d-e5235a61270a",
"score": 0.98457545,
"content": "\"Model\",\"Release Date\",\"Display Size\",\"Resolution\",\"Processor\",\"RAM\",\"Storage\",\"Camera\",\"Battery\",\"Operating System\"\n\"iPhone 13 Pro Max\",\"September 24, 2021\",\"6.7 inch\",\"1284 x 2778\",\"Hexa-core (2x3.23 GHz Avalanche + 4x1.82 GHz Blizzard)\",\"6 GB\",\"128, 256, 512 GB, 1TB\",\"12 MP\",\"4352 mAh\",\"iOS 15\""
}
]
},
"created_at": 1705407629
}
このリクエストをPostmanに追加していきます。
任意のコレクションを作成したら、以下のリクエストを追加します。
- リクエスト名: Send Chat(任意の名前でOK)
- メソッド: POST
- URL: https://api.dify.ai/v1/chat-messages
ヘッダータブに以下の情報を追加します。
Key | Value |
---|---|
Authorization | Bearer 【あらかじめ作成したDifyのAPIキー】 |
ボディタブでは Raw
を選択し、以下のJSONを追加します。
{
"inputs": {},
"query": "{{query}}",
"response_mode": "blocking",
"conversation_id": "",
"user": "line"
}
{{query}}
はLINE Botから受け取ったメッセージを格納する変数です。
この変数は、Postman FlowsでLINE Botから受け取ったメッセージを格納するために使用します。
Postman Flowsの作成
これでDifyのAPIをPostmanに追加できました。
次に前回作成したオウム返しのLINE Botを改造して、DifyのAPIを使用するようにします。
変数の作成
Postman Flowsは基本的にはイベントのオブジェクトが流れていくので、その過程でAPIが呼び出されたらそのAPIのレスポンスが次のブロックに渡ることになります。そうなると、最終的にLINEのMessaging APIのReply Messageを使う時に必要なreplyTokenがこのままでは渡って来ません。
そこで、オウム返しのフローを少し変えてWebhookのリクエストボディを変数に格納して、Reply MessageのブロックでいつでもreplyTokenを参照できるようにします。
オウム返しのフローを開き、Startブロックから線を引張って、「Create Variable」ブロックを追加します。
ブロックを追加したら、変数名を webhookBody
に変更します。
たったこれだけで、Webhookのリクエストボディが webhookBody
という変数に格納されて、他のAPIを呼び出しても後続のブロックでreplyTokenを参照できるようになります。
DifyのAPIを呼び出す
次に、DifyのAPIを呼び出すためのブロックを追加します。
StartブロックからReply Messageブロックの間に引っ張ってた線を削除した後、新たにStartブロックから線を引っ張って「HTTP Request」ブロックを追加します。
追加したらブロックで使用するDifyのAPIのリクエストを選択します。
リクエストを選択したら、更にStartブロックから query
に線を引っ張ります。
線を引っ張ると、イベントで流れ込んで来るオブジェクトを参照できるようになります。
query
にはそれぞれ以下の値を設定します。
変数名 | 値 |
---|---|
query | events.0.message.text |
LINEのMessaging APIを呼び出す
DifyのAPIを呼び出した後、LINEのMessaging APIを呼び出すためのブロックを追加します。
DifyのHTTP Requestブロックの Success
からMessaging APIのリクエストブロックの Send
と変数 message
に線を引っ張ります。
message
には以下の値を設定します。Postman FlowsでAPIをリクエストした場合、 レスポンスは body
という変数に格納されます。なので、参照する時には body.answer
という形で参照します。
変数名 | 値 |
---|---|
message | body.answer |
replyToken
には、先ほど作成した webhookBody
から events.0.replyToken
を参照します。
そのため、 replyToken
に線を引っ張って、 Get Variable
を選択します。
以下のような状態になればwebhookBodyからreplyTokenを取得できるようになります。
以上で、DifyのAPIを使用したLINE Botのフローが完成しました。
フローを反映するために右下のペインにあるWebhookの項目にある「Publish」をクリックします。
動作確認
それでは、実際にLINE Botにメッセージを送信してみましょう。
以下の通りBotにメッセージを送信すると、DifyのAPIを使用してメッセージが返信されます。
まとめ
今回はPostman Flowsを使ってDifyのAPIを使用したLINE Botを作成してみました。
Postman Flowsは今回のように複数のAPIを組み合わせたワークフローを作成するのに非常に便利なことがおわかりいただけたと思います。
他のAPIをコレクションに追加すれば、アレンジ次第でAPI連携するLINE Botも簡単に作成できるはずなのでぜひ試してみてください!
Discussion