🦜

Postman Flowsで作るノーコードLINE Bot(API連携編)

に公開

以前、Postman Flowsを使ってLINE Botを作成してみました。

https://zenn.dev/line_dc/articles/postman-flows-linebot

ここではシンプルなオウム返しのLINE Botを作成しましたが、やはりPostmanといえばAPIのテストツールなので、他のAPIと連携したLINE Botを作成してみたいと思います。

今回はその連携先のサンプルとして、Difyを使ってみます。Difyでは、UI上でチャットボットだけではなく、APIを使用したチャットも作成することができます。

前提条件

  • Difyのアカウント(Cloud版、Self-hosted版どちらでも可)
  • Postmanのアカウント
  • LINE Developersのアカウント

あらかじめ、以下の記事のオウム返しのLINE Botを作成している前提で進めます。

https://zenn.dev/line_dc/articles/postman-flows-linebot

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に追加していきます。

任意のコレクションを作成したら、以下のリクエストを追加します。

ヘッダータブに以下の情報を追加します。

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も簡単に作成できるはずなのでぜひ試してみてください!

LINE Developer Community

Discussion