Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Госуслуги в формате диалогов с чат-ботами. Как реализовать real-time приложение с чат-ботами на Python

Госуслуги в формате диалогов с чат-ботами. Как реализовать real-time приложение с чат-ботами на Python

Иван Терещук (Mos.ru) @ MoscowPython Meetup 61

"В этом докладе я расскажу о том, как мы использовали концепцию диалогов с чат-ботами для предоставления сервисов госуслуг. Какие существуют основные нюансы при написании real-time приложений, как, например, мессенджера. Как обрабатывать многоступенчатые сценарии в чат-ботах со сложной бизнес-логикой. Как все вышеописанное реализуется на Python и какие инструменты для этого существуют".

Видео: http://www.moscowpython.ru/meetup/61/gosuslugi-chatbots/

Moscow Python Meetup
PRO

November 29, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Госуслуги в формате
    диалогов с чат-ботами.
    Как реализовать real-time приложение
    с чат-ботами на Python.
    Иван Терещук

    View Slide

  2. 2

    View Slide

  3. 3

    View Slide

  4. View Slide

  5. 5
    Realtime приложения
    • Мессенджеры, чаты
    • Игры
    • Биржи, финансовые платформы
    • Приложения для совместной работы (Google Docs...)
    • Системы мониторинга, web телеметрия

    View Slide

  6. 6
    Websockets
    Проблемы
    • Разрыв соединения
    • Масштабирование
    • Нет поддержки в старых
    клиентах
    Преимущества
    • Обмен данными в реальном
    времени
    • Двунаправленная связь между
    клиентом и сервером
    • Экономия сетевого трафика
    • Экономия ресурсов на
    обработку запросов

    View Slide

  7. НАПИСАТЬ
    ВСЕ
    САМОМУ
    ИСПОЛЬЗОВАТЬ
    ГОТОВЫЙ
    ФРЕЙМВОРК

    View Slide

  8. 8
    Realtime фреймворки
    SockJS
    socket.io
    Autobahn
    https://github.com/sockjs/sockjs-protocol/
    https://crossbar.io/autobahn/ https://socket.io/

    View Slide

  9. 9
    Realtime фреймворки
    Базовые возможности:
    • Heartbeats, disconnect detection
    • Подтверждение доставки сообщений
    • Единое API поверх нескольких транспортных
    протоколов (long-polling, flashsockets, etc...)
    • Поддержка Sticky sessions или других техник
    для масштабирования

    View Slide

  10. 10
    SockJS
    • Близкое к native Websocket API
    • Стабильная работа соединения
    • Минималистичен

    View Slide

  11. 11
    Autobahn
    • Реализует протокол WAMP
    • Хорошо подходит для распределенных и
    микросервисных приложений

    View Slide

  12. 12
    socket.io
    • Rooms, Broadcasts
    • Namespaces
    • Хорошо подходит для разработки чатов и
    мессенджеров
    • Менеджер соединений (via Redis, RabbitMq)

    View Slide

  13. 13
    SockJS Autobahn Socket.io
    Backends support
    aiohttp, Tornado,
    Twisted
    asyncio,
    Twisted
    Sanic, aiohttp,
    Tornado, Flask,
    eventlet, gevent
    Heartbeats ✅ ✅ ✅
    Protocol fallback ✅ ✅ ✅
    Scaling ✅ ✅ ✅
    Message ack ❌ ✅ ✅
    Mobile clients ❌ ✅ ✅
    Send message from
    outer process
    ❌ ✅ ✅
    Chat features ❌ ❌ ✅

    View Slide

  14. 14
    Чат-боты
    • Отвечают только за бизнес-логику
    • Работа чат-бота не должна зависеть от способа
    доставки сообщения на клиент
    • Каждый чат-бот имеет разную нагрузку, это зависит от
    популярности услуги

    View Slide

  15. 15
    Чат-боты

    View Slide

  16. 16
    Чат-боты

    View Slide

  17. 17
    Множество состояний диалога

    View Slide

  18. 18
    Мертвое состояние (deadlock)

    View Slide

  19. 19
    Обновление сценария

    View Slide

  20. 20
    Использование State machine
    https://github.com/pytransitions/transitions/

    View Slide

  21. 21
    https://github.com/pytransitions/transitions/
    Использование State machine

    View Slide

  22. 22
    https://github.com/pytransitions/transitions/
    Переходы с условием

    View Slide

  23. Избегаем deadlock состояний
    23

    View Slide

  24. 24
    Выводы
    • Используйте наиболее подходящую вам
    библиотеку, или напишите все сами :)
    • Думайте о масштабировании!
    • Используйте паттерн State machine
    • Избегайте дедлоков
    • Пользуйтесь опытом других разработчиков

    View Slide

  25. Спасибо!
    Иван Терещук
    [email protected]

    View Slide