今回作ったアプリのイメージ
アプリのスクリーンショットです。
概要
現在ドコモが提供している音声・会話関連の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.0
とJSMessagesViewController 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