Как настроить пользовательскую платформу в Dialogflow NodeJS Client
Я создал веб-крюк, используя диалоговое окно "Выполнение диалога", чтобы правильно возвращать разные данные в зависимости от платформы, включая пользовательские, созданные мной для другой службы. Я проверил свой webhook и знаю, что если я изменю originalDetectIntentRequest.source
к платформе, используемой в моей пользовательской полезной нагрузке, это работает.
{
"payload": {
"jokes-api": {
"success": true,
"text": "These are some jokes",
}
},
"outputContexts": []
}
Я могу использовать https://github.com/dialogflow/dialogflow-nodejs-client-v2sessions.detectIntent
чтобы получить ответ, но полная версия возвращается с платформой, установленной как PLATFORM_UNSPECIFIED
, а не пользовательские полезные нагрузки, которые я хочу.
[{
"responseId": "c56c462f-bb3b-434a-b318-3739f58e6f6d",
"queryResult": {
"fulfillmentMessages": [{
"platform": "PLATFORM_UNSPECIFIED",
"card": {
"buttons": [],
"title": "Jokes",
"subtitle": "These are some jokes",
"imageUri": ""
},
"message": "card"
}],
"queryText": "tell me a joke",
/* ... */
"intent": {
"name": "projects/my-jokes/agent/intents/56887375-3047-4993-8e14-53b20dd02697",
"displayName": "Jokes",
/* ... */
},
"intentDetectionConfidence": 0.8999999761581421,
}
}]
Глядя на логи моего webhook, я вижу, что originalDetectIntentRequest
объект присутствует, но источник не указан.
{
"responseId": "c56c462f-bb3b-434a-b318-3739f58e6f6d",
"queryResult": {
"queryText": "tell me a joke",
"speechRecognitionConfidence": 0.9602501,
/* ... */
"intent": {
"name": "projects/my-jokes/agent/intents/56887375-3047-4993-8e14-53b20dd02697",
"displayName": "Jokes"
},
/* ... */
},
"originalDetectIntentRequest": {
"payload": {
}
},
"session": "projects/my-jokes/agent/sessions/12345"
}
Как я могу установить платформу или источник в dialogflow-nodejs-client-v2, чтобы получить желаемые ответы?
1 ответ
sessions.detectIntent
API имеет queryParams
параметр, который имеет поле с именем payload
, Вот где идет "оригинальная полезная нагрузка". Название платформы входит в source
поле этой структуры. Так что ваши detectIntent
вызов должен выглядеть примерно так:
sessionClient.detectIntent({
session: sessionClient.sessionPath('<project_id>', '<session_id>'),
queryInput: {
text: {
text: '<query>',
languageCode: 'en-US'
}
},
queryParams: {
payload: {
fields: {
source: {
stringValue: '<platform>',
kind: 'stringValue'
}
}
}
}
})
Я смог смоделировать интеграционный вызов Slack, используя 'slack' в качестве имени платформы. Я также смог вернуть пользовательские данные для имени платформы. Полезная нагрузка возвращается в queryResult.webhookPayload
поле.