CodeZine(コードジン)

特集ページ一覧

誰でも手軽にNTTドコモのサービスのような機能を持つアプリが作れる ~ぼっちでも雑談を楽しめるAndroidアプリを作ろう

スマホアプリを豊かにする「docomo Developer support」で遊ぼう(4)

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/03/16 14:00
目次

雑談対話APIを使ったコンピュータとのチャットアプリ(2)

docomo IDと連携したパーソナライズ機能

 ContextIDを使ってユーザとコンピュータ間でより自然な対話になるよう文脈を解析しながらやりとりができますが、このContextIDはアプリケーションを終了すると、サーバ上から削除されてしまいます。雑談対話APIでは、会話の内容をdocomo IDと紐づけてサーバ上に蓄積し、後日改めて対話を行ったときも、前回の会話内容を分析し、より最適な会話を続けるパーソナライズ機能が提供されています。

 docomo IDを使ったパーソナライズを行うには、OAuth認証を行って、アクセストークンを取得します。取得したアクセストークンを、雑談対話APIのリクエストパラメータにセットすることで、docomo IDに紐づいた対話内容がサーバ上に蓄積されます。OAuth認証を行うためのSDKは以下のサイトから取得します。

 ダウンロードしたファイルに含まれるdocomo-oauth-android-sdk-1.1.1.jarをAndoridプロジェクトのlibsフォルダ内にコピーしてください。

 また、このSDKを利用するため、docomo Developer supportのマイページから必要なキー情報を取得します。

OAuthに必要な情報の取得
OAuthに必要な情報の取得

 取得した情報を、次のとおり認証を行うOAuthActivity.javaにセットします。

リスト3 docomo ID認証で必要な情報の設定 (OAuthActivity.javaの抜粋)
/** OAuth 認証用 client id  */
private static final String CLIENT_ID = "xxxxx";
/** OAuth 認証用 client secret  */
private static final String SECRET_ID = "xxxxx";
/** OAuth 認証用 scope  */
private static final String SCOPE = "dialogue";
/** OAuth 認証用 コールバックURL  */
private static final String REDIRECT_URI = "xxxxx";

 今回のチャットアプリのサンプルでは、取得したアクセストークンをPreferencesに保存しています。OAuthActivityクラスの詳細については、本記事の内容からは逸れますのでサンプルコードおよびSDK付属のドキュメントを参照してください。

雑談対話APIのレスポンス

 DialogueAsyncTaskクラスは、雑談対話APIのレスポンスを受け取ります。docomo ID認証によるパーソナライズ機能を使うためには、APIのリクエストに取得したアクセストークンを、リクエストパラメータとともに送信します。パーソナライズ機能を使わない時はAPIの呼び出しはリクエストパラメータのみを送ります。

リスト4 雑談対話APIのレスポンス取得(MainActivity.javaの抜粋)
// 雑談対話要求処理クラスにリクエストデータを渡し、レスポンスデータを取得する
Dialogue search = new Dialogue();
// パーソナライズ機能を利用するときは、リクエストにアクセストークンを送る
boolean oauthFlg = sp.getBoolean("personalize", false);
if ( oauthFlg ) {
    String accessToken = sp.getString("accessToken", "");
    resultData = search.request(reqParam, accessToken);

} else {
    resultData = search.request(reqParam);
}

 雑談対話APIを呼び出すと、以下のような項目がレスポンスとして返ります。このレスポンスから雑談対話の返答(utt)を取得し、画面のListViewコントロールにデータを表示します。

雑談対話APIのレスポンス
内容 項目 データ型 説明
システムの返答 utt string 雑談返答
音声合成用読み出力 yomi string 音声合成用出力
モード mode string 対話のモード
対話番号 da int ユーザとシステムの対話に対してサーバが付与した番号
コンテキストID context string 自動的にシステムより出力されるID

 これで、チャットサンプルアプリの作成がひととおり終わりました。

動作確認

 雑談対話APIのサーバとネットワーク通信を行う必要があるので、最後にAndroidManifest.xmlに以下のパーミッションを設定します。

リスト5 パーミッションの設定(AndroidManifest.xmlの抜粋)
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 サンプルアプリを実行すると、対話画面が表示されます。筆者が試したところ、対話内容は、会話の文脈をもとに返答されることが多いですが、時々、ニックネームで呼ばれたり、登録した場所の天気やイベント情報などが返答されたりすることもあります。

おわりに

 今回は、雑談対話APIのご紹介と、雑談対話APIを使ったチャットアプリを作りました。コンピュータとの対話を行うには、機械学習や形態素解析などの自然言語処理など、しきいの高い技術を勉強する必要がありますが、docomo APIを使うと短時間で手軽にアプリケーションに組み込むことができることがお分かりいただけたでしょうか。

 「docomo Developer support」では、本連載で紹介した他にもさまざまに有用なAPIを提供しています。本稿で興味を持った人は、ぜひ、他のAPIも触れてみると良いでしょう。



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 阿佐 志保(アサ シホ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

バックナンバー

連載:スマホアプリを豊かにする「docomo Developer support」で遊ぼう
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5