Help us understand the problem. What is going on with this article?

obniz対応スマートスピーカースキルの作り方

More than 1 year has passed since last update.

はじめに

LINE BOOT AWARDS 2018のハッカソンにてチームで開発した「心の音」というスキルがあり、現在Clova、Alexaにてリリースされています。
obnizと心拍センサーと合わせて使うスキルとなっており、現在の心拍数に応じてオススメの曲をレコメンドしてくれるスキルとなっています。

心の音(Alexa)

image

このスキルのように、obnizと連携するスマートスピーカースキルの開発ノウハウについて書いていこうと思います。

obniz IDの音声登録

obniz IDは8桁の数値で構成されるので、そのぐらいの情報量であれば音声で登録してもらう仕組みが良いでしょう。

このとき8桁を1度に伝えるか、4桁を2度に分けて伝えるかという判断が出てきますが、ベストは両方の方法を実装することでしょう。
どちらか一方を実装する場合は4桁を2度に分けた実装のほうがユーザーに優しいと思いますが、一番ラクな実装は8桁を一度に伝える方法かと思います。

ちなみにアカウントリンクを使用してGUIからobniz IDを入力する方法もありますが、こちらは中々手間ですし折角の音声スキルなら音声で登録させたほうがいいかなと思います。

スロットの実装

obniz IDの読み上げは例えば「1234-5678」というIDだった場合、ユーザーは「せんにひゃくさんじゅうよん の ごせんろっぴゃくななじゅうはち」と読み上げはせず、「いちにーさんよん の ごーろくななはち」と読み上げるでしょう。
ClovaやAlexaにはビルトインスロットとして「CLOVA.NUMBER」や「AMAZON.NUMBER」が用意されていますが、どちらも前者のような読み上げ方にしか対応していません。
そのためID読み上げの拾い方について考える必要があります。

Alexaには「AMAZON.FOUR_DIGIT_NUMBER」という、まさにうってつけなビルトインスロットがあります。
ただ、FOURと名前についているものの4桁以外も認識してしまうため、桁数チェックをあわせて実装しておきましょう。

ClovaのほうではAlexaのようなビルトインスロットがなく、以下のようなスロットを独自に登録し、インテントに1桁づつ割り振りす必要があります。

[ スロット ]
image.png

[ インテント ]
image.png

このようにユーザーのobniz IDを取得し、ユーザーIDをキーとしてDBに格納しておきます。

バックエンド実装の注意点

バックエンド実装で注意すべき点として、タイムアウトがあります。
Clova、Alexaに話しかけてから応答を返すまでの処理の時間です。
現在、Clova、Alexaとも8秒ほどあるので、センサーデータの取得等には十分な時間です。

ただしこのあたりの仕様は変更される可能性もあるため注意が必要です。
※Clovaは一時期8秒→3秒→8秒と変化していました。

8秒を超える処理を行うときには工夫が必要で、バックエンドからスキルのプロセスとは別のプロセスを起動したりと、色々と方法は考えられます。
このあたりの話は文量が多くなってしまうのでまた別の機会にまとめたいと思います。

スキルリリースにあたっての注意点

Clova、Alexaそれぞれでobniz連携スキルのリリースにあたり、色々と注意点があります。

共通

obnizとの接続方法を分かりすく説明したページを用意する

obnizとパーツの接続方法を写真を使って分かりやすく説明したり、必要になるパーツの購入先(秋月等)のリンクを掲載したり、スキルの使い方やプライバシーポリシー等を記載したページを作成し、スキル説明欄にそのページのリンクを掲載しました。

参考までに説明ページのリンクです。
心の音 説明ページ(Clova版)
心の音 説明ページ(Alexa版)

Clova

スキル無効化時にユーザーデータをクリアすること

他の音声アシスタントには無い実装なのですが、Clovaはスキル無効化時にイベントが発生します。
このイベントを適切にハンドリングし、その中でobniz IDといったユーザーデータをDBへ格納している場合はクリアする必要があります。

Alexa

プライバシーポリシーへの明記

これはobnizというよりかは、「心の音」というスキルの特徴にもよる部分かと思います。
心拍数というセンシティブな情報を取得することをプライバシーポリシーへ明記しなさいと指摘がありました。
心拍数に限らず、センサーデータを取得する場合も同様にプライバシーポリシーへの明記は必要になるかもしれません。

プライバシーポリシーってどんな感じに書けばいいんだって方もいらっしゃると思いますので、「心の音」のプライバシーポリシーの文面を以下にご紹介致します。

プライバシーポリシー

個人情報の利用目的

本スキルでは、ユーザーのobnizのIDおよび心拍数を取得し保管致します。
obnizのIDおよび心拍数はおすすめの音楽とのマッチングのために利用致します。
この目的以外にユーザー情報を利用することはありません。

さいごに

obnizというマイコンに対応したスキルがリリースできるのか半信半疑のままスキル開発を進めていましたが、Clova、Alexaともに無事リリースすることが出来ました。
Google Assistantへのリリースにもそのうち挑戦してみようと思います。

スマートスピーカーはそれ自体がIoTな機器ですので、obnizや様々な電子パーツと組み合わせることでIoTガジェットとしての幅が一気に広がると思います。
本記事がobnizと連携したユニークなスキルリリースの助けとなりましたら幸いです。

miso_develop
Google Homeの購入を機にITに目覚めた初心者非エンジニアです!分からないことがあったら相談したり一緒に考えたりしたいので是非ともフォローお願いします!
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした