Я пытаюсь реализовать собственное окно чата для чат-бота DialogFlow. AFAIK, мне нужно создать сервер для обработки запросов из окна чата, переслать их в DialogFlow для ответа, а затем вернуть этот ответ в окно чата. Я следовал за сэмплом из клиентского SDK DialogFlow Node.js (шаг 6: «Попробуйте пример») и получил следующее:
require('dotenv').config()
const dialogflow = require('dialogflow');
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
const sessionClient = new dialogflow.SessionsClient({
credentials: {
client_email: process.env.CLIENT_EMAIL,
private_key: process.env.PRIVATE_KEY
}
});
async function getResponse(req, res) {
// A unique identifier for the given session
console.log("body", req.body);
const sessionId = req.body.session.split('/').pop();
// Create a new session
console.log("session", sessionId)
const sessionPath = sessionClient.sessionPath(process.env.PROJECT_ID, sessionId);
// The text query request.
const request = {
session: sessionPath,
queryInput: {
text: {
// The query to send to the dialogflow agent
text: req.body.queryResult.queryText,
// The language used by the client (en-US)
languageCode: 'en-US',
}
}
};
console.log("send request", request)
// Send request and log result
const responses = await sessionClient.detectIntent(req);
const result = responses[0].queryResult;
res.json(result);
}
app.post('/', getResponse);
app.get('/', (req, res) => res.send('Use POST'));
app.listen(PORT, () => {
console.log('Server is running on PORT:',PORT);
});
Хотя исходный сэмпл сработал, отправкаPOST-запрос к моему серверу с использованием Postman дает мне эту ошибку:
(node:724) UnhandledPromiseRejectionWarning: Error: 3 INVALID_ARGUMENT: Resource name '' does not match 'projects/*/locations/*/agent/environments/*/users/*/sessions/*'.
at Object.callErrorFromStatus (C:\Users\rudyt\Documents\Github\metbot-fulfillment\node_modules\@grpc\grpc-js\build\src\call.js:30:26)
at Http2CallStream.call.on (C:\Users\rudyt\Documents\Github\metbot-fulfillment\node_modules\@grpc\grpc-js\build\src\client.js:96:33)
at Http2CallStream.emit (events.js:194:15)
at process.nextTick (C:\Users\rudyt\Documents\Github\metbot-fulfillment\node_modules\@grpc\grpc-js\build\src\call-stream.js:75:22)
at process._tickCallback (internal/process/next_tick.js:61:11)
(node:724) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:724) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Я не уверен, откуда эта ошибка, есть ли проблема с тем, как я отформатировал запрос в моей функции getResponse или есликак-то это связано с почтальоном? Я делаю запрос (на стороне Почтальона) с POST на http://localhost:3000 с заголовком Content-Type
, установленным на application/json
, и телом запроса, установленным как необработанный JSON (я вставил в этом примере Webhook запрос ). Я склоняюсь к проблеме, связанной с запросом к DialogFlow, но я включил информацию Почтальона на всякий случай.