Size: a a a

Яндекс.Диалоги (сообщество разработчиков)

2021 February 02

A

Arkady in Яндекс.Диалоги (сообщество разработчиков)
Диалог с Богом
В переданной команде буква ё заменяется на е
Для вас это действительно сложность?
источник

S

Sergey in Яндекс.Диалоги (сообщество разработчиков)
Dmitry Nikolaev
а тут есть кто-то, кто создавал навык на nodejs в я.функциях ?
Я тестировал запись json в object из навыка на я функции
источник

Д

Диалог с Богом... in Яндекс.Диалоги (сообщество разработчиков)
Придется добавить все слова с е ещё
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
Sergey
Я тестировал запись json в object из навыка на я функции
меня интересует как проверить наличие данных в объекте.
сделал способом как обычно на js делаю проверку, но оно возвращает false и всё тут...
Например мне нужно проверить наличие request.nlu.intents.MY_INTENT.slots.place.value
что оно существует
иначе логичный error Cannot read property 'MY_INTENT'
источник

VP

Vitaliy Potapov in Яндекс.Диалоги (сообщество разработчиков)
Dmitry Nikolaev
меня интересует как проверить наличие данных в объекте.
сделал способом как обычно на js делаю проверку, но оно возвращает false и всё тут...
Например мне нужно проверить наличие request.nlu.intents.MY_INTENT.slots.place.value
что оно существует
иначе логичный error Cannot read property 'MY_INTENT'
if (request.nlu.intents.MY_INTENT) { … }
Еще для таких длинных конструкций можно заюзать optional chaining, но нужно использовать nodejs v14. Типа так: request.nlu.intents?.MY_INTENT?.slots?.place?.value
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
Vitaliy Potapov
if (request.nlu.intents.MY_INTENT) { … }
Еще для таких длинных конструкций можно заюзать optional chaining, но нужно использовать nodejs v14. Типа так: request.nlu.intents?.MY_INTENT?.slots?.place?.value
if (request.nlu.intents.MY_INTENT) { … }
так мы проверяем только первый "уровень", а надо глубже.
Тут либо по очереди проверять все вложения, либо я делаю это функцией:
var isset = function(fn) {
  var value;
  try {
      value = fn();
  } catch (e) {
      value = undefined;
  }finally{
      return value !== undefined;
  }
};
На чистом JS работает:
if (isset(()=>{request.nlu.intents.MY_INTENT.slots.place.value})
а вот в я.функции возвращает false, даже когда value есть.
источник

S

Sergey in Яндекс.Диалоги (сообщество разработчиков)
Dmitry Nikolaev
меня интересует как проверить наличие данных в объекте.
сделал способом как обычно на js делаю проверку, но оно возвращает false и всё тут...
Например мне нужно проверить наличие request.nlu.intents.MY_INTENT.slots.place.value
что оно существует
иначе логичный error Cannot read property 'MY_INTENT'
У меня я функция вызывается не из навыка напрямую, а из Aimylogic, у них свой формат. Чтобы получить "нормальный json" пришлось вот так его распарсить:
module.exports.handler = async (event, context) => {
   const eventJSON = JSON.parse(Buffer.from(event.body, 'base64')); //Получаем JSON из вызова
может и с вызовом из яндекса поможет. Что в отладке показывает?
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
Sergey
У меня я функция вызывается не из навыка напрямую, а из Aimylogic, у них свой формат. Чтобы получить "нормальный json" пришлось вот так его распарсить:
module.exports.handler = async (event, context) => {
   const eventJSON = JSON.parse(Buffer.from(event.body, 'base64')); //Получаем JSON из вызова
может и с вызовом из яндекса поможет. Что в отладке показывает?
Это не то.
JSON уже есть. Теперь надо проверить наличие или отсутствие в нём необходимых данных.
источник

VP

Vitaliy Potapov in Яндекс.Диалоги (сообщество разработчиков)
Dmitry Nikolaev
if (request.nlu.intents.MY_INTENT) { … }
так мы проверяем только первый "уровень", а надо глубже.
Тут либо по очереди проверять все вложения, либо я делаю это функцией:
var isset = function(fn) {
  var value;
  try {
      value = fn();
  } catch (e) {
      value = undefined;
  }finally{
      return value !== undefined;
  }
};
На чистом JS работает:
if (isset(()=>{request.nlu.intents.MY_INTENT.slots.place.value})
а вот в я.функции возвращает false, даже когда value есть.
Тогда попробуй optional chaining, он как раз для таких случаев, чтобы кучу проверок не писать
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
Vitaliy Potapov
Тогда попробуй optional chaining, он как раз для таких случаев, чтобы кучу проверок не писать
попробую, спасибо
видимо придётся пересоздавать, т.к. сейчас я выбрал при создании nodejs12
источник

2

200cm3 in Яндекс.Диалоги (сообщество разработчиков)
Дим, ты понимаешь все подводные камни лямбда функций?
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
200cm3
Дим, ты понимаешь все подводные камни лямбда функций?
Не а. Это вообще мой первый опыт.
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
расскажешь ?
источник

DN

Dmitry Nikolaev in Яндекс.Диалоги (сообщество разработчиков)
Vitaliy Potapov
Тогда попробуй optional chaining, он как раз для таких случаев, чтобы кучу проверок не писать
Попробовал. Работает. Спасибо.
И вы правы, на 12-ой версии не работает, на 14-ой версии nodejs работает.
источник

Д

Диалог с Богом... in Яндекс.Диалоги (сообщество разработчиков)
Sergey
Навык должен понимать переданную при запуске команду
А почему домашняя Алиса не понимает такую команду, а в телефоне все работает?
источник

DD

David Dale in Яндекс.Диалоги (сообщество разработчиков)
Диалог с Богом
А почему домашняя Алиса не понимает такую команду, а в телефоне все работает?
Скорее всего, неверно расслышала.
источник

Д

Диалог с Богом... in Яндекс.Диалоги (сообщество разработчиков)
Я уже час ее мучаю
источник

DD

David Dale in Яндекс.Диалоги (сообщество разработчиков)
Диалог с Богом
Я уже час ее мучаю
Если навык приватный, то может ещё быть проблема, что колонка пропиликана на тот яндексовский аккаунт, у которого нет доступа к этому навыку.
источник

Д

Диалог с Богом... in Яндекс.Диалоги (сообщество разработчиков)
Команда запустить навык работает
источник

Д

Диалог с Богом... in Яндекс.Диалоги (сообщество разработчиков)
"скажи [активационное имя] [команда]» а вот такое домашняя алиса не хочет принимать
источник