Quantcast
Browsing Latest Articles All 17 Live
Mark channel Not-Safe-For-Work? (0 votes)
Are you the publisher? or about this channel.
No ratings yet.
Articles:

Amazon Echo Buttonをセットアップ (at LasVegas)

はじめに

2018/11/26〜2018/11/30、アメリカのラスベガスで開催されましたAWS re:Invent 2018に行ってきました。
そこで「HAC04 Alexa Hack Day」に参加してきました。
IrfanさんとKimlerさんと同じ組でものを作った際にいただいたAmazon Echo Buttonを頂いたので、
早速使ってみたお話です。
ただ、日本ではまだ技適が通ってないので、もし持っていらっしゃる方はアレですね。
ちなみに、その時の映像に一瞬映ってたので、こちらを。

前提条件

デバイスとペアリングが必要になるので、ペアリングできるAlexaデバイスを使う必要があります。
ちなみに、僕はEcho Dotしか持ってないので、Echo Dotを利用しました。

設定

ほぼほぼココを見れ実行すればOKでした。
一応、なくなると困るので、手順は一番下の画像を参照してください。

やりたかったこと

やりたかったのは、Timeoutするまでの間にどれだけの回数ボタンを押せるか。そして、その結果を伝えるというものを作りたかったです。
ただ、サンプルのままだと一度、Echo Buttonを押すと毎度Button情報を教えてくれたり、ボタンを一度押すと回数を数えてくれないので、コードを色々修正しました。 
ここでは一部だけですが、以下を修正しました。

  GameEngineInputHandler: {
    canHandle(handlerInput) {
      let { request } = handlerInput.requestEnvelope;
      console.log("main.GameEngineInputHandler: checking if it can handle " + request.type);
      return request.type === 'GameEngine.InputHandlerEvent';
    },
    handle(handlerInput) {
      console.log('Received game event');
      let { attributesManager } = handlerInput;
      let request = handlerInput.requestEnvelope.request;
      const sessionAttributes = attributesManager.getSessionAttributes();

      var gameEngineEvents = request.events || [];
      console.log(gameEngineEvents.length);
      for (var i = 0; i < gameEngineEvents.length; i++) {        
        switch (gameEngineEvents[i].name) {
          case 'button_down_event': {
            sessionAttributes.buttonCount += 1;
            let response = handlerInput.responseBuilder.getResponse();
            return response;
          }

結果

これでタイムアウトまでの時間の中で、100回ボタンをプッシュしましたが、50%程度までしか回数をカウントできませんでした。
そもそもJavaScriptがあまり得意じゃないので、コードを読み込んではないですが、時間を見つけて改善していければなとおもっています。
無駄に、ボタンをプッシュするスキルが今後公開できればなくらいにおもってます。

参考画像(手順)

skill-sample-nodejs-buttons-hellobuttons.png

AlexaとGoogleカレンダーを連携する

はじめに

AlexaのiPhoneアプリを使ってて、何ができるか色々探してたのですが、
めちゃくちゃ簡単にGoogleカレンダーと連携できたので、そのやり方を書いてみます。

AlexaとGoogleカレンダーの連携

1. Alexaアプリ起動

まずはAlexaアプリを起動します。左上の「≡」をタップします。
IMG_4478.PNG

2. 設定を開く

メニューが表示されるので、「設定」をタップします。
IMG_4479.PNG

3. カレンダー設定を開く

設定メニューが表示されるので、「カレンダー」をタップします。
IMG_4480.PNG

4. Googleアカウントを開く

カレンダーメニューが表示されるので、「Google」をタップします。他にもMicrosoftアカウントやAppleアカウント、Microsoft Exchangeとも連携できるので、結構便利ですね。
IMG_4481.PNG

5. アカウントリンク

アカウントをリンクするかを問われるので、「Continue」をタップします。
IMG_4482.PNG

6. ログインユーザー入力

ログインユーザーを入力する画面が表示されるので、GoogleアカウントIDを入力して、「次へ」をタップします。
IMG_4483.PNG

7. ログインパスワード入力

パスワードを入力する画面が表示されるので、Googleアカウントのパスワードを入力し、「次へ」をタップします。
IMG_4484.PNG

8. 【任意】2段階認証

次は、設定している人/していない人がいますが、僕は設定していますので、2段階認証のコードを入力し、「次へ」をタップします。(もし、2段階認証をしていない方がいたら、すぐにすることをオススメします。ココを読んで理解した上で設定してください。オススメアプリはAuthy(個人の見解)です。
IMG_4485.PNG

9. Googleアカウントへのアクセス許可

AlexaがGoogleアカウントへのアクセスを許可するかの確認になります。今回は利用するので、「許可」をタップします。
IMG_4487.PNG

10. カレンダーの紐付け

どのカレンダー情報とリンクするかの確認になります。今回はモザイクしていますが、メインのメールアドレスに紐付いてるカレンダー情報のみを利用するため、チェックは一つのみで行います。
IMG_4488.PNG

これだけ。
めちゃめちゃ簡単ですね。

デモ

実際に動かしてみました。ほんと簡単。

注目されるAlexa、そして開発中引っかかった話

External article

電話してみよ!

External article

ask-sdkの設計を覗き見る

この記事はなんちゃらですってのは↑で!

さて、みなさんAlexaのスキル開発やっていますか?
僕は、必要にかられたときにちょいちょいやってるって感じです。

なんでこの記事を書いているか

もともとv1で開発を行っているときに、もろもろの課題を感じていて結局フレームワークを自作してました。
ですが、同様の設計のものがv2としてリリースされたので書いてみようと思いました。

ちょいちょいルー大柴っぽくなってますがご愛嬌。

それではさっそく

Builder Pattern

GoFのResponseFactoryで使われています。
定義はResponseBuilderにあるので、今回はこちらを参照します。

必要な部分だけを抜き出したものがこちら

export interface ResponseBuilder {
    speak(speechOutput : string) : this;
    reprompt(repromptSpeechOutput : string) : this;
    withSimpleCard(cardTitle : string, cardContent : string) : this;
    /** more */
    getResponse() : Response;
}

これはQueryBuilderなどでよく見られるBuilderPatternを採用しています。

AlexaのResponseは定義から少しでも外れるとエラーを吐いてしまうので、ここで抽象化し扱いやすくしています。
利用者はBuilderを使って柔軟にResponseを生成することが可能になりました。
組み立て工程では this === ResponseBuilderのInstance を返却してメソッドチェーンを行いやすくしており、最後に getResponse() することで必要なオブジェクトを取得することができます。

利用例
return responseBuilder.speak("Hello")
    .reprompt("World")
    .withSimpleCard("title", "content")
    .getResponse();

BuilderPatternが活用されるのは、条件分岐が頻発するときなどでしょう。

あんまり意味のないサンプル
const builder = handlerInput.responseBuilder;
builder.speak("Hello");

if (somethingIf()) {
    builder.withSimpleCard("title", "content");
}

return builder.getResponse();

Resolver

パターンというよりレイヤーに近いんでしょうか。
Resolverという名前自体はよく見ますよね。
その名の通り、解決することを目的としており、利用者は 解決される側 を記述します。
Alexaでも同様で、 canHandle() がそれです。

canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
}

この canHandle() が生えたオブジェクトをSkillBuilderにaddすると、実行時にどのHandlerでhandleするかを解決できます。

これをResolverあり/なしで見ていきましょう。

Resolverあり
skillBuilder
  .addRequestHandlers(
    LaunchRequestHandler,
    HelloWorldIntentHandler,
    HelpIntentHandler,
    CancelAndStopIntentHandler,
    SessionEndedRequestHandler
  )
  .addErrorHandlers(ErrorHandler)
  .lambda();
Resolverなし
if (type === "LaunchRequest") {
    LaunchRequestHanlder.hanlde();
} else if (type === "IntentRequest") {
    if (name === "HelloWorldIntent") {
        HelloWorldIntentHandler.handle();
    } else if (type === "aaa") {
        /** サンプルすら書きたくないくらい冗長 */
    } else if () {
    } else if () {
    } else if () {
    } else if () {
    } else {
        ErrorHandler.hanlde();
    }
}

Intent増えるごとに else if 増えちゃいますよね。
サンプルすら書きたくないのに実務でやるのは絶対に嫌です。
SOLIDの原則のO === Open-Closed Principleを感じられる設計になっていて、拡張が容易ですね。

もっとやるならDecoratorPatternを採用し、SOLIDの原則に更に則りたいと思います。

DecoratorPatternを採用してHelloWorldのサンプルをこんな感じにするイメージです。

@RequestHanlder()
class LaunchRequestHandler implements RequestHandlerInterface {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
  }

  handle(handlerInput) {
    const speechText = 'Welcome to the Alexa Skills Kit, you can say hello!';

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .withSimpleCard('Hello World', speechText)
      .getResponse();
  }
};

SOLIDの原則については、 @hidenorigoto さんの続・SOLIDの原則ってどんなふうに使うの?というスライドがとても参考になるので是非読んでください。

終わりに

v1から大きく変更され、とても扱いやすいフレームワークになったask-sdkのv2の設計をちら見してみました。
「なんかよく見るぞ!」というコードおよびパターンを調べる際に、名前を知らないとどうも調べられない...ってことありますよね。
逆に名前を知ることで数珠つなぎに周辺の知識がついてくることが多いです。

Happy Coding!

Serverless Frameworkでnpmパッケージ(for Alexa)をLambda Layerにデプロイする

External article

TypeScriptでask-sdkの型を利用する

External article

Code StarでAlexa Skill Backendを作る

External article

SMAPI(Skill Management API)で公開済みAlexaスキルの情報を取ってくる

External article

Raspi2にAlexa Voice Service(AVS)を 〜AVS設定編〜

はじめに

2019年年始の(勝手にやってる)宿題の一貫でRaspiにAVSを入れるってのをやってみることにしました。
とりあえず、まずはいれるところまでを書いてみます。
最初はAlexa Voice Service(AVS)の設定です。

参考サイト

Raspberry PiでAlexa Voice Service(AVS)を利用する方法

AVSの設定

1. 開発者コンソールをクリック

まずは、 https://developer.amazon.com にアクセスし、右上の「開発者コンソール」をクリックします

avs001.png

2. AVS(Alexa Voice Service)をクリック

画面をスクロールし、「Alexa Voice Service」をクリックします。
avs002.png

3. 「開始する」

画面が遷移すると「開始する」ボタンが表示されるので、クリックします。
avs003.png

4. 「製品を作成する」

画面が遷移すると右上に「製品を作成する」ボタンが表示されるので、クリックします。
avs004.png

5. 製品情報の入力

これから作成する製品情報を入力していきます。入力情報については、以下の表を参考にしてください。

項目名 入力内容
製品名 今回の製品の名前を入力します。
製品ID 製品IDを入力します。この後は変更できないようなのでいいネーミングを決めてください
製品のタイプ 選択する項目は3つ。「Alexa内蔵のアプリケーション」とはAlexaが内蔵されたアプリケーションを作る場合で、最近では、「Reverb」とかがされに当たるかと思います。「Alexa内蔵の端末」とは、EchoやRaspiとかでつくられたものが該当するかと思います。「Alexaガジェット」ですが、最近では、色々なガジェットが増えてきています。たとえば、Echo Buttonとかがそれに該当するかと思います。
コンパニオンアプリの使用 コンパニオンアプリについては、こちらをご確認ください。今回は利用しませんので、「いいえ」を選択します。
商品カテゴリー 「ワイアレススピーカー」「ビデオとスマートTV」「コミュニケーション」「ウェアラブル」「自動車」「コンピューティング」「家電」「スマートホーム」「モバイルデバイス」「モバイルアプリ」「その他(指定してください)」が選択できます。「その他(指定してください)」を選択した場合は、下にテキストボックスが表示されるので、カテゴリーを入力してください。
製品概要 今回作成する製品の概要を入力してください。
エンドユーザと商品のやりとり 「タッチで開始される」とは、ボタンを押したり、押しながら対話するようなパターン、「ハンズフリー」とは、近距離で音声にて対話するようなパターン、「ファーフィールド」とは、遠距離からの音声にて対話するようなパターン
画像のアップロード エンドユーザに表示させるための画像を選択します。
商品の配信 この商品を今後、エンドユーザに配信するのかの確認です。
Alexa For Businessへの利用 Alexa For Businessを利用するかどうかの確認です。
AWS IoTの利用 AWS IoTを利用するかどうかの確認です。
AWSアカウントID(カンマ区切り)の提供お AWS IoTを利用する場合、AWSアカウントIDをココに入力します。複数ある場合は、カンマ区切りで入力します。
子供向け確認 この商品が子供向け(13歳以下)かどうかの確認です。

avs005.png

6. セキュリティプロファイルの設定 その1

LWA(Login with Amazon)セキュリティプロファイルの設定を行います。
セキュリティプロファイルを選択し、「プロファイルを新規作成する」をクリックし、
「セキュリティプロファイル名」と「セキュリティプロファイル記述」を入力し、「次へ」ボタンをクリックします。
avs006.png

7. セキュリティプロファイルの設定 その2

「許可された出荷地」と「許可された返品URL」に要求/応答のURLを入力します。
後で変更できるので、一旦それぞれ、「https://localhost:3000」「https://localhost:3000/authresponse」を入力しました。
その後、「これらの書面に合意します」チェックを行い、「完了する」ボタンをクリックします。

avs007.png

8. 登録完了

全ての登録が完了したので、「賞品が作成されました。」と表示されます。
「OK」ボタンをクリックします。
avs008.png

すると一覧画面が表示され、入力した製品名が表示されているかと思います。
avs009.png

9. 設定追加

後でわかったことですが、設定の追加が必要になります。
RaspiにAVSをいれてる途中で必要な設定が漏れていることに気づいたため、このタイミングで追加設定します。
本来は、 「7. セキュリティプロファイルの設定 その2」で行えばいい設定となります。

一覧画面で標示された製品名をクリックしてください。
「他のデバイスやプラットフォーム」をクリックすると「クライアントID」を入力できるので、任意の文字を入力して、「一般ID」ボタンをクリックしてください。
avs010.png

すると以下のような画面になるので、「DOWNLOAD」ボタンをクリックしてください。
avs011.png

ダウンロードした「Config.json」はこの後使いますので、保管しておいてください。

さいごに

これでAVS設定編の完了になります。
一旦、入力したところは多いですが、これらを使って、Raspi2をセットアップしていこうと思います。

関連記事

Raspi2にAlexa Voice Service(AVS)を 〜Raspi2にRaspbianをインストール編〜
Raspi2にAlexa Voice Service(AVS)を 〜Raspi2にAlexa Voice Service(AVS)をインストール編〜

Raspi2にAlexa Voice Service(AVS)を 〜Raspi2にRaspbianをインストール編〜

はじめに

2019年年始の(勝手にやってる)宿題の一貫でRaspiにAVSを入れるってのをやってみることにしました。
前回はAmazon Voice Service(AVS)の設定を行いました。
今回はRaspi2を使うので、インストールするところを書いてみます。

参考サイト

https://qiita.com/py_iK/items/9070fc58f69d8c063e44

前提条件

Raspberry Pi 2 modelB
macOS High Sierra バージョン10.13.6
microSD 16GB

Raspberry Pi2への書き込み

Raspberry Pi2にOSをinstallするために、microSDにRaspbianを書き込みます。

1. Raspbianのダウンロード

まずはRaspbianをここからダウンロードします。
今回利用したものは、 Raspbian Stretch with desktop です。

2. microSDの確認

microSDの初期化を行うために、PCにmicroSDを差し込みます。
OSが認識したらコマンドを実行して、パーティションを確認します。

$ diskutil list
/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                         500.3 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         500.0 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +500.0 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            176.0 GB   disk1s1
   2:                APFS Volume Preboot                 25.6 MB    disk1s2
   3:                APFS Volume Recovery                515.0 MB   disk1s3
   4:                APFS Volume VM                      10.9 GB    disk1s4

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.9 GB    disk2
   1:             Windows_FAT_32 boot                    62.9 MB    disk2s1
   2:                      Linux                         4.0 GB     disk2s2

microUSBが16GBなので、「/dev/disk2」になります。

3. 初期化前にmicroSDをアンマウント

次はフォーマットを行います。OSをinstallするための初期化になります。
microSDをアンマウントします。

$ diskutil unMountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

4. microSDを初期化

microSDを初期化します。デバイス名を「ALEXA-RASPI」としました。

$ diskutil eraseDisk MS-DOS ALEXA-RASPI /dev/disk2
Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s2 as MS-DOS (FAT) with name ALEXA-RASPI
512 bytes per physical sector
/dev/rdisk2s2: 30522224 sectors in 1907639 FAT32 clusters (8192 bytes/cluster)
bps=512 spc=16 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=30552064 bspf=14904 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2

5. もう一度、microSDをアンマウント

もう一度、microSDをアンマウントします。

$ diskutil unMountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

6. microSDにRaspbianを書き込み

先程ダウンロードしたRaspbianのイメージファイルを使って書き込みを行います。

$ sudo dd if=/Users/areaz_daiki/Desktop/2018-11-13-raspbian-stretch.img of=/dev/rdisk2 bs=1m
Password:
3248+0 records in
3248+0 records out
3405774848 bytes transferred in 240.679975 secs (14150637 bytes/sec)

7. microSDをRaspiに入れるために、アンマウント

これで書き込みが終わったので、microSDをアンマウントします。

$ diskutil unMountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

8. Raspiの電源をON

アンマウントが終わったら、microSDをPCから抜いて、Raspberry Pi2にいれて、電源をONにします。

9. 各種設定

Raspiを起動しました。これから設定を行っていきます。
ここで、事前にマウスとキーボードを用意し、Raspiに挿します。
後、モニタを用意してHDMIで接続しておくと便利です。

9.1. Welcome画面

Welcome画面が出てきますので、「Next」ボタンをクリックしてください。
IMG_2564.JPG

9.2. ロケーションの設定

以下の情報を設定して、「Next」ボタンをクリックします。

項目
Country Japan
Language Japanese
Timezone Tokyo

IMG_0906.JPG

9.3. デフォルトユーザのパスワード設定

デフォルトユーザの「pi」のパスワードは「raspberry」ですが、違う強度のあるパスワードに変更しろとのことですので、新しいパスワードを入力してください。入力しない場合は、「raspberry」のままとなります。
IMG_0021.JPG

9.4. WiFiの設定(SSID)

WifiのSSIDが表示されるので、接続するSSIDを選択して、「Next」をクリックします。
IMG_19141.jpg

9.5. Wifiの設定(パスワード)

Wifiのパスワード入力をして、「Next」をクリックします。
IMG_80861.jpg

9.6. ソフトウェア・アップデート

ソフトウェア・アップデートの画面が出てくるので「Next」をクリックします。
すると進捗バーが出てきます。
IMG_7891.JPG

9.7 再起動

セットアップが完了したら、再起動しないといけませんので、「Reboot」をクリックします。
IMG_7706.JPG

9.8 再起動完了

ということで、再起動完了です。
IMG_0016.JPG

9.9 OSのアップグレード

最後にアップグレードします。

$ sudo apt-get -y upgrade

9.10 pyenvをインストール

現時点のpythonのバージョンは 2.7.13 でした。

$ python --version
Python 2.7.13

今後、Python3.6系を利用したいので、Pyenvを使ってインストールしていくようにします。
そのPyenvを先にインストールします。そのために必要なパッケージのインストールをして、pyenvをgitからcloneします。

$ sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

次に、 ~/.bash_profileを開いて、以下を更新してください。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PATH:$PYENV_ROOT/bin"
eval "$(pyenv init -)"

更新が終わったら、反映するコマンドを実行します。

$ source ~/.bash_profile

念の為、pyenvが実行できるか確認します。

$ pyenv -v
pyenv 1.2.9-2-g6309aaf2

9.11 python 3.6系のインストール

次は、python3.6系をインストールします。最新の3.6系をインストールしたいので、まずは確認します。

$ pyenv install --list
Available versions:
...
3.5.6
3.6.0
3.6-dev
3.6.1
3.6.2
3.6.3
3.6.4
3.6.5
3.6.6
3.6.7
3.6.8
3.7.0
...

ということで、3.6.8をインストールして、切り替えをします。

$ pyenv install 3.6.8
$ pyenv global 3.6.8
$ python --version
Python 3.6.8

さいごに

これで、Raspi2へのインストール完了。
以前に作ったときは自分でネットワーク設定(無線LAN)とかやったんですが、最新のRaspbianだとUIで設定できます。(めっちゃ便利になりましたね)

関連記事

Raspi2にAlexa Voice Service(AVS)を 〜AVS設定編〜
Raspi2にAlexa Voice Service(AVS)を 〜Raspi2にAlexa Voice Service(AVS)をインストール編〜

Raspi2にAlexa Voice Service(AVS)を 〜Raspi2にAlexa Voice Service(AVS)をインストール編〜

はじめに

2019年年始の(勝手にやってる)宿題の一貫でRaspiにAVSを入れるってのをやってみることにしました。
前回はRaspberry Pi2にRaspbianをインストールするを行いました。
今回は、そのRasbianをインストールしたところにAlexa Voice Service(AVS)をインストールしてみます。

参考サイト

https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide-with-Script
https://developer.amazon.com/ja/docs/alexa-voice-service/input-avs-credentials.html
https://developer.amazon.com/ja/docs/alexa-voice-service/build-the-avs-device-sdk.html
https://developer.amazon.com/ja/docs/alexa-voice-service/get-a-refresh-token.html
https://developer.amazon.com/ja/docs/alexa-voice-service/talk-with-alexa.html
https://developer.amazon.com/ja/docs/alexa-voice-service/set-device-location.html
https://qiita.com/Dimeiza/items/182c4847d7c1ead7df54

前提条件

Raspberry Pi 2 modelB
macOS High Sierra バージョン10.13.6
microSD 16GB
Rasbian Stretch with desktop
WiFiに接続済み

AVSのインストール

それでは、RaspiにAVSをインストールしていきます。
内容は公式サイトに書いてる内容を実行していきます。

1. インストールスクリプトと設定ファイルのダウンロード

まずはインストールスクリプトや設定ファイルをダウンロードします。

wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh \
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/genConfig.sh \
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh

成功したらこんな感じになります。
IMG_3275.JPG

2. config.jsonの配置

AVSの設定編で取得したconfig.jsonを配置するときがやってきました。
今回の場合だと、「/home/pi/」配下にconfig.jsonを配置してください。

3. セットアップスクリプトの実行

先程ダウンロードしたセットアップスクリプトとconfig.jsonを使って、実行を行います。
最後に設定する数字はデバイスのシリアル番号となります。「-s」以降を設定しない場合は、
自動的にデバイスのシリアル番号は「123456」となります。
デバイスのシリアル番号は、任意で一意の英数字文字列(最大64文字)で形成します。

$ sudo bash setup.sh config.json -s alexa123456

実行すると以下のような画面になりますので、最後に「AGREE」と入力して、Enterキーを押してください。ちょっと時間がかかります。
avs101.png

しばらくすると
Press RETURN to review the license agreement and update the files.
と出力しますので、Enterキーを押してください。

その直後に、

Please type yes or no.
Do you accept this license agreement? [yes or no]:

と出力しますので、「yes」と入力してください。
この後、コンパイルが実行されてだいたい10〜15分程度で完了します。
IMG_3408.JPG

4. 承認と実行

デバイス上で初めてサンプルアプリケーションを実行するときは、クライアントにAVSへのアクセスを許可する必要があります。

次のコマンドを実行します。

$ sudo bash startsample.sh
...
...
######################################################
#       > > > > > NOT YET AUTHORIZED < < < < <       #
######################################################

############################################################################################
#     To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX}     #
############################################################################################

実行すると上記のような結果が出力されます。
メッセージの最後に、 「認証するためにはURLにアクセスして、「code」の後ろに書かれたコードを入力しろ」 と書かれているので、Raspberry Piのブラウザを立ち上げて、以下のURLにアクセスします。

https://amazon.com/us/code

するとAmazonのユーザー認証画面が表示されるので、サインインしてください。
IMG_9526.JPG

サインインしたら、先程出力されてた「code」の後ろに書かれたコードを入力して、「Continue」ボタンをクリックしてください。
IMG_0020.JPG

すると「Alexa Voice Services and Alexa Account Connection」という画面が表示されますので、「Allow」ボタンをクリックしてください。
IMG_0110.JPG

すると「Success!」画面が出ます。
IMG_1153.JPG

が、このタイミングでは、プロンプトにて実行していたプログラムが終了していた。
どうやら、プログラムが終了している状態では認証ができないようなので、もう一度コマンドを実行して、認証を行っていきます。

$ sudo bash startsample.sh
...
...
######################################################
#       > > > > > NOT YET AUTHORIZED < < < < <       #
######################################################

############################################################################################
#     To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX}     #
############################################################################################

この後に色々出力されますので、これを早く探してください。
(子のタイミングでプロンプトのメニュー「編集」→「設定」から「ディスプレイ」の「履歴の行数」を「100000」にしておくことをオススメします)
そして、またブラウザでURLを入力してください。
https://amazon.com/us/code
後は同じように、サインインしてコードを入力してください。
そうすることで、以下のようなログが出力されるようになります。

########################################
#       Alexa is currently idle!       #
########################################

これで、Alexaが動く状態にはなりましたが、まだ日本語対応していないので、このまま以下を実行します。

c 1 6 の順で実行すると以下のようになります。

c
+----------------------------------------------------------------------------+
|                          Setting Options:                                  |
| Change Language:                                                           |
|       Press '1' followed by Enter to see language options.                 |
+----------------------------------------------------------------------------+


1
+----------------------------------------------------------------------------+
|                          Language Options:                                 |
|                                                                            |
| Press '1' followed by Enter to change the language to US English.          |
| Press '2' followed by Enter to change the language to UK English.          |
| Press '3' followed by Enter to change the language to German.              |
| Press '4' followed by Enter to change the language to Indian English.      |
| Press '5' followed by Enter to change the language to Canadian English.    |
| Press '6' followed by Enter to change the language to Japanese.            |
| Press '7' followed by Enter to change the language to Australian English.  |
| Press '8' followed by Enter to change the language to French.              |
+----------------------------------------------------------------------------+


6
###################################
#       locale set to ja-JP       #
###################################

これで日本語対応が出来上がりとなります。
後は、いつもどおり、「Alexa」と声をかけてあげてください。

さいごに

「Alexa」と声をかけてみましたが、全然反応せず。
「Alexa」だけめっちゃ英語風な呼び方にすれば反応してくれました。
どうやら、ライブラリを追加することで改善するようですが、今回はここまでにします。
参考URL:https://qiita.com/Dimeiza/items/182c4847d7c1ead7df54
次回はこのあたりもやってみます。

関連記事

Raspi2にAlexa Voice Service(AVS)を 〜AVS設定編〜
Raspi2にAlexa Voice Service(AVS)を 〜Raspi2にRaspbianをインストール編〜

初めての Alexa Skill は Mastodon で(ベータ版)

External article

AlexaのPersistent AttributesをAppSyncからGraphQLで取得する

External article

Alexa SkillをCloudFormation(SAM)で管理す

External article

ASK CLIからLogin With Amazonする

External article

大掃除スキル

External article
Browsing Latest Articles All 17 Live