ドラグスレイブで比較するVoice Assistant

たぶん怪文書


前口上

スレイヤーズの第3部が始まりますね。子供の頃に呪文を覚えた方も多いんじゃないでしょうか。

スマホも喋る時代、Voice Assistantも呪文くらい唱えられなきゃスマートと言えませんよね?ということでAlexa/Google Home/Siriにドラグスレイブ唱えさせてみる。


Alexa

Alexa用のコンソールから作成可能。以前はLambdaを別途用意して紐付ける必要があったがCodeタブ内で簡単に編集できるようになった。


  • ドラグスレイブを唱えて」をEnchantIntentとして登録


  • 他のHandlerをコピペしてEnchantHandlerを作成。マッチさせるIntentをEnchantIntentに、読み上げるテキストを呪文に変える。


Alexa SkillではSSMLに対応しているため、XMLタグを使うことで細かな制御が可能。漢字の読み上げは完璧でないのでひらがなにするかsubタグで読みを設定する必要がある。


const EnchantHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'EnchantIntent';
},
handle(handlerInput) {
const speechText =
'黄昏よりも昏きもの、血の流れより紅きもの、 時の流れに埋もれし、' +
'偉大なる汝の名において、我ここに闇に誓わん、我等が前に立ち塞がりし' +
'すべての愚かなるものに、我と汝がちからもて、等しく滅びを与えんことを、' +
'<prosody volume="x-loud">ドラグスレーイブ!</prosody>';
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};


  • handlerのリストの上の方にEnchantHandlerを足す

exports.handler = Alexa.SkillBuilders.custom()

.addRequestHandlers(
LaunchRequestHandler,
EnchantHandler, // add
LagunaBladeHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
SessionEndedRequestHandler,
IntentReflectorHandler)
.addErrorHandlers(
ErrorHandler)
.lambda();


  • 申請するつもりでアプリの説明やアイコン画像をダミーで入れると実機でテストできるinvitationを送れるようになる


Google Home

Dialogflow(旧api.ai)で作成する。Alexa Skillと違いこの程度なら全てGUIで完結可能。


  • Alexa Skillと同等にEnchantIntentにTraining phrases「ドラグスレイブを唱えて」をたす。


  • ResponsesでText responseに呪文をたす。



  • 実機テストを行うにはGoogleアカウントの設定でウェブとアプリのアクティビティを有効化する必要がある他、IntegrationsタブからGoogle Assistantを選択、Auto-preview changesをオンにする必要あり。呼び出し名はSimulatorの画面に飛んでから横メニューのInvocationで変更できる。

SSMLに対応している。


Siri

iOS12からショートカットアプリが導入されており、Siriをhookにショートカットのアクションを定義可能。

ブロックの流れとしては テキスト設定 => 読み上げ。ショートカット内では発話人物を設定できるがSiri経由だと無視される模様。

SSMLには対応していない。


比較

Alexa
Google Home
Siri

SSML
Y
Y
N

GUIで開発


Backend
Lambda
Dialogflow GUI
ショートカット


Future Work

Clova, Cortana Skillとか