ЧатиумРазработчикамСтоимость
Войти

Разработчикам

Чатиум - это облачная платформа для создания бизнес-приложений. На ней вы можете либо собрать свое решение из готовых модулей, либо дописать то, чего не хватает именно вам.

Основные модули описаны на главной странице, а в этой документации мы рассказываем о том, как создавать свой собственный функционал.

Что можно создать:

Язык разработки

Приложения в Чатиуме пишутся на языке TypeScript, с помощью редактора VSCode или web-ide.

С чего начать

Сначала стоит создать аккаунт и освоиться в среде разработки (5 минут) После этого, мы подготовили вводные инструкции для быстрого старта:

Проще всего разбираться на примерах, поэтому мы подготовили раздел с готовыми примерами кода, которые можно открыть в песочнице и скопировать одним кликом.

Также стоит воспользоваться поиском по документации или умным ботом в правом нижнем углу страницы (или в телеграме)

Аккаунт

Аккаунт чатиума - это место в котором хранятся код и данные вашего проекта. Каждый аккаунт это по сути сайт, со своим доменом. Данные аккаунтов не пересекаются между собой

Модули подключаются в аккаунт. Сотрудники и пользователи - это также данные аккаунта, каждый пользователь имеет одну из 5 ролей

Хостинг

Вам не нужно думать о том, как запускать проект, где хранить код, таблицы, картинки и видео. Чатиум делает это за вас.

Каждый аккаунт предоставляет файловую систему, в которой вы можете разместить свои файлы и папки.

Файлы сразу доступны и, либо отдаются пользователю "как есть" (это файлы с расширениями .html/.css/.js):

// file.html
<html>
  <title>Этот файл отдастся "как есть"</title>
  <body>
    Такой способ можно использовать для верстки лендингов
  </body>
</html>

Либо исполняются на сервере и выдают свой результат исполнения:

// serverfile.tsx
app.html('/', (ctx,req) => {
  let record = await table.findOneBy(ctx, {})
  return <html>
    <h1>{record.title}</h1>
    <div>{record.description}</div>
    <p>
      Такой способ можно использовать для динамических приложений
    </p>
  </html>
})

Плагины

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

Любой разработчик в чатиуме может создать собственный плагин и опубликовать его в общем каталоге для продажи другим людям. Другие компании могут подключать его в свои аккаунты, заплатив указанную разработчиком сумму (разово или по подписке).


Мобильная разработка

Чатиум дает очень простой способ создавать нативные мобильные приложения с помощью серверного кода.

Создание мобильных приложений построено по принципу Server Driven UI - сервер на каждый запрос пользователя отдает экран приложения вместе с версткой в специальном JSON-формате.

app.screen('/', () => {
  return (
    <screen title="Hello world!">
      <text class="section">First screen</text>
    </screen>
  )
})

Пример мобильного экрана

Вы пишете код на сервере, отдающий экран, а мобильное приложение отрисовывает интерфейс пользователя.

За счет того, что мобильные приложения разрабатываются в той-же среде и в том-же коде что и сайт - получается связанная архитектура, которую очень легко поддерживать и изменять.


Авторизация

Каждый запрос к серверу выполняется от какого-то пользователя, а внутри кода есть удобное API для получения актуальных данных пользователя.

За счет этого можно легко оградить некоторые экраны требованием авторизации, а некоторые - требованием конкретной роли пользователя.

import {requireRealUser, requireAccountRole} from '@app/auth'

app.screen('/', () => {
  requireRealUser(ctx)
  return (
    <screen title="Личный кабинет">
      <text class="section">
        Этот экран запросит авторизацию
      </text>
    </screen>
  )
})

app.screen('/admin', () => {
  requireAccountRole(ctx, 'Admin')
  return (
    <screen title="Админка">
      <text class="section">
        Экран доступен только администраторам
      </text>
    </screen>
  )
})

Чатиум поддерживает разные способы авторизации (по умолчанию работают такие способы как EMail и SMS), в каждом аккаунте можно выбрать "какими способами будет авторизовываться пользователь", а если способ отсутствует - можно дописать свой


Хуки

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

// Хук, показывающий страницу с несуществующим адресом
app.accountHook('404', (ctx,params) => {
  return ctx.resp.html('<h2>Такого адреса не существует</h2>')
})


Внутренняя база данных

Большинство веб-сервисов требуют сохранения данных. В Чатиуме доступна база данных Heap, с помощью которой вы можете объявить таблицу прямо в коде и тут-же ее использовать - работая с записями в таблице как с типизированными объектами (используя всю мощь типизации Typescript):

import {Heap} from '@app/heap'
import {jsx} from '@app/html-jsx'

// Объявляем таблицу с двумя полями - name и age
const myTable = Heap.Table('students', {
  name: Heap.String(),
  age: Heap.Optional(Heap.Number()),
})

// Выводим ее записи на экран
app.get('/', async(ctx,req) => {
  let records = myTable.findAll(ctx)
  return <html>
    <table>
      {records.map( record => {
        return <tr>
          <td>{record.name}</td>
          <td>{record.age}</td>
        </tr>
      })}
    </table>
  </html>
})

Файловый сервис

Самая частая задача, которую приходится решать когда делаешь свой веб-сервис - это хранение и обработке медиа-файлов (картинок, архивов и видео). Чатиум дает внутреннее API, которое позволяет не думать о технической стороной этой задачи. На физическом уровне поддерживается трехкратное резервирование файлов, CDN, преобразование размеров картинок и потоковая выдача видео.

Подробнее о файловом сервисе


Отложенные действия

Некоторый код не нужно запускать сразу, а нужно отложить задачу и выполнить ее через некоторое время. Также, бывает код который выполняется долго и должен выполниться в фоне.

import { scheduleJobAfter } from '@app/jobs'
import {showToast} from '@app/ui'

app.screen('/', async(ctx,req) => {
  <screen>
    <button onClick={setAction.apiCall({})}>
      Напомнить через полчаса
    </button>
  </screen>
})

const setAction = app.apiCall('set-alarm', () => {
  await scheduleJobAfter(ctx, 30, 'min', alarmJob.path(), {})
  return showToast('Задача поставлена')  
})

const alarmJob = app.job('run-alarm', () => {
  // здесь код, который вызовется в нужное время
})

Быстрый старт

Реализация первого проекта займет не более 30 минут. Давайте начнем