JAWS-UG浜松 AWS勉強会 2021#4で話した資料です。
個人開発のAlexaスキルを改善するために行ったことの紹介
Alexa SkillのVUIを改善した話@eulede (kuroyanagi)JAWS-UG浜松 AWS勉強会 2021#4
View Slide
Kuroyanagi Hitoshi@euledgehttps://github.com/euledge黒 柳 仁自己紹介普段は SpringBoot(Java) + Vue.js でお仕事してます。開発チームの体制づくりのためのツール導入とか、フレームワークづくりとか最近はDDDとかAmplify+LINE APIに興味あり
袋井市のオープンデータ活用事例Alexaスキル「ゴミ出しふくろい」を掲載していただきました。
Alexa Hosted Skill
今までの変遷2019/6 最初のバージョン公開2020/10 袋井市から実証実験に使いたいとの連絡放置していたので慌てて2020年のデータに対応2020/12 スキル名称を「ゴミ出しふくろい」に変更2021/2 街の名前を覚える機能追加2021/4 リマインド機能 EchoShow対応
https://alexa-skills.amazon.co.jp/apis/custom/skills/amzn1.ask.skill.2a344529-21df-4d41-9d39-cce634cf07ed/launch -
川井はカワイイ?川井(かわい)をアレクサが ‘かわいい’ と間違える東通り(ひがしどおり) ? 東同笠(ひがしどうり)
値 同義語東通り ひがしどおり、ひがしどうり、ひがしどーり、東通り、東通東同笠 ひがしどおり、ひがしどうり、ひがしどーり、東通り、東通値 同義語川井東 かわいい、かわい、かわいひがし、かわいいひがし、川井
えっ、また聞かれるの?昨日 今日
let persistAttributes =(await attributesManager.getPersistentAttributes()) || {};persistAttributes.lastAccess = dayjs().toISOString();persistAttributes.streetName = streetName;attributesManager.setPersistentAttributes(persistAttributes);await attributesManager.savePersistentAttributes();Alexa Skill KitでDynamoDBに対してattributesManagerでアクセスできる。
町名の発音はAlexaには、むづかしい見取初越西同笠木原上新池みどりはづこしにしどうりきわらかみにいけ
読み仮名も一緒に渡して読ませるfunction getPronounceTown(streetName) {const street = area_days.find((item) => item.street === streetName);const streetPronunciation = street.streetPronunciation;return `${streetPronunciation}as>`;}const speechText = `${getPronounceTown(resolutionName)}の次の収集日は ${collectionDate} です。次のご利用の時にも${getPronounceTown(resolutionName)}の収集日をお知らせしますか?`;{"street": "木原","area": "袋井西","streetPronunciation": "木原(きわら)","areaPronunciation": "袋井西","alias": "","days": "20210309 20210324 20210408 20210422},{"street": "土橋","area": "袋井西","streetPronunciation": "土橋(つちはし)","areaPronunciation" : "袋井西","alias" : "","days" : "20210309 20210324 20210408 20210422},{"street" : "可睡" ,"area" : "袋井北" ,"streetPronunciation" : "可睡(かすい)" ,"areaPronunciation" : "袋井北","alias" : "かすい" ,"days" : "20210311 20210326 20210413 20210427}
音声の補助としてディスプレイも使う
いや、この前聞いたけど忘れちゃったAlexaは基本的には自発的にはしゃべってくれない。前の日になったら教えてほしいな
リマインダーに追加するにはアクセス権の許可が必要const client = handlerInput.serviceClientFactory.getReminderManagementServiceClient();const reminderRequest = {trigger: {type: "SCHEDULED_ABSOLUTE", // 指定時刻にリマインドscheduledTime: remindAt,},alertInfo: {spokenInfo: {content: [{locale: "ja-JP",text: `明日は${streetName}の不燃物収集日です。`,},],},},pushNotification: {status: "ENABLED",},};console.log(JSON.stringify(reminderRequest));const reminderResponse = await client.createReminder(reminderRequest);console.log(JSON.stringify(reminderResponse));
2. 申請されたスキルは、スキルがリマインダーにアクセスする必要がある理由に関する詳細情報をユーザーに提示していません。スキルはこちらのドキュメントにリストされているサンプルメッセージに則った音声プロンプトを提供し、またユーザーがパーミッションを許可する為のカードを提示する必要があります。カードについての詳細はこちらを参照してください。補足:スキルの権限について、なんの権限が必要なのかどうして必要なのかという理由をユーザーに提示しておりません。3. スキルは、各リマインダーまたはリマインダーの一連を設定する際に、ユーザーの許可を取得しませんでした。スキルとユーザー間の対話の中で、スキルが明確な許可を得ていることを確認してください。例:毎週のトーナメントのために、リマインダーを週毎に設定しますか?リマインダ―の詳細については、こちら を参照してください。リクエスト例については こちら を参照してください。リマインダーに関する申請時のフィードバック
Alexa Skill開発の情報ソース• Alexa道場 Alexa Skills Kit: Webinars (amazon.com)• Alexa Skills Kit (ASK) (日本語) - Forums (amazon.com)• Slack alexa-jp
Alexa Skill開発者にお得な特典!AWS Promotional Credits for Alexa - Amazon Alexa