LoginSignup
1
1

More than 5 years have passed since last update.

Android で Watson Assistant(旧Conversation)

Last updated at Posted at 2019-02-28

gradleの設定
android studioの場合
gradel(App.module)へ下記を追加

implementation 'com.ibm.watson.developer_cloud:android-sdk:0.5.0'
implementation 'com.ibm.watson.developer_cloud:java-sdk:6.14.0'

0.5.0の方は無くても動くようです。

通信がありますので、AndroidManifest.xml へ下記を追記してください。
<uses-permission android:name="android.permission.INTERNET" />

簡単のため、同期通信でやりますので通信処理の前にNetworkOnMainThreadExceptionを
回避するため、以下の記述を追加。

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = 
        new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

Watson Assistant にはv1とv2があります。
それぞれ使用するAPIが違います。まずどちらのバージョンを使用するか設定画面で確認してください。
以下v1で運用する場合の説明となります。

[API Key]
認証が少しややこしいです。
以前はusername, passwordで認証していたようですが、現在はIAMに仕様が変わりAPIキーにて認証を行います。
watsonの設定はIBM Cloudのダッシュボードから行え、対象サービス(Assistant)の設定ページでIAMキーを確認できます。
このキーを使って認証しますので、他人に使われると、あなたのアカウントに課金される可能性があります。

[EndPoint]
IAMキーとセットで使われるのが、EndPointです。
アクセスするURIなのですがAssitantの場合は複数 候補があります。
分からなくなったら、設定ページで確認できます。
サーバーがワシントンDCの場合
https://gateway-wdc.watsonplatform.net/assistant/api
となります。

[WorkSpace]
これがどこをどう探しても見つからず苦労しました。
IBMのハンズオンでは設定ページに記載があることになっていますが、現在のページにはその欄は無くなっており、確認できません。
Create a skill -> 対象のインスタンス と進むと、Assistantの会話を構成するツールが起動します。
その時のブラウザ上のURIの中にWorkSpaceIDが潜んでいます。
~workspaces/ ここ /build~ にあります。

追記: 作ったskillを選ぶ画面の各スキルの枠の右上 3点ドット -> View API Detail で確認できました。

簡単なサンプル

SampleAssistant.java
private static final String WORKSPACE_ID = "";
private static final String IAM_Key = "";
private static final String URI = "";

~中略~

String sendMessage = "こんにちわ";  //ワトソンへ送信する文字列
IamOptions iamOptions = new IamOptions.Builder().apiKey(IAM_Key).build();
Assistant service = new Assistant("2018-09-20", iamOptions);
service.setEndPoint(URI);

InputData input = new InputData.Builder(sendMessage).build();

MessageOptions options = new MessageOptions.Builder(WORKSPACE_ID)
  .input(input)
  .build();

MessageResponse response = service.message(options).execute();

System.out.println(response);

このままでは、常にダイアログ ルートノードでの反応となります。
セッションを継続するためには、いくつか方法があるようですが、watson からの返信で受け取った context を次のリクエストに渡すやり方が、一番簡単だと思われます。

Context watsonContext = response.getContext();  //と受け取っておき
SampleAssistant2.java
MessageOptions options;
if(watsonContext != null) {
    options = new MessageOptions.Builder(WORKSPACE_ID)
      .input(input)
      .context(watsonContext)  //次のリクエストに渡す
      .build();
}else{
    options = new MessageOptions.Builder(WORKSPACE_ID)
    .input(input)
    .build();
}
MessageResponse response = watsonAssistant.message(options).execute();
watsonContext = response.getContext();

IBMのwatsonで提供される各機能は各種言語向けのサンプルコードを伴った解説(英語)が用意されています。
APIリファレンスV1
https://console.bluemix.net/apidocs/assistant
APIリファレンスV2
https://cloud.ibm.com/apidocs/assistant-v2
https://www.ibm.com/cloud/watson-assistant/

IBMのチュートリアル(日本語)
https://cloud.ibm.com/docs/services/assistant?topic=assistant-getting-started#getting-started

watsonはクレジットカードの登録無しでも、一定範囲内の利用は無料です。
AIサービス利用の感じをつかむため、ちょっと触ってみてはどうでしょう。
特に、Assistantは概念的にもわかりやすく、様々なサイトへ応用可能ですのでお勧めです。
Wordpress用のモジュールもあるようですよ。

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