Я пытаюсь использовать функцию updateIntent, которая является частью клиентской библиотеки Dialogflow v2 для Node.js. Причина, по которой я пытаюсь его использовать, заключается в том, чтобы иметь возможность добавлять обучающие фразы к намерению.
Я не могу пройти мимо этого. Вот код, который я использую для этого !:
Моя функция GetIntent:
async function getIntent(intentId) {
try {
let responses = await intentsClient.getIntent({name: intentId, intentView: 'INTENT_VIEW_FULL'})
const response = responses[0]
// console.info(response)
return new Promise((resolve, reject) => {
resolve(response)
})
} catch (err) {
return new Promise((resolve, reject) => {
reject(err)
})
}
}
Моя функция UpdateIntent:
async function updateIntent(intent) {
const request = {
intent: intent,
languageCode: 'en-US',
updateMask: {
paths: ['trainingPhrases']
},
intentView: 'INTENT_VIEW_FULL'
}
try {
let responses = await intentsClient.updateIntent(request)
return new Promise((resolve, reject) => {
resolve(response)
})
} catch (err) {
console.info(err)
return new Promise((resolve, reject) => {
reject(err)
})
}
}
Функция, которая его вызывает:
async function testUpdateTraining () {
try {
let intent = await getIntent('projects/small-talk-1-406ae/agent/intents/ac7f0b68-de5c-4b6f-9393-358dd2b0c1bd')
let trainingPhrase = { parts: [{ text: 'How should I behave on the trails?'}],
type: 'EXAMPLE'}
intent.trainingPhrases.push(trainingPhrase)
try {
let updatedIntent = await updateIntent(intent)
} catch (e) {
console.info(e)
console.info('failed to update the intent')
}
} catch (err) {
console.info('failed to get intent')
}
}
А вот что странно - я получаю ответ 200 на вызов клиентской библиотеки. В документе Api указано, что при успешном ответе вы получите объект намерения. Я получаю намеренный объект с обучающими фразами внутри ...
[![{ inputContextNames: \[\],
events: \[\],
trainingPhrases:
\[ { parts: \[Array\],
name: 'ad0d1f6a-78cf-4e0b-84ca-ec62a45c75dc',
type: 'EXAMPLE',
timesAddedCount: 0 },
{ parts: \[Array\],
name: 'e33cce4b-96ee-4e35-a151-5b09ff603817',
type: 'EXAMPLE',
timesAddedCount: 0 },
{ parts: \[Array\],
name: '7d9b7c56-5fa8-4791-986f-e57b9f90d431',
type: 'EXAMPLE',
timesAddedCount: 0 } \],
outputContexts: \[\],
parameters: \[\],
messages:
\[ { platform: 'PLATFORM_UNSPECIFIED',
text: \[Object\],
message: 'text' } \],
defaultResponsePlatforms: \[\],
followupIntentInfo: \[\],
name: 'projects/small-talk-1-406ae/agent/intents/ac7f0b68-de5c-4b6f-9393-358dd2b0c1bd',
displayName: 'faq.offroad.card1answer',
priority: 500000,
isFallback: false,
webhookState: 'WEBHOOK_STATE_UNSPECIFIED',
action: 'faq.offroad.card1answer',
resetContexts: false,
rootFollowupIntentName: '',
parentFollowupIntentName: '',
mlDisabled: true }][1]][1]
Это то, что есть в диалоговом потоке. Здесь только две обучающие фразы, та, которую я добавил программно, не отображается.
Итак, мой вопрос: как я могу отформатировать запрос, чтобы без проблем обновлять обучающие фразы? Есть ли пример, который я могу убежать?
Попробуйте удалить updateMask (закомментируйте), и у меня это сработало.
@AkshayL еще нет!
Я сделал это безрезультатно :(
У меня это работает
@AkshayL вот и все? просто обновить маску?
Можете ли вы поделиться функцией getIntent?
@AkshayL отредактирует вопрос
это сработало ??? Вы пытаетесь добавить в светскую беседу?
Это сработало! Это странно, потому что я думал, что пробовал этот вариант, но я думаю, что нет!
эта библиотека может помочь в получении списка намерений простым способом, npmjs.com/package/dialogflow-helper Я написал эту библиотеку поверх клиента отдыха диалогового потока





После многих попыток я понял, что мой код работает, потому что я удалил маску обновления. И languageCode тоже, потому что он выдавал мне ошибку. Код, как показано ниже, работает нормально. Проверь это.
Это функция getIntent:
async function getIntent(intentId) {
try {
let responses = await intentsClient.getIntent({
name: intentId,
intentView: 'INTENT_VIEW_FULL'
})
const response = responses[0];
console.info(util.inspect(response, false, null, true /* enable colors */ ));
return new Promise((resolve, reject) => {
resolve(response)
})
} catch (err) {
return new Promise((resolve, reject) => {
reject(err)
})
}
}
Функция, которая его вызывает:
async function testUpdateTraining () {
try {
let intent = await getIntent('<your_ID>')
let trainingPhrase = {
parts: [{
text: 'let me call you?'
}],
type: 'EXAMPLE'
}
intent.trainingPhrases.push(trainingPhrase)
try {
let updatedIntent = await updateIntent(intent)
} catch (e) {
console.info(e)
console.info('failed to update the intent')
}
} catch (err) {
console.info('failed to get intent')
}
}
Функция UpdateIntent:
async function updateIntent(intent) {
const request = {
intent: intent,
intentView: 'INTENT_VIEW_FULL'
}
try {
let responses = await intentsClient.updateIntent(request)
return new Promise((resolve, reject) => {
resolve(responses)
})
} catch (err) {
console.info(err)
return new Promise((resolve, reject) => {
reject(err)
})
}
}
мне нужен языковой код, так как мне нужно управлять 4 языками
Привет, приятель. У тебя есть какое-нибудь решение для этого?