前回はドコモのOAuthSDKforiOSをSwiftで書き直しました。
今回は、同じくドコモから提供されている雑談対話APIを試してみました。
雑談対話API
雑談対話APIは、ユーザの発話テキストを受け付け、その入力に対して自然な会話となる雑談を提供します。
このAPIにもiOS用SDKが用意されているのでそれを使っています。
また、AVSpeechSynthesizerを使ってAPIからの返答を読み上げるようにしました。
ViewController.swift
//質問文問い合わせリクエスト
var param: DialogueRequestParam!
//雑談対話問い合わせ処理
var dialogue: Dialogue!
//回答データ
var resultData: DialogueResultData!
//エラー情報
var sdkError: SdkError!
var talker: AVSpeechSynthesizer!
初期化
ViewController.swift
//認証情報初期化
//docomo Developer supportから取得したAPIキーを設定
AuthApiKey.initializeAuth("APIキー")
param = DialogueRequestParam()
dialogue = Dialogue()
sdkError = SdkError()
talker = AVSpeechSynthesizer()
会話リクエスト
ViewController.swift
//発話を設定
param.utt = "こんにちわ"
//APIのキャラクタ設定(デフォルト:ゼロ,20:桜子,30:ハヤテ)
param.character = 20
/*
雑談対話問い合わせ処理にデータを渡す.
APIからは音声合成用情報が「resultData.yomi」に返ってくるので
AVSpeechSynthesizerで読み上げる.
コンテキストID(resultData.context)を使うことで継続した会話ができる.
*/
dialogue.request(param, onComplete: { (resultData) -> Void in
self.param.context = "\(resultData.context)"
let utterance = AVSpeechUtterance(string: "\(resultData.yomi)")
utterance.voice = AVSpeechSynthesisVoice(language: "jp-JP")
utterance.rate = 0.2
utterance.pitchMultiplier = 1.4
self.talker.speakUtterance(utterance)
}) { (sdkError) -> Void in
println("\(sdkError)")
}
動作テストの動画をアップしました。
YouTube
docomoの雑談対話APIとお話してみた。
ニコ動
ネットの中に住む「女子高生 桜子 16歳」(公式設定)とお話してみた。
個人的に、AVSpeechSynthesizerの読み上げは味気ない感じがしました。
ドコモからは音声合成APIも提供されているのでそっちに置き換えてみようと思っています。