@bal_square

Как грамотно использовать сторонние API в своем web приложении на NodeJS?

Здравствуйте, я делаю свой проект - чат-сервер. Например, у меня есть функция, которая по голосовой фразе "добавить напоминание на Х число", взаимодействует с Google Calendar API. Путь запроса выглядит следующим образом: пользователь отправляет сообщение -> сервер открывает поток и передает его Yandex SpeechKit -> SpeechKit возвращает строковый результат -> сервер перенаправляет строку на dialogFlow API -> dialogFlow API возвращает результат серверу -> сервер делает запрос Google Calendar API -> сервер получает результат операции добавления напоминания. В итоге прежде, чем достигнуть результата, происходит целая серия запросов к сторонним API, т.к. проект пока работает с одним пользователем, проблем с производительностью не возникает, но если расширить user-базу уверен, что начнутся большие просадки. Возможно есть способы укоротить столь длинную цепочку событий или же существуют определенные паттерны проектирования подобного рода приложений. Кто сталкивался с данной проблемой, подскажите пожалуйста.
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ответы на вопрос 2
zoonman
@zoonman
⋆⋆⋆⋆⋆
1. Почему не использовать Google Actions? Или штук вроде dialogflow.com?
2. Снижение задержек возможно рядом трюков вроде начала отправки голосовых данных непосредственно в сервис с момента начала их произношения. Далее слой кэширования результатов вычленения намерений.
3. Размещение всего стека распознавания речи и интентов у себя.
4. Распараллеливание цепочки там, где это возможно.
Например
- Купи билеты в кино на хороший фильм Тарантино
1. Распознавание
2. Параллельно:
   = Поиск хороших фильмов Тарантино
   = Поиск кинотеатров поблизости
   = Получение данных вашего календаря
3. = Запрос расписаний из ближайших кинотеатров (можно делать параллельно, если нет общего API)
4. Поиск оптимального сеанса
5. Заказ билетов

5. Асинхронное выполнение через очередь, где возможно.
Например:
- Отправь билеты маме.
- Хорошо. (ставится задание в очередь, выполняется асинхронно не блокируя пользователя)
Ответ написан
Комментировать
profesor08
@profesor08
Оптимизируй. По возможности используй SpeechRecognition, если нет то webkitSpeechRecognition, если нет, то уже Yandex SpeechKit и это все на клиенте. На сервер тебе должно отправляться уже текстовое сообщение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы