Adways Advent Calendar 2017 17日目の記事です。
http://blog.engineer.adways.net/entry/advent_calendar_2017
こんにちは、久保田です。
2度目の記事になりますが、またまたAlexaで遊んだ記事です。
今回は、Alexaを通して、SlackのReminderに予定を登録してみます。
設計
会話の流れはとりあえず以下のようにします。
ユ 「Alexa, スラックリマインダーで、明日の11時にMTGを設定して」 A 「明日の11時にMTGを設定しました。」
まずはこの1パターンのみを考え、作ってみます。
設定
Alexaの設定をしていきます。
スキル情報
対話モデル
設定
Lambda
プログラムはlambdaに作ります。
var https = require('https') exports.handler = (event, context, callback) => { var slots = event.request.intent.slots; var task = slots.Task.value; var date = slots.Date.value; var time = slots.Time.value; var resAlexa = { "version": "1.0", "response": { "outputSpeech": { "type": "PlainText", "text": date + time + 'に' +task+ 'を登録しました。' }, } } var dn = new Date().getTime(); var d = (new Date(date + ' ' + time)).getTime(); var unixTime = Math.ceil((d - dn) / 1000); https.get('https://slack.com/api/reminders.add?token='+process.env.TOKEN+'&text='+encodeURIComponent(task)+'&time='+unixTime+'&user='+process.env.USER+'&pretty=1', function(res){ let body = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { body += chunk; }); res.on('end', (res) => { res = JSON.parse(body); console.log(res); callback(null, resAlexa); context.done(null, 'finish') }); }) };
SlackのReminderのAPIの時間の扱い方が若干癖ありで微妙なのですが、一旦これで。
テスト
Alexaにはテストするためのシュミレーター画面があるので、それを使います。
Slackの方をみてみましょう
できているようですね。
まとめ
声経由でやって見ましたが、まだ日本語がうまく抽出できてないのか、僕の設定が間違っているのか、うまくTaskが取れない時もあったのですが、この流れで一応できました。
エラー処理などもやって、きちんと対話として成立させていきたいです。