Dialogflow Detect Intent Fulfillment - PullRequest
       1

Dialogflow Detect Intent Fulfillment

1 голос
/ 02 марта 2020

Привет! Я создал диалоговый поток nodejs, который обнаруживает намерения с помощью клиентской библиотеки для nodejs.

 const sessionPath = this.sessionClient.sessionPath(this.configService.get('dialogFlowProjectId'), sessionId);

        const request = {
            session: sessionPath,
            queryInput: {
                text: {
                    text: query,
                    languageCode: "en-US"
                }
            }
        };
        // Send request and log result
        Logger.log(request);
        const responses = await this.sessionClient.detectIntent(request);

, это прекрасно работает, но я также хочу вызвать выполнение для определенных намерений.

У меня настроен URL-адрес webhook - это прекрасно работает, когда вы используете чат в консоли диалогового потока. Но когда я использую созданный мною метод для отправки запроса в диалоговый поток, webhook не вызывается и переходит к резервному намерению. Я вызываю то же самое намерение через чат консоли диалогового потока и через мой собственный API.

Как я могу вызвать вызов webhook, когда я использую API клиентской библиотеки?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Для маршрутизации нескольких намерений через веб-крюк вам понадобится обработчик. js файл с маршрутизатором express в нем ...

const def = require('./intents/default')
const compression = require('compression')

const serverless = require('serverless-http')
const bodyParser = require('body-parser')

const { WebhookClient } = require('dialogflow-fulfillment')

const express = require('express')
const app = express()

// register middleware
app.use(bodyParser.json({ strict: false }))
app.use(function (err, req, res, next) {
  res.status(500)
  res.send(err)
})
app.use(compression())
app.post('/', async function (req, res) {
  // Instantiate agent
  const agent = new WebhookClient({ request: req, response: res })
  const intentMap = new Map()

  intentMap.set('Default Welcome Intent', def.defaultWelcome)

  await agent.handleRequest(intentMap)
})

module.exports.server = serverless(app)

Как видите, этот обработчик. js использует serverless-http и express.

Ваше намерение. js функция может выглядеть примерно так ...

module.exports.defaultWelcome = async function DefaultWelcome (agent) {

  const responses = [
    'Hi! How are you doing?',
    'Hello! How can I help you?',
    'Good day! What can I do for you today?',
    'Hello, welcoming to the Dining Bot. Would you like to know what\'s being served? Example: \'What\'s for lunch at cronkhite?\'',
    'Greetings from Dining Bot, what can I do for you?(Hint, you can ask things like: \'What\'s for breakfast at Annenberg etc..\' or \'What time is breakfast at Anennberg?\')',
    'greetings',
    'hey',
    'long time no see',
    'hello',
    "lovely day isn't it"
  ]
  const index = Math.floor((Math.random() * responses.length) + 1)
  console.log(responses[index].text)
  agent.add(responses[index].text)
}

Это дает вам голые кости для маршрутизации нескольких запросов через ваш webhook. Надеюсь, это поможет.

0 голосов
/ 02 марта 2020

Во-первых, помните, что вы не «вызываете намерение» ни через консоль тестирования, ни через API. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Если вы настроили так, чтобы он вызывал webhook Fulfillment, это должно произойти независимо от того, источник, пока инициируется само намерение.

То, что резервное намерение срабатывает, вместо этого предполагает, что что-то в тексте запроса не соответствует намерению, которое, по вашему мнению, должно совпадать. Я бы проверил, чтобы текст, который вы отправляете в query, соответствовал обучающим фразам для рассматриваемого намерения, что у вас нет входных контекстов, и что ваш агент настроен на код языка «en-US».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...