[レポート] 交通情報系スキルを事例に見る日常生活に溶け込むスキルのテクニック #alexaday2019

2019年4月6日に開催されたAlexa Day 2019のセッション、「交通情報系スキルを事例に見る日常生活に溶け込むスキルのテクニック」のレポートです。
2019.04.06

はじめに

本ブログは、2019年4月6日にスペースアルファ三宮にて開催されたAlexa Day 2019のセッション、「交通情報系スキルを事例に見る日常生活に溶け込むスキルのテクニック」のレポートです。

スピーカーは、 ジョルダン株式会社の山手 政実さんです。

概要

先日公開したジョルダン「バス案内」は、全国720社以上のバス時刻を案内するスキルです。 このセッションでは、本スキルで行なっている「日常生活で繰り返し使っていただくための工夫」や「経路検索エンジンの統合、複数のスマートスピーカーでの利用等の技術的なチャレンジ」をご紹介いたします。

レポート

発表スライド

自己紹介

スムーズな対話に近づけるための開発手法

  • 一般的なAlexaスキルの構成
  • ユーザー <-> Alexaデバイス <-> Alexaサービス <-> Lambda

  • 返答までの微妙なラグが気になる

  • 遅い原因
  • Lambdaのコールドスタートが影響
  • スキルが利用されるタイミングが読めない
  • 時間帯によってリクエスト数が変わるため、100%コールドスタートを抑止することは難しい

  • Lambdaの生成フロー

  • ENIの作成(VPCの場合)
  • コンテナの作成
  • デプロイパッケージのロード
  • デプロイパッケージの展開
  • ランタイム起動・初期化
  • 関数・メソッドの実行

  • サーバーレスを捨てた

  • LambdaではなくHTTPSホスティングを選択
  • Node.js + Express + ask-sdk + forever
  • デーモン化して常時リクエストを受け付ける

  • ジョルダンのカスタムスキルの構成

  • 実行速度の比較

  • Lambda メモリ割り当て:512MB
  • HTTPS(EC2 -> t2.nano)

  • コールドスタート時の1秒の差を埋めるためにHTTPSを使っている

  • なぜ1秒の差のためにHTTPSを使うか?
  • Alexaスキルはユーザーとの対話。朝忙しいときにできるだけ早くユーザーに情報を提供したい
  • HTTPSホスティングの注意点
  • リクエスト要件の検証が求められる(公式ドキュメントに記載)。検証用のnpmモジュールもある

「バス案内」で実現したマルチデバイスへの対応方法

  • 3,4回作り直した
  • 全国対応 or マルチデバイス対応
  • マルチデバイスにこだわる理由
  • 普段使うバス停は1箇所ではない。今後Alexaの利用場面は広がっていくのでは。
  • 家の外でもAlexaも使う世の中が近いかもしれない
  • ユーザーデバイスを識別する方法

  • userIdとdeviceIdを活用する
  • userId + deviceIdでマルチデバイスの識別は可能
  • 但し、スキル内で完結することに限る

  • カスタムスロットとバス停数

  • カスタムスロット上限:5万、提供したいバス停の数:53万件
  • 発話によるお気に入りの登録は不可
  • アカウントリンクでお気に入りを管理することにした

  • アカウントリンクとは

  • 既存サービスのユーザーとスキルのユーザーを紐付ける機能
  • OAuth2.0 認証に対応
  • Implicit Grant
  • Authorization Code Grant
  • アクセストークンは、アカウントIDに対して1つ保持される

  • マルチデバイス対応方法

  • アカウントリンクから登録される情報は、仮情報としてDBに保持
  • スキル起動後に、デバイスと仮情報を紐付ける
  • 懸念事項

  • Voice Profile利用時のuserI, deviceIdの変化
  • 話者特定まで考慮していないので、対話の流れを考え直す必要があるかも

  • こんなことできたらいいな

  • 外部サービスから利用状況を引っ張りたい
  • アカウントに紐づくuserIdなど
  • 音声でカバーできない部分を外部サービスで賄って、よりリッチなスキルを作れるかもしれない

まとめ

  • スムーズな対話に近づけるための技
  • Lambdaのコールドスタート対策としてHTTPSホスティングに変更する
  • 費用はLambdaよりかかってしまうので注意

  • アカウントリンク利用時のマルチデバイス対応

  • アクセストークン以外でユーザーを識別できない
  • アカウントリンクページで操作を完結させない
  • 対話によるスキル操作を含めることで、カスタムスロットを超えるワードの登録やマルチデバイス対応が可能に

おわりに

よりユーザーに早く情報を提供するためにLambdaではなくHTTPSのホスティングを選択したことや、アカウントリンクを利用してマルチデバイス対応を行うテクニックなど、スキル開発を行う上で非常に参考になるセッションでした! 特に、アカウントリンクを利用してマルチデバイス対応を行う部分はとても興味深い内容でした。 山手さん、ありがとうございました!