Frontend-first canvas apps!
vitalets opened this issue · 12 comments
Сейчас в канвас аппах платформа шлет запрос в бэк, который уже потом обновляет фронт.
Идея
Пусть платформа шлет запрос только во фронт. И уже фронт сам решит, нужно ли ему ходить на бэк или нет.
И если нужно, то по какому протоколу, итд.
Это более привычная схема. Все мобильные приложения строятся именно так: платформа кидает эвенты в ui, а дальше уже приложение ходит на бэк. Смарт ТВ приложения (которые по сути те же канвасы) тоже так работают. Там даже голосовой ввод поддержан, т.е. тот же ассистент.
Плюсы
- ниже порог входа для разработчиков
- можно делать канвасы вообще без бэка (не надо заморачиваться с хостингом, сертификатами, итд)
- возможность работать в оффлайне
- проще превратить любой сайт в смартапп (силами только команды фронтов, правки на бэке не нужны)
- выше отзывчивость приложений (фронт может быстро дать ответ и уже в фоне синкнуться с бэком)
В репозитории salutejs есть пример echo, который имитирует ровно это поведение. Посмотрите, пожалуйста.
В репозитории salutejs есть пример echo, который имитирует ровно это поведение. Посмотрите, пожалуйста.
Да, это я видел: https://github.com/sberdevices/salutejs/tree/master/examples/echo
Вот мое предложение как раз получать такой же результат, только без эхо-сервера :)
In progress 😉
In progress 😉
Антон, привет! А нет ли примерных сроков, когда планируете это выкатить?
@awinogradov
Привет! Пока ещё не добрались. Точной даты нет.
Я думаю это нужно было реализовать еще на старте канвасапп. Общение на фронте намного логичнее и удобнее, к серверу обращаться должен само веб приложение, когда это нужно ему.
Привет! Пока ещё не добрались. Точной даты нет.
очень ждём, я считаю этот тикет проблемой, так как работать дергая постоянно сервер это жесть)
работать дергая постоянно сервер это жесть)
так весь интернет устроен) нет проблемы загрузить статику без сервера. Проблема что взаимодействие с NLP будет в любом случае. А это и есть дергание сервера.
работать дергая постоянно сервер это жесть)
так весь интернет устроен) нет проблемы загрузить статику без сервера. Проблема что взаимодействие с NLP будет в любом случае. А это и есть дергание сервера.
тот же ВК делает это все посредством js скрипта подгружаемого на фронт для разработчиков. Который в свою очередь на фронте взаимодействует с серверами ВК. Таким образом Веб приложение общается с Апи на уровне фронта без вмешательства бэка веб приложения. Это удобно, намного быстрее и легко встраивается в любое веб приложение.
Я думаю это отличная практика, которую нужно адаптировать в суперапп сбера.
Я тут еще размышлял над этим тикетом и понял в чем может быть сложность для frontend-first apps - в ттс. Если запрос пришел сразу на только фронт и я хочу озвучить некий ответ, то потребуется еще один запрос на бэк сбера, чтобы собственно получить озвучку.
Обсуждали с @awinogradov, что подобное есть у гугл-ассистента. У них такие frontend-first apps называются Interactive Canvas. Вот кусочек из их доки:
When building an Interactive Canvas Action, you can choose between two fulfillment implementation paths: server fulfillment or client fulfillment. With server fulfillment, you primarily use APIs that require a webhook. With client fulfillment, you can use client-side APIs and, if needed, APIs that require a webhook for non-Canvas features (such as account linking).
If you choose to build with server webhook fulfillment in the project creation stage, you must deploy a webhook to handle the conversational logic and client-side JavaScript to update the web app and manage communication between the two.
If you choose to build with client fulfillment (currently available in Developer Preview), you can use new client-side APIs to build your Action’s logic exclusively in the web app, which simplifies the development experience, reduces latency between conversational turns, and enables you to use on-device capabilities. If needed, you can also switch to server-side logic from the client.
Жирным выделил плюсы, которые они видят в этом подходе.
Проблему с озвучиванием ттс они решают отдельным методом outputTts на клиенте. В случае сбера это можно добавить как раз в assistantClient.