LoginSignup
1
1

More than 3 years have passed since last update.

Bot Framework SDK for Javaで作ったWebアプリケーションとローカル環境で会話する

Last updated at Posted at 2021-05-03

Botを開発できるBot Frameworkには現在4言語のSDKが用意されています。

スクリーンショット 2021-05-03 12.53.12.png

Javaはまだプレビューですが、GitHubにサンプルがあったので試してみました。

スクリーンショット 2021-05-03 12.56.07.png

echo-botを起動する

試したのは入力したメッセージをオウム返しする「02.echo-bot」です。このサンプルはSpring Bootで実装されています。

BotBuilder-Samplesをクローンして、「02.echo-bot」のフォルダを開きます。

git clone https://github.com/microsoft/BotBuilder-Samples.git

ビルドして

mvn clean package

実行します。

java -jar /target/*.jar

すると以下の画面が表示されます。

スクリーンショット 2021-05-03 14.57.43.png

Emulatorを準備する

今回はローカル環境で試すため、Emulatorをダウンロードします。

https://github.com/Microsoft/BotFramework-Emulator/releases/tag/v4.5.2
スクリーンショット 2021-05-03 15.06.10.png

実行すると以下のような画面が表示されます。

スクリーンショット 2021-05-03 15.02.58.png

画面左下の設定(ギアマークのアイコン)をクリックします。

スクリーンショット 2021-05-03 15.16.46.png

ngrokをダウンロードします。

スクリーンショット 2021-05-03 15.06.58.png

「Path to ngrok」にダウンロードしたngrokの実行ファイルのパスを指定します。

スクリーンショット 2021-05-03 15.28.25.png

Emulator起動後に表示された最初の画面を再度開いて、「Open Bot」ボタンでSpring BootのサンプルURLを設定します。

スクリーンショット 2021-05-03 15.03.31.png

設定は以上です。Emulatorにメッセージを入力するとオウム返しで同じメッセージが返ってきます。

スクリーンショット 2021-05-03 15.14.30.png

ハマったこと

最初ローカル環境で実行する際にはngrokは不要なのかなと(勝手に)思いこんでいて、「Path to ngrok」を空にしていました。そしてEmulatorでメッセージを入力すると以下のエラーが出て、原因がよくわからなくて困っていました。

POST 500 directline/conversations/<conversationId>/activities

Spring Bootでは以下のログが出ていて、ポート番号が異なるので、ngrokでトンネルしないだめなのかな?と試したところうまくいきました。

ERROR 11362 --- [          Bot-1] c.m.b.i.AdapterWithErrorHandler          : onTurnError

java.util.concurrent.CompletionException: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:62833
        at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:331) ~[na:na]
        at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:346) ~[na:na]
        at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:632) ~[na:na]
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) ~[na:na]
        at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088) ~[na:na]
        at retrofit2.CompletableFutureCallAdapterFactory$ResponseCallAdapter$2.onFailure(CompletableFutureCallAdapterFactory.java:123) ~[retrofit-2.5.0.jar!/:na]

以下のドキュメントをベースに進めていましたが、ngrok周りの設定が細かく出てこないのでハマってしまいました。

これをAzureのBot Serviceにデプロイしたいけど方法がわからない...と思っていたら以下に書いてありました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1