6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

電車の運行情報を教えてくれるAlexa Skillを作ってみた

Posted at

この記事はGoogle Home向けに作った 電車の運行情報を教えてくれるAssistant対応アプリを作ってみた のAlexa Skill版です。

構成

Alexa Skillの基本構成は以下のようになります。Lambdaの部分はHerokuなどを使って自前で準備したサービスを使うこともできます。今回はそのままLambdaを使いました。

スクリーンショット 2017-12-29 16.34.25.png

これらの基本構成は会社の同僚が作った 嫁をなだめるSkill を参考にすれば大枠は完成します。今回はそれ以外の部分を中心にまとめます。

Alexa Skill Kit

Amazon Echoに向かって「○○を開いて」と言ったら起動し、様々な音声コマンドに反応する仕組みを自前で作ることができるプラットフォームがAlexa Skillです。

Skill Builder

Skill BuilderはまだBETA機能ですが、Google HomeのDialog Flowのように複雑な音声コマンドに対応するSkillを開発できるようになります。まずは以下のように運行情報を問い合わせるカスタムIntentを作成します。

スクリーンショット 2017-12-29 23.27.00.png

Train の部分はカスタムスロットで以下のようにSynonyms(同義語)の設定ができます。

スクリーンショット 2017-12-28 19.08.36.png

Synonymsを設定することで異なるワードも同じ意味として解釈してハンドリングすることができるようになります。

Lambda

Synonyms(同義語)で設定した id をチェックして鉄道会社ごとのサイトにアクセスし運行情報をチェックします。以下はNode.jsで実装した例です。

// 省略
  'TrainStatusIntent': function () {
    var train = this.event.request.intent.slots.Train;
    var speechOutput = train.value + 'の運行情報を取得できませんでした。';
    // SlotにSynonymが設定されているかをチェックして鉄道会社ごとにサイトをチェックする
    
    if ('resolutions' in train) {
      if (train.resolutions["resolutionsPerAuthority"][0]["status"]["code"] == 'ER_SUCCESS_MATCH') {
        var slotId = train.resolutions["resolutionsPerAuthority"][0]["values"][0]["value"]["id"];
        
        if ( slotId==='HANKYU' ) {
          // 阪急のサイトで運行情報を取得する
        } else if ( slotId==='HANSHIN' ) {
          // 阪神のサイトで運行情報を取得する
        }
      }
    }

    console.log(speechOutput);
    this.emit(':tell', speechOutput);
  },
// 省略

Skill BuilderでSynonymsを設定した場合は上記のように resolutions 配下をチェックすることで同義語の id を取得することができます。詳細は別記事にまとめました。

IntentRequest内でCustom Slot Typeの同義語の情報を取得する

また、運行情報を取得する時に外部アクセスすると応答までに少し時間がかかるためタイムアウトの設定をデフォルトより少し長くしておくほうが良いでしょう。

スクリーンショット 2017-12-29 23.53.56.png

まとめ

Alexa Skill KitとLambdaを設定することでSkillのテストが可能になりますが、上記別記事にも書きましたがSynonymの設定はサービスシミュレーターではテストできないのでご注意ください。構成はGoogle Assinstant対応アプリよりシンプルでわかりやすいように思いますがBeta機能で開発途上なところは若干わかりにくいかもしれません。Test SimulatorというBeta機能もありますが今回はまともに使いこなせなかったので説明は省きます。これらBeta機能が正式に使えるようになるともっと開発しやすくなるかもしれません。ただ、基本的な仕組みを理解しておけば開発の手順はそれほど難易度は高くないと思います。

今回サンプルとして作ったLambdaのスクリプトは下記に置きました。

AlexaSkilll-TrainStatus

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?