質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Q&A

0回答

397閲覧

Google Apps Scriptのアクセス範囲の設定

yuuoru

総合スコア8

Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

0グッド

1クリップ

投稿2018/05/21 06:52

編集2018/05/23 05:05

GASとLambdaを使い、音声UI Alexaのカスタムスキル を作成しているのですが、GASのアクセス範囲の制限の仕方でわからなくなってしまったので質問です。
どれも初めて使ったもので、このような質問の場も初めてなので、説明に足りない部分があったら教えていただけると嬉しいです。

#疑問点
特定のLambdaからのみGASにアクセスできるようにする方法

#作りたいもの
今作っているのは、「Alexa、●●さんの予定教えて」と聞くと、その名前の人の予定をとってきてくれるスキルを作っています。参考にしているのはこのサイトです。http://azure.sios.jp/archives/8450

うまく質問を短文にできないので、流れを追いながら質問させてください。

#今やっていること
スキルの簡単な動きの流れとしては、

  1. 話しかける「Alexa、田中さんの予定教えて」
  2. Lambdaに名前が渡される
  3. LambdaがGASを呼ぶ
// Google Apps Scriptで導入した後に表示されたURL(現在のWebアプリケーションのURL)を // 設定します。 const uri = 'WebアプリケーションのURL' + '?name=' + name; // Google Apps ScriptのRest APIにアクセスして、JSONを取得する関数を呼びます。 getHttp(uri,this);

4. GASが名前をゲットし、カレンダーにアクセスする

function doGet(e) { // クエリパラメーター「name」で指定された、Googleカレンダー取得対象のユーザーの名前を取得する。 var name = e.parameter.name; // ユーザーが発話した名前(「〇〇さんの今日の予定を教えて」の〇〇の部分)に紐づく // メールアドレスを定義する。Googleカレンダーの予定を取得する際は、 // そのキーにメールアドレスを指定しなければならないので、この変換が必要になる。 var mail = {}; mail['たなか'] = 'たなかのgmailのアドレス'; mail['やまだ'] = 'やまだのgmailのアドレス'; // 指定したユーザーのGoogleカレンダーの予定を取得する。 var cal = CalendarApp.getCalendarById(mail[name]); // 現時点のDateを生成する var nowDate = new Date(); // 今日の日付の00:00:00時点のDateを生成する var startDate = new Date(nowDate); startDate.setHours(0); startDate.setMinutes(0); startDate.setSeconds(0); // 今日の日付の23:59:59時点のDateを生成する var endDate=new Date(startDate); endDate.setHours(23); endDate.setMinutes(59); endDate.setSeconds(59); // 今日一日のGoogleカレンダーの予定を取得する var myEvents=cal.getEvents(startDate,endDate); // 今日一日のGoogleカレンダーのJSONを生成する。 var body = ''; num = 0; var result = []; var fullTitle = ''; var evtTitle = ''; for each(var evt in myEvents){ result[num] = { start: convertDate(evt.getStartTime()), end: convertDate(evt.getEndTime()), place: evt.getLocation(), title: evt.getTitle() } num++; } } } return ContentService .createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); } function convertDate(date) { //moment.jsで日付の形式を合わせる(上記コメントアウトとやってることは一緒。便利) return Utilities.formatDate(date, 'JST', 'yyyy-MM-dd HH:mm:ss'); } function toDoubleDigits(num) { num += ""; if (num.length === 1) { num = "0" + num; } return num; }

5. GASでカレンダーをもとに予定を検索。JSON形式にしてLambdaに返す
6. Lambdaが受け取ったJSONデータをもとに予定を喋る

と言った感じです。

#以上を踏まえてわからないこと
上の3の部分でLambdaがGASを利用できるよう、GASのアプリケーションにアクセスできるユーザーは、全員(匿名含む)にしています。
ですが、このままだと誰でもカレンダーの情報にアクセスできてしまいセキュリティ上よろしくないので、Lambdaから呼ばれた時だけアクセスできる的な制限・認証処理か何かを追加したいと思っています。

最初はアプリケーションにアクセスできるユーザーの範囲を狭くすればいいかな?と思いましたが、全員(匿名含む)でなければAlexa(Lambda)からGASを呼べないとわかり断念。
OAuth認証というものを使えばできるのかと思い調べてみましたが、仕組みや使い方がわからず困っています。

読みづらくなっておりすみません。
どなたかお力添えいただけると嬉しいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問