mirror of
https://github.com/civsocit/olgram.git
synced 2023-07-22 01:29:12 +03:00
readme
This commit is contained in:
parent
62de96c500
commit
83a7d801ed
33
README.md
33
README.md
@ -1,8 +1,39 @@
|
||||
# OLGram
|
||||
|
||||
Конструктор ботов обратной связи в Telegram
|
||||
[@olgram](https://t.me/olgrambot) - конструктор ботов обратной связи в Telegram
|
||||
|
||||
[![Static Analysis Status](https://github.com/civsocit/olgram/workflows/Linter/badge.svg)](https://github.com/civsocit/olgram/actions?workflow=Linter)
|
||||
[![Deploy Status](https://github.com/civsocit/olgram/workflows/Deploy/badge.svg)](https://github.com/civsocit/olgram/actions?workflow=Deploy)
|
||||
|
||||
![Logo](media/logo1_big.png)
|
||||
|
||||
## Возможности и преимущества Olgram Bot
|
||||
|
||||
* **Общение с клиентами**. После подключения бота, вы сможете общаться с вашими пользователями бота через диалог с ботом, либо подключенный отдельно чат, где может находиться ваш колл-центр.
|
||||
* **Все типы сообщений**. Livegram боты поддерживают все типы сообщений — текст, фото, видео, голосовые сообщения и стикеры.
|
||||
* **Open-source**. В отличие от известного проекта Livegram код нашего конструктора полностью открыт.
|
||||
* **Self-hosted**. Вы можете развернуть свой собственный конструктор, если не доверяете нашему.
|
||||
* **Безопасность**. В отличие от Livegram, мы не храним сообщения, которые вы отправляете в бот. А наши сервера располагаются в Германии, что делает проект неподконтрольным российским властям.
|
||||
|
||||
|
||||
По любым вопросам, связанным с Olgram, пишите в наш бот обратной связи @civsocit_feedback_bot
|
||||
|
||||
### Для разработчиков: сборка и запуск проекта
|
||||
|
||||
Вам потребуется собственный VPS или любой хост со статическим адресом или доменом.
|
||||
* Создайте файл .env и заполните его по образцу example.env. Вам нужно заполнить переменные:
|
||||
** BOT_TOKEN - токен нового бота, получить у @botfather
|
||||
** POSTGRES_PASSWORD - любой случайный пароль
|
||||
** WEBHOOK_HOST - IP адрес или доменное имя сервера, на котором запускается проект
|
||||
* Сохраните файл docker-compose.yaml и соберите его:
|
||||
```
|
||||
sudo docker-compose up -d
|
||||
```
|
||||
|
||||
В docker-compose.yaml минимальная конфигурация. Для использования в серьёзных проектах мы советуем:
|
||||
* Приобрести домен и настроить его на свой хост
|
||||
* Наладить реверс-прокси и автоматическое обновление сертификатов - например, с помощью [Traefik](https://github.com/traefik/traefik)
|
||||
* Скрыть IP сервера с помощью [Cloudflire](https://www.cloudflare.com), чтобы пользователи ботов не могли найти IP адрес
|
||||
хоста по Webhook бота.
|
||||
|
||||
Пример более сложной конфигурации есть в файле docker-compose-full.yaml
|
||||
|
81
docker-compose-full.yaml
Normal file
81
docker-compose-full.yaml
Normal file
@ -0,0 +1,81 @@
|
||||
version: '3'
|
||||
services:
|
||||
postgres:
|
||||
image: postgres
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- release.env
|
||||
volumes:
|
||||
- database:/var/lib/postgresql/data
|
||||
networks:
|
||||
- traefik
|
||||
redis:
|
||||
image: 'bitnami/redis:latest'
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- ALLOW_EMPTY_PASSWORD=yes
|
||||
volumes:
|
||||
- redis-db:/bitnami/redis/data
|
||||
env_file:
|
||||
- release.env
|
||||
networks:
|
||||
- traefik
|
||||
olgram:
|
||||
image: ghcr.io/civsocit/olgram/bot:stable
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- traefik
|
||||
labels:
|
||||
- 'com.centurylinklabs.watchtower.enable="true"'
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.static.rule=Host(`bot.civsoc.com`)"
|
||||
- "traefik.http.routers.static.tls=true"
|
||||
- "traefik.http.routers.static.tls.certresolver=le"
|
||||
- "traefik.http.routers.static.entrypoints=websecure"
|
||||
- "traefik.docker.network=traefik"
|
||||
env_file:
|
||||
- release.env
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
watchtower:
|
||||
image: containrrr/watchtower
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./config.json:/config.json
|
||||
command: --interval 30
|
||||
networks:
|
||||
- traefik
|
||||
traefik:
|
||||
image: traefik:v2.4
|
||||
container_name: olgram_traefik
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
networks:
|
||||
- traefik
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./acme:/acme
|
||||
command:
|
||||
- --entrypoints.web.address=:80
|
||||
- --entrypoints.websecure.address=:443
|
||||
- --providers.docker=true
|
||||
- --providers.docker.endpoint=unix:///var/run/docker.sock
|
||||
- --providers.docker.exposedByDefault=false
|
||||
- --providers.docker.network=traefik
|
||||
- --certificatesresolvers.le.acme.email=feedback@civsoc.com
|
||||
- --certificatesresolvers.le.acme.storage=/acme/acme.json
|
||||
- --certificatesresolvers.le.acme.tlschallenge=false
|
||||
- --certificatesresolvers.le.acme.httpchallenge=true
|
||||
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
|
||||
|
||||
volumes:
|
||||
database:
|
||||
redis-db:
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
driver: bridge
|
@ -7,8 +7,6 @@ services:
|
||||
- .env
|
||||
volumes:
|
||||
- database:/var/lib/postgresql/data
|
||||
networks:
|
||||
- default
|
||||
redis:
|
||||
image: 'bitnami/redis:latest'
|
||||
restart: unless-stopped
|
||||
@ -18,13 +16,9 @@ services:
|
||||
- redis-db:/bitnami/redis/data
|
||||
env_file:
|
||||
- .env
|
||||
networks:
|
||||
- default
|
||||
olgram:
|
||||
image: ghcr.io/civsocit/olgram/bot:stable
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- default
|
||||
env_file:
|
||||
- .env
|
||||
volumes:
|
||||
@ -39,7 +33,3 @@ volumes:
|
||||
database:
|
||||
redis-db:
|
||||
olgram-cert:
|
||||
|
||||
networks:
|
||||
default:
|
||||
driver: bridge
|
||||
|
BIN
media/logo1_big.png
Normal file
BIN
media/logo1_big.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 201 KiB |
@ -67,6 +67,10 @@ class ServerSettings(AbstractSettings):
|
||||
def public_path(cls) -> str:
|
||||
return "/cert/public.pem"
|
||||
|
||||
@classmethod
|
||||
def append_text(cls) -> str:
|
||||
return "\n\nЭтот бот создан с помощью @OlgramBot"
|
||||
|
||||
|
||||
class BotSettings(AbstractSettings):
|
||||
@classmethod
|
||||
|
@ -32,7 +32,7 @@ async def message_handler(message, *args, **kwargs):
|
||||
if message.text and message.text.startswith("/start"):
|
||||
# На команду start нужно ответить, не пересылая сообщение никуда
|
||||
return SendMessage(chat_id=message.chat.id,
|
||||
text=bot.start_text)
|
||||
text=bot.start_text + ServerSettings.append_text())
|
||||
|
||||
super_chat_id = await bot.super_chat_id()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user