No description
| modules | Детальная страница | |
| templates | Детальная страница | |
| .gitignore | Структура | |
| config.yaml.example | База данных | |
| go.mod | Интерфейс со списком | |
| go.sum | Интерфейс со списком | |
| main.go | Интерфейс со списком | |
| Makefile | Структура | |
| README.md | Readme | |
Asterisk UI
Веб-интерфейс для просмотра истории SMS/чат-сообщений Asterisk
Простое read-only веб-приложение на Go, которое подключается к базе данных PostgreSQL Asterisk и отображает историю сообщений из таблицы chat_history. Позволяет просматривать список номеров с последними сообщениями и детальную переписку по каждому номеру.
Возможности
- Список номеров — постраничный просмотр всех телефонных номеров, имеющих историю сообщений. Для каждого номера отображается последнее сообщение, его автор и дата.
- Детальный просмотр — полная хронология сообщений по выбранному номеру телефона с постраничной навигацией.
- Flash-сообщения — уведомления об ошибках и успешных операциях через cookie.
- Русскоязычный интерфейс — все надписи на русском языке.
- Пагинация — 100 записей на страницу.
Технологический стек
| Компонент | Технология |
|---|---|
| Язык | Go 1.24.5 |
| Веб-фреймворк | Echo v4 |
| ORM | GORM v1.30.1 + PostgreSQL driver |
| Конфигурация | cleanenv (YAML) |
| Шаблонизатор | Go html/template |
| Стилизация | Bootstrap 5.3.7 (CDN) |
| Логирование | log/slog с кастомным handler |
| Сборка | Go toolchain + Makefile |
Структура проекта
asterisk-ui/
├── main.go # Точка входа
├── go.mod / go.sum # Модуль и зависимости
├── Makefile # Команды сборки и запуска
├── config.yaml.example # Пример конфигурации
├── modules/
│ ├── config/
│ │ └── config.go # Структура конфига и загрузка из YAML
│ ├── database/
│ │ ├── models/
│ │ │ └── chat_history.go # GORM-модель таблицы chat_history
│ │ └── repository.go # Репозиторий (SQL-запросы)
│ ├── dto/
│ │ └── phone_list.go # DTO для списка номеров
│ ├── logger/
│ │ ├── handler.go # Кастомный обработчик slog
│ │ └── logger.go # Обёртка логгера
│ └── web/
│ ├── controller.go # HTTP-обработчики
│ ├── template.go # Рендерер шаблонов для Echo
│ └── web.go # Настройка сервера и маршруты
└── templates/
├── index.html # Страница списка номеров
└── phone.html # Страница детального просмотра
Архитектура
┌─────────────┐
│ Браузер │
└──────┬──────┘
│ HTTP
┌──────▼──────┐
│ Echo v4 │
│ :3000 │
└──────┬──────┘
│
┌──────────────┼──────────────┐
│ │ │
GET / GET /detail/:phone
│ │
┌─────▼─────┐ ┌────▼────────┐
│ index() │ │ phone() │
└─────┬─────┘ └──────┬──────┘
│ │
┌─────▼───────────────▼─────┐
│ Repository (GORM) │
│ PostgreSQL │
└─────┬─────────────────────┘
│
┌─────▼─────┐
│ PostgreSQL │
│ (Asterisk) │
└───────────┘
Приложение работает по классической серверной схеме (SSR):
- Браузер отправляет HTTP-запрос
- Echo-маршрутизатор направляет его в соответствующий контроллер
- Контроллер вызывает методы репозитория, которые выполняют SQL-запросы через GORM
- Результаты передаются в HTML-шаблоны, рендерятся на сервере и возвращаются браузеру
Ключевые особенности:
- Нет JavaScript-фреймворков, SPA или клиентского роутинга
- Нет REST API — данные рендерятся сразу в HTML
- Нет Docker, nginx или контейнеризации — запускается как standalone-бинарник
- Состояние хранится на сервере; flash-сообщения передаются через cookie
- Пагинация управляется через query-параметр
?page=
Маршруты
| Метод | Путь | Описание |
|---|---|---|
| GET | / |
Список номеров с последним сообщением |
| GET | /detail/:phone |
История сообщений для номера |
Модель данных
Приложение работает с таблицей chat_history:
| Поле | Тип | Описание |
|---|---|---|
id |
uint (PK, auto increment) |
Идентификатор записи |
session_id |
varchar(100) |
ID сессии |
role |
varchar(10) |
Роль (отправитель) — например, user или bot |
message |
text |
Текст сообщения |
timestamp |
timestamp |
Дата и время сообщения |
phone |
bigint |
Номер телефона |
Требования
- Go 1.24.5 или новее
- PostgreSQL с таблицей
chat_history(база данных Asterisk)
Установка и запуск
1. Клонирование
git clone https://codeberg.org/adikalon-work/asterisk-ui
cd asterisk-ui
2. Настройка конфигурации
Скопируйте пример конфига и отредактируйте под своё окружение:
cp config.yaml.example config.yaml
Пример содержимого config.yaml:
port:3000db_host:localhostdb_port:5432db_user:userdb_password:passworddb_database:asterisk3. Сборка
make build
# или: go build
Будет создан бинарный файл asterisk-ui.
4. Запуск
make run
# или: go build && ./asterisk-ui
Сервер запустится на порту, указанном в конфигурации (по умолчанию 3000).
Откройте в браузере: http://localhost:3000
Развёртывание
- Скопируйте скомпилированный бинарник
asterisk-uiна целевой сервер - Поместите
config.yamlрядом с бинарником - Поместите папку
templates/рядом с бинарником (путь до шаблонов вычисляется относительно расположения исполняемого файла) - Запустите:
./asterisk-ui
Команды Makefile
| Команда | Описание |
|---|---|
make build |
Сборка проекта (go build) |
make run |
Сборка и запуск (go build && ./asterisk-ui) |