Я создаю бота в Dialogflow, и я использую Dialogflow-выполнение для динамического ответа и базу данных реального времени Firebase в качестве базы данных.
То, что я пытаюсь сделать здесь, - это предположить, что больница, которая предоставляет определенное учреждение, имеет несколько центров (мест) в стране. Теперь, когда пользователь запрашивает такую больницу, бот должен иметь возможность выводить ему местоположение близлежащей больницы. У меня есть список всех таких больниц (с уникальной широтой и долготой) в базе данных реального времени Firebase. Мой подход заключается в том, что я получу точное местоположение пользователя и сравню его с местами, доступными в базе данных, чтобы найти ближайшую больницу. Теперь я хочу вывести информацию об этой больнице пользователю с дополнительной информацией (например, адрес больницы, контакт, веб-сайт, часы работы и т. Д.) С использованием Google Place API (у меня есть платежный аккаунт и ключ API).
Хотя я могу получить точное местоположение пользователя по долготе и широте, я сталкиваюсь с некоторыми проблемами при работе с Google Place API. Вот некоторые ошибки, которые я получаю в «Журналах Firebase»:
Warning, estimating Firebase Config based on GCLOUD_PROJECT. Initializing firebase-admin may fail
и
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11)
at ServerResponse.header (/var/tmp/worker/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/var/tmp/worker/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/var/tmp/worker/node_modules/express/lib/response.js:267:15)
at callPlaceAPI.then.catch (/user_code/index.js:480:34)
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
Я попытался изменить много разных способов инициализации firebase-admin, но вышеупомянутая ошибка остается той же. Я сделал это:
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: "https://test-dia.firebaseio.com"
});
process.env.DEBUG = 'dialogflow:debug';
и даже это:
dmin.initializeApp({
credential: admin.credential.cert({
"type": "service_account",
"project_id": "took from Firebase Generated Private Key",
"private_key_id": "took from Firebase Generated Private Key",
"private_key": "took from Firebase Generated Private Key",
"client_email": "took from Firebase Generated Private Key",
"client_id": "took from Firebase Generated Private Key",
"auth_uri": "took from Firebase Generated Private Key",
"token_uri": "took from Firebase Generated Private Key",
"auth_provider_x509_cert_url": "took from Firebase Generated Private Key",
"client_x509_cert_url": "took from Firebase Generated Private Key"
}),
databaseURL: "https://test-dia.firebaseio.com"
});
process.env.DEBUG = 'dialogflow:debug';
Мой package.json
:
{
"name": "dialogflowFirebaseFulfillment",
"description": "This is the default 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": {
"start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
"deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
},
"dependencies": {
"actions-on-google": "^2.5.0",
"firebase-admin": "^5.13.1",
"firebase-functions": "^2.0.2",
"dialogflow": "^0.6.0",
"dialogflow-fulfillment": "^0.6.0"
}
}
Не могли бы вы помочь мне понять проблему? Мой index.js содержит более 600 строк кода, но я предоставляю ссылку на него для вашего рассмотрения. Здесь: https://gist.github.com/shivam-k/49cfd05b36eb52d219f99b20cf285f03
Важная вещь, прежде чем вы начнете читать код:
- Код вашего интереса начинается со строки 353. Потому что только после этого я беру адрес и звоню в Google Place API.
- Подход к анализу результатов, о котором вы упоминали в последнем письме, состоит из двух частей.
- Выполнение вызова из основной функции в функцию, которая содержит проанализированный результат. Хотя я все еще не получаю никакого результата.
- Выполнение вызова из главной функции в функцию, которая содержит проанализированный результат, начинается со строки 451.
- Функция, содержащая вызов API Place и результаты анализа, начинается со строки 499.
- JSON получил (я взял это из документации для целей тестирования) от вызова, сделанного для testAPI ниже.
Будем весьма благодарны за любые предложения о том, как позвонить в Place API и проанализировать результаты. Ваш любой совет будет очень обнадеживающим для меня.
{
"candidates" : [
{
"formatted_address" : "140 George St, The Rocks NSW 2000, Australia",
"name" : "Museum of Contemporary Art Australia",
"opening_hours" : {
"open_now" : false
},
"photos" : [
{
"height" : 3492,
"html_attributions" : [
"\u003ca href=\"https://maps.google.com/maps/contrib/105784220914426417603/photos\"\u003eKeith Chung\u003c/a\u003e"
],
"photo_reference" : "CmRaAAAA4fqUuhQuWUh11h_QEJJY5c14dM5V6tRjv9662oZdRxQdyvnmzK6b2ENgL9dtUb_bkSnIUTAzEmxdtJfLFQ1H_eqHDJkkiTedPu664OqkUOtxAfoBPCU01FOI1nN9RifJEhA47TjtbpLsT_yU6mfs8VZKGhRef9lr97rh2asJsCF3XBM-TH-InA",
"width" : 4656
}
],
"place_id" : "ChIJ68aBlEKuEmsRHUA9oME5Zh0"
}
],
"status" : "OK"
}