【改善済み】DialogflowからMicrosoft Flow(Azure Logic Apps)を呼ぶ際の注意点


※2019/6/18 追記
本記事の内容ですが、Dialogflow側のアップデートで改善済みのようです。
Microsoft Flow/Logic AppのURLをDialogflowにそのまま貼っても問題なく動くようになったようです。


前置き

Googleが提供する自然言語処理作成プラットフォームのDialogflowでは、Fulfillmentという機能で外部のWeb APIを呼び出し、インテント内でその結果を使うことができます。

また、Microsoft Flow(またはAzure Logic Apps)ではノンコーディングでHTTPリクエストをトリガーとした簡易プログラムを作ることができます。

そのためDialogflowからMicrosoft Flowを呼び出すことで、簡単に自然言語処理を含んだ処理をノンコーディングでつくることができる…のですが、ふつうにやると、エラーが出てハマります。

本記事は、その回避方法です。

Dialogflow+Microsoft Flowで起きるエラー

Dialogflowでインテントを設定し、そこから呼び出すことを想定します。
問題は、DialogflowにMicrosoft FlowのURLを設定する部分です。


以下のようにMicrosoft FlowからコピーしたURLを、

このようにDialogflowのFulfillmentにそのまま貼っただけでは、呼び出し時にDialogflowで以下のようなエラーが出てしまいます。

Microsoft Flowから返されるメッセージ↓

��{"error":{"code":"AuthorizationFailed","message":"You do not have permissions to perform action 'run' on scope '/triggers/manual/paths/'. Verify you are making the request with the appropriate HTTP method. See http://aka.ms/logic-trigger for details."}}

DialogflowのDiagnostic infoで確認できるレスポンス情報↓

{
  "responseId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "queryResult": {
    "queryText": "60",
    "action": "xxxx",
    "parameters": {
      "hoge": 0,
    },
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "intent": {
      "name": "projects/xxxx/agent/intents/xxxxxxxx",
      "displayName": "xxxxx"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "webhook_latency_ms": 739
    },
    "languageCode": "ja"
  },
  "webhookStatus": {
    "code": 16,
    "message": "Webhook call failed. Error: 401 Unauthorized"
  }
}

なぜか、 401の認証エラー が出ます。
Microsoft Flowに作ったHTTPトリガーのフローは認証不要でアクセスできるはずなのに…。

解決策

答えは以下にありました。

Using webhooks on dialogflow to Azure logic apps - stackoverflow

このように、URLの中にある「%2F」→「/」に変更してあげます。

これにより、おかしな認証エラーが出ずにDialogflowとMicrosoft Flowを連携させることができます。

補足

のちほどDialogflow+Microsoft FlowでLINE Botを作成する記事を出すので、DialogflowとMicrosoft Flowおよびその組み合わせについての詳細な解説はそちらをご参照ください。
→書きました:賢いLINE Botを完全無料&ノンコーディングで開発する(Dialogflow+Microsoft Flow)