kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

2019年7月の振り返り

f:id:kun432:20190805010457p:plain

8月になったのをすっかり忘れていました・・・ということで7月の振り返りです。


資格を取る

  • だいぶAlexaスキル開発にも慣れてきたんじゃないかなというところで、一度Alexa Skill Builder Certificationを受けてみようかという気になってきました。
  • まずはざっくり試験範囲とかサンプル問題とか調べた上で日程調整して、とりあえず落ちる前提で受けてみようかと。
  • 今の自分の実力を測ってみたい。

毎月一個、テーマを持ってスキルを作る

  • 7月は久々に一つリリースしました。

雨雲マップ

雨雲マップ

  • 大阪スマートスピーカーミーティング #10 で LTしてきたで紹介した、所在地情報APIを使った地図スキルです。所在地情報API以外にもYahoo!JAPANさんのAPIを複数使って、雨雲レーダー&気象情報を提供するシンプルなスキルです。
  • クレジット表記の問い合わせも回答もらって、今回初めてプライバシーポリシーも作って、直接的なスキル開発以外のところをいろいろ考えれたのがよかった。
  • エントリはそのうち書きます。
  • とりあえずフィードバックもいくつかもらっているので、適宜修正していく予定です(既に1回バージョンアップしてたりします)

ということで、#スキル開発100チャレンジの進捗はこうなってます。

公開済15個
申請中0個
開発中4個

あー、100は遠い・・・でも、新たに一つ、まだ構想段階ですけど、作り始めました。スキルアワード向けとキャンペーン向けはまた別なので、あと2つほど別に作る予定です、結構大変😅

でも今回のキャンペーンのノベルティ、めっちゃ良くないですか?自分のスキルのアイコンロゴ入りTシャツ!

f:id:kun432:20190805234046p:plain

がんばろー

developer.amazon.com

アウトプット

LT

今月は1件です。

  • スマートスピーカーミーティング#11で、リマインダーAPIをやってみた話をしてきました。
  • リマインダーAPIは今作ってるスキルで入れてみようと思ってます。
  • スキルの継続利用については少しこだわっていきたい!

スタッフ

今月はこっちですねー、ハッカソンスタッフ、2件やってきました!

  • Payワークショップでの経験が多少なりとも活きたんじゃないかなとー思っています。とはいえ、まだまだ知識も経験も足りないと感じたので、今後も参加して経験積んでいきたい。
  • 大阪も東京もほんと面白かったなー、参加者の皆さんのいろんなアイデアを聞けたりして、とても刺激的でした。
  • 東京ではこんなことも・・・・

いや、ほんと良い経験でした。もっと精進していきたい!

ブログ

7件書きました。小ネタもあるけど、いい感じ!

その他

イベント

今月もいろいろ行きました。主催者ならびに登壇者、参加者の皆様、ありがとうございました!


当面はアワードとキャンペーンに向けてスキル開発頑張ります。あとは関西でもっとVUIが盛り上がるように、自分なりにできることをいろいろやっていく予定ですので、よろしくお願いいたします。

ということで告知です。

AAJUG京都は、GamificationとMLです。結構ガチな感じがしますw 個人的にPersonalize楽しみです!

上のイベントの前段で、もう少しユーザー目線で見てみよう的な座談会です。まだまだスマートスピーカーの普及率が低い現状、何ができて何が便利なのか、みたいなのを伝えていくにはこういうのが大事ですね。

多分初ではないかと思うんですが、もくもく会です。一人だとなかなか進まないスキル開発、みんなで集まってワイワイ言いながらやりましょうー

もう恒例となりました、スマートスピーカーミーティングです。今月はアカウントリンクの話をしようと思います。パーソナライズされたスキルという意味ではアカウントリンクは最たるものなのではないかなと思います。もちろんVoiceflowでやってみた話もあります!

お時間合えばぜひぜひお越しくださいませ。

それでは8月もよろしくお願いします。

Voiceflow TIPS #5 重複しないランダムな数字を取得したい

引き続きVoiceflow TIPSです。

ランダムな数字を取得したい、かつ重複しないようにしたいことってありますよね?例えばクイズスキルとかでランダムな問題を重複しないように、というようなケースが考えられます。これをVoiceflowでやってみました。

全体像

全体はこんな感じです。 f:id:kun432:20190806010457p:plain

変数の作成

まず変数を作成します。ランダムな数字をセッション跨いで必要とするケースはそんなにない気がしたので、今回は TIPS #3で紹介したフロー変数を使ってみました。

f:id:kun432:20190806010449p:plain

変数名 説明
arrRndNum ランダムな数字郡を保持しておくための配列です
startNum ランダムな数字の最小値。ユーザが定義する。
endNum ランダムな数字の最大値。ユーザが定義する。
rndNum ランダムな数字が一つ入ります

例えば、0〜9からランダムな数字が取得したければ、startNumが0、endNumが9というような感じになります。

① Set Blockでユーザが定義する値を初期化

f:id:kun432:20190806012137p:plain

ここでstartNumとendNumを初期化します。別に後ろのCode Blockで初期化してもいいのですが、コードを直接編集せずに、ユーザが定義するところだけはわかりやすいSet Blockを使いました。例では1〜10でランダムな値を取得する感じですね。

② Code Blockで配列などの初期化

f:id:kun432:20190806012319p:plain

ここはコードそのものです。ちょっと見えにくいので以下にコードを貼ります。

var arrRndNum = [];
var rndNum = 0;

for (var i = startNum; i <= endNum; i++) {
  arrRndNum.push(i);
}

for (var j = arrRndNum.length -1; j > 0; j--) {
  var r = Math.floor(Math.random() * (j + 1));
  var tmp = arrRndNum[j];
  arrRndNum[j] = arrRndNum[r];
  arrRndNum[r] = tmp;
}

中身はこんな感じです。

  • 最初に、arrRndNumとrndNumを初期化しておきます。
  • 最初のforでユーザが定義したstartNumとendNumからarrRndNumに数字を入れていって配列をつくります。
  • 2番めのforでarrRndNumをシャッフルして配列内の数字をランダムに組み替えます。Fisher–Yatesアルゴリズムを使ってみました。

必要なときに都度ランダムを引いてもよいのですが、ここでは初期化の一環としてランダムな配列を作っておきました。ここまでが初期化です。

③ Code Blockで配列から数字を取得

f:id:kun432:20190806013240p:plain

ここからがメインのフローになります。arrRndNumから数字を一つ取り除いてrndNumに入れます。②でarrRndNumが既にランダムになっているので、単に一つpopするだけでランダムな数字が得られます。もちろん、ここでランダムにとるようにしてもよいと思います。

コードも貼っときます。

if(arrRndNum.length > 0){
  rndNum = arrRndNum.pop();
}else{
  throw new Error("配列が空です");
}

なお、pop()で取得した場合、配列が既に空になっていると0を返すので、ここでは最初に配列内の要素数をチェックして1以上でなければ、エラーをthrowするようにしました。こうしておくとCode Blockのfailに流れるのでわかりやすいです。

④ Speak Blockでランダムに取得した数字をAlexaに発話させる

f:id:kun432:20190806013950p:plain

ここでAlexaにランダムに取得した数字を発話させます。ついでにもう一度引く場合の質問も投げかけています。

⑤⑥⑦ Interaction Blockで繰り返しの確認

f:id:kun432:20190806014234p:plain

Interaction Blockで繰り返すかどうかを「はい」「いいえ」でユーザに答えさせます。Choice Block使ってもよいのですが、「はい」「いいえ」はYesIntent/NoIntentがありますので、ビルトインされているInteraction Blockを使ったほうが確実ですね。

ここで「はい」の場合は、1のフローに流れて、③に戻って再度ランダムな数字を引き直します。

f:id:kun432:20190806015249p:plain

「いいえ」の場合は、2のフローに流れて、終了のメッセージを発話して終わります。

f:id:kun432:20190806015536p:plain

「はい」「いいえ」以外の場合は、Elseに流れて、再度質問し直します。

f:id:kun432:20190806015550p:plain

⑧ 配列が空になった場合

f:id:kun432:20190806015816p:plain

③で書いたように、ランダムな数値を保持している配列arrRndNumが空っぽになった場合はエラーになりFailに流れるので、ここでもう配列が空だということを告げて終わります。ケースによってはここで再度②に流して、配列を初期化してもよいかもしれませんね。

これで一通り完了です。

テスト

2回実行した結果を以下に貼っときます。

  • 毎回、順番が違うこと
  • 同じ数字が1回のセッションで選ばれていないこと

を見ていただければわかるかと思います。

f:id:kun432:20190806021442p:plain


今回、以下の記事を参考に、少しコードの書き方などは修正させていただきました。Thanks! > Mark!

Markさんの他の記事にもいろいろVoiceflowのTIPSなどありますのでぜひ御覧ください(英語)

是非ご活用下さい〜

Voiceflow TIPS #4 Voiceflowの稼働状況を知りたい

TIPSの第4回です。今回は小ネタです。

Voiceflowもクラウドサービスなのでたまに落ちていたりすることがあります(出会ったことはないですが)。そんな時はステータスページを見てみましょう。

画面こんな感じです。緑になっていたら正常稼働中ということですね。

f:id:kun432:20190804110410p:plain

ユーザとして見るところは、

  • Voiceflow Creator
    • Voiceflowのスキル作成画面
  • Live Skills/Actions
    • Voiceflowで作ったスキルのバックエンド。スキルが動作しているかどうか。ここは重要。

あたりになるかと思います。他にもVoiceflowが内部的に使っているサービスの稼働状況も並んでますね。

下の方に行くと、過去の障害発生履歴が掲載されてます。

f:id:kun432:20190804111113p:plain

あと、障害発生時や回復時には通知もしてくれるみたいです。"SUBSCRIBE TO UPDATES"をクリックすると、メール、SMS、Webhook(!)、RSS/Atomが選べるようになっています。

f:id:kun432:20190804111426p:plain

うまく動かないなーとかアクセスができないなーという時には一度見てみてはいかがでしょうか?という小ネタでした。