LoginSignup
52
52

More than 5 years have passed since last update.

ドコモの「しゃべってコンシェル」や Appleの「Siri」のようなサービスが誰でも作れる!?ドコモが提供する「雑談対話」APIを試してみた!

Last updated at Posted at 2013-12-18

今回作ったアプリのイメージ

アプリのスクリーンショットです。

screenshot_chat.png

概要

現在ドコモが提供している音声・会話関連のAPIには以下のものがあります。

・音声認識(Androidのみ対応)
・雑談対話
・知識Q&A

せっかくこんなサービスが無料で使えるんで、
今回は上記の中から「雑談対話」APIを利用したチャット風アプリを開発してみましたので紹介します。
「音声認識」APIも使ってユーザーの声でそのままやり取りできるようにしたかったのですが、
Androidしかサポートしていないためこちらは諦めました・・・。
代わりにキーボードからSiriを呼び出し音声をテキストに変換してもらうことでご容赦ください。

また「知識Q&A」APIは申請後に審査があるため今回は対象から外しています。
審査が通ったら紹介するかもです。

まずAPIを使用するためにはユーザー登録とアプリ情報の登録が必要になるので下記URLから登録作業を行ってください。

「雑談対話」APIリファレンスのURLは下記になります。

APIをPOSTで呼び出すとレスポンスがjson形式で返却されます。
パラメータはAPI_KEYとユーザの発話をテキストで付与するだけで使えます。

チャット風な画面をサクッと作るためJSMessagesViewController for iOSというライブラリを使用しました。
MITライセンスで無料なので安心して使ってください。

導入手順

APIをPOSTでリクエストするので「雑談対話」API専用に用意するものはありません。
代わりにAPIとやり取りするためにAFNetworking 2.0JSMessagesViewController for iOSを導入します。

導入にはCocoaPodsを利用しましょう。
まず適当な名前でプロジェクトを作り
プロジェクトのルート配下のディレクトリに下記のPodfileを作成します。

platform :ios, '6.0'pod "AFNetworking", "~> 2.0"pod 'JSMessagesViewController', '~> 3.4.0'

次にコンソールから下記コマンドを実行してインストールします。

pod install

APIの使い方

ここではAFNetworkingを利用してAPIをリクエストします。

https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=xxxxxxxx

パラメータの詳細はリファレンスを参照するとして、
ここでは下記二つのパラメータのみ使用します。

{
  "utt":"こんにちは",
  "context":"aaabbbccc111222333"
}

パラメータはjson形式で設定してください。

AFNetworkingを使えば簡単に実装できます。


static const NSString * API_KEY = @“xxxxxxx;

- (void)fetchChatRequest:(NSString *)comment context:(NSString *)context completionHandler:(void (^)(NSDictionary *result, NSError *error)) completionHandler
{
    AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    if (!context) context = @"";

    // パラメータの設定
    NSDictionary* param = @{@"utt" : comment, @"context" : context};
    [manager POST:[NSString stringWithFormat:
                   @"https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=%@", API_KEY]
       parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSLog(@"response: %@", responseObject);

        if (completionHandler) {
            completionHandler(responseObject, nil);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);

        if (completionHandler) {
            completionHandler(nil, error);
        }
    }];
}

リクエストが成功すると下記のようなjson形式のレスポンスが返却されます。

{
 "utt":"こんにちは",
 "yomi":"こんにちは",
 "mode":"dialog",
 "da":"0",
 "context":"aaabbbccc111222333",
}

あとは結果をパースして画面に表示します。

結論

細かい説明も書こうと思いましたが、長くなりそうなので
やめておきますw
興味がある方は作成したサンプルのソースコードを下記にアップしてますのでダウンロードしてみてください。

改善の余地はまだまだあって「知識Q&A」APIを組み合わせるともっとおもしろい事ができそうです。

Siriに飽きた方は是非こいつと会話してみることをオススメしますw

52
52
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
52
52