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

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

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

Dialogflowは、Googleが提供している自然言語対話プラットフォーム。音声入力で自然言語の解析を行ってくれる機能で、対話型アプリを簡単に作成することが可能です。

Google Apps Script

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

0回答

1168閲覧

Node.jsでのリダイレクト処理の実装

hrt9092

総合スコア0

Dialogflow

Dialogflowは、Googleが提供している自然言語対話プラットフォーム。音声入力で自然言語の解析を行ってくれる機能で、対話型アプリを簡単に作成することが可能です。

Google Apps Script

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2021/07/18 07:51

前提・実現したいこと

Google Cloud Functions(厳密にはDialogflowのFulfillmentのInline Editor上)で、
Google Apps Scriptへアクセスし機能を実行するコードを書いています。

GASのプロジェクトはWebアプリケーションとして導入し、以下を参考にHTTPS APIで
呼び出しています。
https://qiita.com/takatama/items/c8146faf9f04fc6b0698#http-api--json-api-%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99

GETメソッドでアクセスはできたのですがGASの場合はリダイレクトが必要なようで、Node.jsで実現する方法が分からず、教えていただきたいです。

発生している問題・エラーメッセージ

アクセスした際に以下メッセージが表示されます。

<HTML> <HEAD> <TITLE>Moved Temporarily</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Moved Temporarily</H1> The document has moved <A HREF="https://script.googleusercontent.com/macros/echo?user_content_key=XXXXXXXXXXXXXX">here</A>. </BODY> </HTML>

該当のソースコード

nodejs

1'use strict'; 2 3const functions = require('firebase-functions'); 4const { dialogflow } = require('actions-on-google'); 5 6const app = dialogflow(); 7 8const https = require('https'); 9const get = (url) => new Promise((resolve, reject) => { 10 https.get(url, (response) => { 11 const { statusCode } = response; 12 if(statusCode === "302"){ 13 //ここにリダイレクト処理? 14 return; 15 } 16 if(statusCode === "200"){ 17 const body = ''; 18 response.on('data', (chunk) => body += chunk); 19 response.on('end', () => resolve(body)); 20 return; 21 } 22 }).on('error', reject); 23}); 24 25const SEARCH_INTENT = 'Search'; 26 27app.intent(SEARCH_INTENT,conv => { 28 29 const options = { 30 hostname: 'script.google.com', 31 path: '/macros/s/XXXXXXXXXXXXXXXXXXX/exec', 32 followAllRedirects : true, 33 headers: { 34 'Content-Type': 'application/json', 35 'Authorization': 'Bearer ' + 'XXXXXXXXXXXXXXXXXXXXXXXXXX' 36 } 37 }; 38 return get(options).then(response => { 39 conv.close(JSON.parse(JSON.stringify(response))); 40 }); 41}); 42 43exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問