AlexaでSlackにReminderを登録する

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の設定をしていきます。

スキル情報

f:id:AdwaysEngineerBlog:20171225122116j:plain

対話モデル

f:id:AdwaysEngineerBlog:20171225122144p:plain

設定

f:id:AdwaysEngineerBlog:20171225122158j:plain

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にはテストするためのシュミレーター画面があるので、それを使います。

f:id:AdwaysEngineerBlog:20171225122235p:plain

Slackの方をみてみましょう

f:id:AdwaysEngineerBlog:20171225122249p:plain

できているようですね。

まとめ

声経由でやって見ましたが、まだ日本語がうまく抽出できてないのか、僕の設定が間違っているのか、うまくTaskが取れない時もあったのですが、この流れで一応できました。
エラー処理などもやって、きちんと対話として成立させていきたいです。