10
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にCSVを読み込ませる方法

Last updated at Posted at 2018-09-11

最短でAlexaにCSVを読み込ませる方法

需要があるかはわからないですが、AlexaにCSVを読み込ませることで
いろいろなことができます。例えば、オープンデータにはCSVのデータが多いので
ゴミのオープンデータを使ってゴミ出し情報のスキルを作ってみるなどいろんなことができます。
この記事の所要時間は約30分です。アカウントが作ってある場合やスキルの作り方を知っている場合は
10分もあればできると思います。

流れ

アカウント作成(5分)→関数の作成(3分)→スキルの作成(3分)→LambdaとAlexaSkillの連携(3分)
→ Node.jsのインストール(10分) → ファイルのダウンロード(3分) → スキル実行

アカウント作成

AWSアカウント
Alexaアカウント

AWSアカウントで関数の作成

AWSのlambdaというサービスを選んで関数の作成をします。
image.png
関数の作成は設計図を選んで、alexa-skill-kit-sdk-factskillを選択
※この時右上の地域が東京になっていることを確認してください。オハイオなどだと出てきません。
image.png

カスタムロールの作成を選ぶ。名前はなんでもオッケー。
image.png
別ページに飛んだらそのまま許可を選んでください。そして、関数を作成。
image.png
トリガーの追加でalexa skills kitを追加
image.png
一度ここまで設定が終わったら,alexaアカウントの方に移動します。

alexaアカウントでカスタムスキルの作成

あなたのAlexaコンソール→Skills→スキルの作成を選ぶ
image.png
新しいスキルを作成
スキル名はなんでもOK 言語は日本語で。
カスタムを選択→スキル作成
image.png
左メニューの呼び出し名をまずは決める。なんでもオッケー。
image.png
次に左メニューからインテントの追加を選択
名前はなんでもOKですが、アッパーキャメルケースにしましょう。(例:TestIntent)
要は単語と単語の間を大文字にすればいいです。
image.png
サンプル発話には、テストと入れておいてください。
そしてそのまま上部にあるモデルの保存を押した後にモデルをビルドを押して下さい。
モデルビルドができたら、左下にあるエンドポイントを押してください。
その後、エンドポイントにスキルIDというのがあるので、クリップボードにコピーしておいてください。

AWS lambdaとAlexaの連携

トリガーの設定で、先ほどコピーしたスキルIDを入れます。
そして、そのまま追加→右上の保存を押してください。
image.png

その後、AWSアカウント上部にあるlambdaのIDをコピーします。
ARN - arn:aws:lambda~~のarn:aws〜の部分をコピーしてください。

Alexaのエンドポイントのデフォルトの地域にコピーしたlambdaのidを入れます。
その後、上部にあるエンドポイントを保存を押します。
image.png

保存できたら上部にあるテストを選択
テストを有効にして、「アレクサ、<最初に決めた呼び出し名>を開いて」と入力
下記のように表示されたらAWSとAlexaが繋がりました。
image.png

Node.jsのインストール

そうしたら、いよいよこれからCSVを読み込めるようにしていきます。
下記を参照して,node.jsをインストールしてください。
Node.js / npmをインストールする(for Windows)
Macにnode.jsをインストールする手順。

サンプルダウンロード

こちらのサンプルをダウンロードしてね。
github

そして、cdコマンドで先ほどダウンロードしたフォルダまで移動してください。
移動したら
node -v で node.jsが入っているか確認してね。バージョンが出たらOKです。
次にnpm installとターミナルで入れてください。
色々インストールされると思います!

$ cd ~/Alexacsv-master
$ node -v
v10.9.0(versionの数字はなんでもOK)
$ npm install

サンプルファイルのZIP化

Windows

Zipにしたいフォルダを右クリックして、送る→フォルダを圧縮(ZIP形式)。

Mac

ターミナルで該当フォルダの場所まで移動し、下記コマンドを実行。

rm ../フォルダ名.zip; zip -r ../フォルダ名.zip .

AWS lambdaへのアップロード

前回作成したlambda関数を編集します。

コードエントリタイプのコードをインラインで編集を
zipフォルダをアップロードに変えて、先ほどのZIPフォルダをアップロードしてください。

image.png

Alexaのテスト

サンプル1と表示されればOKです。image.png

Alexaよくある質問

AWSのlambdaでAlexaのサンプル関数が出ないんだけど?

画面右上部の地域を確認してください。
オハイオになっていたら東京にしてください。

インテントって何?

大雑把に言うと、会話の分類みたいなものです。
標準であるインテントとしてStopIntent,HelpIntent,CancelIntentがあります。

StopIntent: 終了したい時に分類される。「ストップ」「またね」などと伝えるとStopIntentが呼ばれ、動作が終了する。

HelpIntent: スキルの使い方を知りたい時に分類される。「助けて」「ヘルプ」などと伝えるとHelpIntentが呼ばれる。

CancelIntent: 発話をキャンセルしたい時に分類される。「キャンセル」「やめて」などと伝えるとCancelIntentが呼ばれる。一個前の会話をもう一度分岐させたい場合などに使用する。

カスタムインテントとして、自分でIntentを作ることもできます。
例えば、星座占いのスキルを作る場合ならFortuneIntentみたいな名前をつけて
占いに関係する用語が喋られた時にFortuneIntentに分岐をさせるといった使い方をします。
占いに関係する用語をどのように定めるかというと、次に説明するスロットを使います。
カスタムインテントにはスロットを設定することができます。

スロットって何?

大雑把にいうと、分類のために使う辞書みたいなものです。
占いに関係する用語を分類させるFortuneIntentというものを作った時にその用語をスロットとして登録しておく必要があります。例えば、星座占いなら蟹座、山羊座といった星座をseizaというような名前を付けて、スロットに登録します。
そして、カスタムインテントのサンプル発話の部分に{seiza} です。というような使い方をすると、ユーザの入力に合わせてそこのseizaの部分が変わるので、コード側でseizaの部分だけ取得することができ、その結果に応じて分岐を行ったりさせます。

スキルからの応答に問題があります。って出たんだけど?

何らかのエラーがあります。
コードにエラーがある場合とアレクサのインテントやスロットなどにエラーがある場合があります。
コードにエラーがある場合は、SDKなどの開発環境で調べるか、paiza.ioなどを使って調べましょう。アレクサ側のエラーは、どのインテントに分類しているかなどを調べる必要があるので、CloudWatchなどのログを見るか、Alexaスキル開発の際のテストの部分でどこのIntentに分岐しているかを見て、原因を調べましょう。

参考

Alexaスキル開発トレーニングシリーズ 第1回 初めてのスキル開発 (改訂版)
Node.js / npmをインストールする(for Windows)
Macにnode.jsをインストールする手順。

最後に

長くなりましたが、AlexaでCSVを読み込ませる方法を簡潔にまとめました。
試してみて、ここが詰まったというところや、できなかった!という意見があれば、コメント欄で是非教えてください。

10
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
10
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?