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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Dialogflow

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Node.js

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

Q&A

0回答

1806閲覧

DialogflowのエージェントとCloud Firestoreでデータのやり取りをしたい!!

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Dialogflow

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Node.js

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

0グッド

0クリップ

投稿2020/09/24 11:12

前提・実現したいこと

Dialogflow(US)で作成したエージェントをFulfillment機能のInline Editorを使って、Cloud Firestoreとデータのやり取り(追加・更新・削除)をしたいと思っています。
プロジェクトIDが同じなら!!と思い、色々なサイトを参考に取り組んでみたのですが、、
あえなく撃沈というか頓挫になってしまいました

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

単刀直入に立ち止まっている原因を記すと

warning, firebase_config environment variable is missing. initializing firebase-admin will fail

です。。
環境変数のFIREBASE_CONFIGが無いですよと警告されました
このままでも動くので、エージェントに任意の質問をしても

Function execution took 183 ms, finished with status: 'crash'

が返ってくるだけです(泣)

該当のソースコード

index.js (まずは何もいじらないでざっくりと該当箇所だけ)

const admin = require('firebase-admin'); admin.initializeApp(); const db = admin.firestore();

package.json (一応ノード8が濃厚説っぽいので、、)

{ "name": "dialogflowFirebaseFulfillment", "description": "This is your fulfillment for a Dialogflow agents using Cloud Functions for Firebase", "version": "0.0.1", "private": true, "license": "Apache Version 2.0", "author": "Google Inc.", "engines": { "node": "8" }, "scripts": { "lint": "semistandard --fix \"**/*.js\"", "start": "firebase deploy --only functions", "deploy": "firebase deploy --only functions" }, "dependencies": { "dialogflow": "^0.6.0", "firebase-admin": "^6.0.0", "firebase-functions": "^2.0.5", "dialogflow-fulfillment": "0.5.0", "actions-on-google": "2.3.0" } }

試したこと

1.「dialogflow firestore」と検索!
Dialogflowのインラインエディターを介してDialogflowをCloud Firestoreに接続する方法
→ここに記載されているサンプル通りに書きました

const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); const db = admin.firestore();

しかしFirebaseのガイド(Firebase SDK for Cloud Functions アップグレード ガイド: ベータ版からバージョン 1.0 以降へのアップグレード)では、v1.0.0以降ではfunctions.config().firebaseの代わりにprocess.env.FIREBASE_CONFIGを使用せよとのこと、、?
なので

const firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG); admin.initializeApp(firebaseConfig);

しかしエラーは消えず、、

console.log(process.env.FIREBASE_CONFIG);

を試したところ、、、undefined が返ってきました(泣)
そこで

process.env.FIREBASE_CONFIG = "{\"projectId\":\"プロジェクトID\",\"databaseURL\":\"https://プロジェクトID.firebaseio.com\",\"storageBucket\":\"プロジェクトID.appspot.com\",\"locationId\":\"asia-northeast1\"}"; const firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG); admin.initializeApp(firebaseConfig);

と無理やり突っ込んだところ、先ほどのログに返り値はあるものの

warning, firebase_config environment variable is missing. initializing firebase-admin will fail

missingが返ってきます(泣)
もしかして、リージョンが違うのが関係しているのか??
dialogflow:US
firestore:asia-northeast1
うーーん、、

2.Configの内容が足りないのでは、、
色々なサイトを駆け巡っていたら良さげなのがあったのですが

const firebaseConfig = { apiKey: "apiキー", authDomain: "プロジェクトID.firebaseapp.com", databaseURL: "https://プロジェクトID.firebaseio.com", projectId: "プロジェクトID", storageBucket: "プロジェクトID.appspot.com", messagingSenderId: "sender-id", appID: "app-id" }; admin.initializeApp(firebaseConfig);

ん?、、FirebaseのプロジェクトのマイアプリにWebアプリを作れということでしょうか??
これは試していないので、「それだよそれ!」という方がいましたら私を叱ってください、、

3.credentialは必要っぽい??
Firebaseのガイド(環境の構成)の通りに書くと

serviceAccount = require('./serviceAccount.json'); const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG); adminConfig.credential = admin.credential.cert(serviceAccount); admin.initializeApp(adminConfig);

なお、serviceAccountは読み込みにしたくないので

process.env.FIREBASE_CONFIG = "省略(上記と同じ)"; const serviceAccount = { "type": "service_account", "project_id": "プロジェクトID", "private_key_id": "秘密鍵のID", "private_key": "-----BEGIN PRIVATE KEY-----\n秘密鍵\n-----END PRIVATE KEY-----\n", "client_email": "firebase-adminsdk-固有値@プロジェクトID.iam.gserviceaccount.com", "client_id": "クライアントID", "auth_uri": "uri", "token_uri": "uri", "auth_provider_x509_cert_url": "url", "client_x509_cert_url": "url" }; const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG); adminConfig.credential = admin.credential.cert(serviceAccount); admin.initializeApp(adminConfig);

しかし

warning, firebase_config environment variable is missing. initializing firebase-admin will fail

4.違う形で試した(悪あがき)

admin.initializeApp({ credential: admin.credential.cert({ "type": "service_account", "project_id": "プロジェクトID", "private_key_id": "秘密鍵のID", "private_key": "-----BEGIN PRIVATE KEY-----\n秘密鍵\n-----END PRIVATE KEY-----\n", "client_email": "firebase-adminsdk-固有値@プロジェクトID.iam.gserviceaccount.com", "client_id": "クライアントID", "auth_uri": "uri", "token_uri": "uri", "auth_provider_x509_cert_url": "url", "client_x509_cert_url": "url" }), databaseURL: "https://プロジェクトID.firebaseio.com", projectId: "プロジェクトID", storageBucket: "プロジェクトID.appspot.com" });

でもダメでした。。エラーは消えませんし、関数を動かすとcrashしてしまいます

なにか根本的に違うのか、誤解があるのか、、
駆け出しのプログラマには分かりかねるところがあるので
どなたか解決法をお知りの方は教えてください!

5. Cloud FirestoreへのREST apiはどうか??
axiosを使って検証しましたが

warning, firebase_config environment variable is missing. initializing firebase-admin will fail

です。。crashですね

補足情報(FW/ツールのバージョンなど)

DialogflowのInline Editorを使用しています
パソコンはMac(関係ないかぁ)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問