Slide 1

Slide 1 text

Airtableをスキル開発で 試してみた 【大阪】スマートスピーカーミーティング 3/28 LT by kun432

Slide 2

Slide 2 text

アジェンダ ● 自己紹介 ● 前回のあらすじ ● Airtableを使ったスキル開発 ● まとめ 2

Slide 3

Slide 3 text

自己紹介 1

Slide 4

Slide 4 text

Hello! Kuniaki Shimizu (@kun432) - 通信事業者系ISPのインフラエンジニア - 最近はWiFIのシステム開発・構築・運用 - Twitter/Facebook/Github/はてなブログ/Alexa - ポートフォリオ: https://kun432.github.io/ 4 ❤

Slide 5

Slide 5 text

My Skills 5 - Alexa (JP): 8 - Google: 1 - Clova: 1 100個までの道のりは長い、、、 - Alexa (US): 1

Slide 6

Slide 6 text

前回のあらすじ 2

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

8 https://speakerdeck.com/kun432/alexa-hosted-and-blueprints-review

Slide 9

Slide 9 text

前回のあらすじ 9 - Alexa開発者コンソールとAWSを組み合わせるのが 基本だけど、めんどくさいし、初心者には優しくないよ! - Alexa Hosted使えば開発者コンソールだけで完結 するよ! - 注意すべきことはあるけど、ごくごく一般的なスキルならほ とんどのことができるよ! - AWSそのうち覚えればいいよ!

Slide 10

Slide 10 text

Alexa Hostedでは できないこと 10

Slide 11

Slide 11 text

11

Slide 12

Slide 12 text

12 https://speakerdeck.com/hideokamoto/alexa-db

Slide 13

Slide 13 text

13 https://speakerdeck.com/hideokamoto/alexa-db?slide=2 9

Slide 14

Slide 14 text

データベース的な 要素が足りない 14

Slide 15

Slide 15 text

AWSを覚えて DynamoDB 使うしかないのか 15

Slide 16

Slide 16 text

なにか他の選択肢は ないか? 16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

Airtableをスキル開発で 試してみた 3

Slide 19

Slide 19 text

19 ● 2015年にスタートした、サンフランシスコのスタートアップ企 業のサービス ● 「Excel/Google Sheets + Access」をブラウザで ○ スプレッドシートの見た目でデータベースが使える ● 無料プラン ○ データベース数無制限 ○ 1データベースあたり1200レコードまで ○ 多数のテンプレートをベースにするもOK、イチから作成 するもOK(テンプレートはほんと多数) ○ API経由で操作可能 ● InvocableやVoiceflowでの連携例あり

Slide 20

Slide 20 text

20 ● 2015年にスタートした、サンフランシスコのスタートアップ企 業のサービス ● 「Excel/Google Sheets + Access」をブラウザで ○ スプレッドシートの見た目でデータベースが使える ● 無料プラン ○ データベース数無制限 ○ 1データベースあたり1200レコードまで ○ 多数のテンプレートをベースにするもOK、イチから作成 するもOK(テンプレートはほんと多数) ○ API経由で操作可能 ● InvocableやVoiceflowでの連携例あり!

Slide 21

Slide 21 text

Alexa Hostedでも できるはず 21

Slide 22

Slide 22 text

22 Let’s Try!!!

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

24 “Start from scrath” を選択

Slide 25

Slide 25 text

25 ・Excel感覚で入力できる ・カラムの型も指定できる ここが キーに なる

Slide 26

Slide 26 text

26

Slide 27

Slide 27 text

27

Slide 28

Slide 28 text

28

Slide 29

Slide 29 text

29

Slide 30

Slide 30 text

30

Slide 31

Slide 31 text

31

Slide 32

Slide 32 text

32

Slide 33

Slide 33 text

33

Slide 34

Slide 34 text

34

Slide 35

Slide 35 text

35 Alexa hostedで やってみた

Slide 36

Slide 36 text

36 const Alexa = require('ask-sdk-core'); const Airtable = require('airtable'); const airtable_key = ‘XXXXXXXXXXXXXXX’; // APIキー const base_id = 'XXXXXXXXXXXXXXX'; // データベースID const base = new Airtable({ apiKey: airtable_key }).base( base_id ); ・・・ ・・・ "aws-sdk": "^2.326.0", "airtable": "^0.5.10" } } - package.json - index.js

Slide 37

Slide 37 text

37 SELECT

Slide 38

Slide 38 text

38 const StatusCodeIntent = { canHandle(handlerInput) { ・・・ }, async handle(handlerInput) { ・・・ let searchResult = await base('status codes').select({ // status codes filterByFormula: "{Status}='" + codeValue + "'", // テーブルのStatus maxRecords: 1, // を指定のキー }).all(); // で検索 - index.js (続き) ● APIドキュメント通りにやると、非同期の制御ができなかった ● Airtableのフォーラムで似たようなことを問い合わせている人が いたので、それを参考にさせてもらったらできた! ● ここにたどり着くのに3,4日、、、JSもっと勉強しないと ● ドキュメントよりもシンプルにかけたので良しとする

Slide 39

Slide 39 text

39 [{ "_table": { "_base": { "_airtable": { "requestTimeout": 300000 }, "_id": "appPphK8s2uEGZQex" }, "id": null, "name": "status codes" }, "id": "rece7SAufplQwURiK", // レコードID(UPDATE/DELETEで必要) "_rawJson": { "id": "rece7SAufplQwURiK", "fields": { "Status": "404", "Desc": "Not Found(未検出)" }, "createdTime": "2019-03-25T12:00:12.000Z" }, "fields": { "Status": "404", "Desc": "Not Found(未検出)" } }]

Slide 40

Slide 40 text

40 if( searchResult.length > 0 ){ const speechText = `ステータスコード${codeValue}は、` + ${searchResult[0].fields.Desc}、です。`; return handlerInput.responseBuilder .speak(speechText) .getResponse(); } else { const speechText = `ステータスコード${codeValue}は登録されていません。`; return handlerInput.responseBuilder .speak(speechText + promptText) .reprompt(promptText) .getResponse(); } - index.js (続き)

Slide 41

Slide 41 text

41

Slide 42

Slide 42 text

42 INSERT/UPDATE /DELETE

Slide 43

Slide 43 text

43 時間切れ・・・

Slide 44

Slide 44 text

44 https://developer.amazon.com/ja/blogs/alexa/post/1177ab8f-9ece-48e4-8035-e9967c7a269a/how-to-make-it-eas y-for-teams-to-contribute-content-to-your-alexa-skill

Slide 45

Slide 45 text

45 https://github.com/jeffblankenburg

Slide 46

Slide 46 text

まとめ 4

Slide 47

Slide 47 text

まとめ 47 - お手軽データベース - 見た目も綺麗で、普通の人が更新しやすい - チームでスキルの開発・運用ができる(これ重要!) - 開発の取っ掛かりとしては揃っている - 動的なAPIドキュメント - フォーラム等も活発 - 無料プランで結構使える - 制限だけ注意 - 最大1200件だとINSERTが多いと頭打つかも(有料ならOK) - 5リクエスト/秒を超えると30秒アクセス不可 - その他 - 有料プランならグラフも作成できる(BI) - Googleスプレッドシートもおすすめ!

Slide 48

Slide 48 text

48 外部DB/API連携して 少しづつ、スキル開発の 幅を広げよう!

Slide 49

Slide 49 text

49 余談

Slide 50

Slide 50 text

50 Voiceflowなら airtable/google sheets もっと簡単に使えますよ!

Slide 51

Slide 51 text

51 しかも 完全ノンコーディング!

Slide 52

Slide 52 text

52

Slide 53

Slide 53 text

53 Voiceflowの話でLTします!お時間あれば是非!

Slide 54

Slide 54 text

54 Thanks! Any questions?