はじめに
スキル内で、スキルのアップデート情報をユーザにお知らせするやり方についてです。
スマホのAlexaアプリやブラウザでは、更新情報が確認できます。
しかし、それらを開いてまで確認する人は少ないと思います。
スキルを起動したタイミングで、お知らせ(アップデート後の一回だけ)できれば良いなと思うのでやってみました。
概要
- ユーザーの最後のスキル起動日時(
lastLaunch
)を記録する - お知らせするメッセージと時間(
lastUpdate
)を静的ファイルなどに書いておく -
lastLaunch < lastUpdate
の場合は、メッセージをお知らせする。
という仕組みです。
1.
に関しては、ask-utils のSetLaunchCountInterceptorを使って実現します。
コード
index.ts
import moment from 'moment';
import updateInfo from './updateInfo.json';
const s3PersistenceAdapter = new Adapter.S3PersistenceAdapter({
bucketName: `${process.env.SERVICE_NAME}-${process.env.ENV}`,
});
export const alexa = Ask.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler
)
.addRequestInterceptors(SetLaunchCountInterceptor) // 1. ユーザーの最後のスキル起動日時を記録する
.withApiClient(new Ask.DefaultApiClient())
.withPersistenceAdapter(s3PersistenceAdapter)
.lambda();
const LaunchRequestHandler = {
canHandle(handlerInput: Ask.HandlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest';
},
async handle(handlerInput: Ask.HandlerInput) {
// 3. メッセージをお知らせする。
if (moment(updateInfo.lastUpdate).isAfter(moment.unix(lastLaunch))) {
progressiveResponse(handlerInput, updateInfo.message.join('<break time="300ms"/>')); //progressiveResponse関数は省略
}
}
return handlerInput.responseBuilder
.speak('ハローワールド')
.getResponse();
updateInfo.json
// 2. お知らせするメッセージと時間を静的ファイルなどに書いておく
{
"lastUpdate": "2020-07-06T09:00:00",
"message": [
"アップデート情報のお知らせです。",
"アップデートの内容はほげほげになります。"
]
}
その他
日付(updateInfo.lastUpdate
)を未来にしておくと、その時刻までずっとお知らせすることが出来ます。
期間限定のキャンペーンなどにも応用できそうです。