197 lines
4.8 KiB
Markdown
197 lines
4.8 KiB
Markdown
---
|
||
title: Установка и настройка телеграм-бота для отправки HTTP-запросов в 1с
|
||
slug: администрирование/установка-и-настройка-телеграм-бота-для-отправки-http-запросов-в-1с
|
||
---
|
||
# Инструкция по установке и обслуживанию Telegram JSON File Bot
|
||
|
||
## Зависимости
|
||
|
||
- Python 3.9+
|
||
- `python3-venv`, `pip`
|
||
- Рабочий Telegram-бот (токен от @BotFather)
|
||
- URL HTTP-сервиса на стороне 1С
|
||
- Пользователь `god` на сервере
|
||
|
||
---
|
||
|
||
## 1. Установка
|
||
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install python3 python3-pip python3-venv -y
|
||
```
|
||
|
||
Создаём директорию для проекта:
|
||
|
||
```bash
|
||
mkdir -p ~/telegram_bot
|
||
cd ~/telegram_bot
|
||
```
|
||
|
||
Создаём виртуальное окружение и активируем:
|
||
|
||
```bash
|
||
python3 -m venv venv
|
||
source venv/bin/activate
|
||
```
|
||
|
||
Устанавливаем зависимости:
|
||
|
||
```bash
|
||
pip install python-telegram-bot requests
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Создание `bot.py`
|
||
|
||
Создай файл `bot.py`:
|
||
|
||
```bash
|
||
nano ~/telegram_bot/bot.py
|
||
```
|
||
|
||
Вставь код (адаптируй токен и URL):
|
||
|
||
```python
|
||
import logging
|
||
import requests
|
||
from io import BytesIO
|
||
from telegram import Update
|
||
from telegram.ext import ApplicationBuilder, MessageHandler, ContextTypes, filters
|
||
|
||
# Настройки
|
||
BOT_TOKEN = 'ТВОЙ_ТОКЕН'
|
||
TARGET_URL = 'http://IP_ИЛИ_ДОМЕН_1С/endpoint'
|
||
ALLOWED_USERS = {123456789} # замени на свой Telegram ID
|
||
HTTP_USERNAME = '1c_user' # если требуется Basic Auth
|
||
HTTP_PASSWORD = '1c_pass'
|
||
|
||
logging.basicConfig(level=logging.INFO)
|
||
|
||
def is_authorized(user_id: int) -> bool:
|
||
return user_id in ALLOWED_USERS
|
||
|
||
async def handle_file(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
user_id = update.effective_user.id
|
||
|
||
if not is_authorized(user_id):
|
||
await update.message.reply_text("Доступ запрещён.")
|
||
return
|
||
|
||
document = update.message.document
|
||
if not document.file_name.endswith('.json') and not document.file_name.endswith('.txt'):
|
||
await update.message.reply_text("Отправьте .json или .txt файл.")
|
||
return
|
||
|
||
file = await document.get_file()
|
||
buffer = BytesIO()
|
||
await file.download_to_memory(out=buffer)
|
||
content_bytes = buffer.getvalue()
|
||
content_str = content_bytes.decode('utf-8', errors='replace')
|
||
|
||
try:
|
||
response = requests.post(
|
||
TARGET_URL,
|
||
data=content_str.encode('utf-8'),
|
||
headers={"Content-Type": "application/json"},
|
||
auth=(HTTP_USERNAME, HTTP_PASSWORD)
|
||
)
|
||
await update.message.reply_text(
|
||
f"Файл отправлен.\n"
|
||
f"Статус: {response.status_code}\n"
|
||
f"Ответ:\n{response.text}"
|
||
)
|
||
except Exception as e:
|
||
await update.message.reply_text(f"Ошибка при отправке: {str(e)}")
|
||
|
||
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||
await update.message.reply_text(f"Привет! Твой Telegram ID: {update.effective_user.id}")
|
||
|
||
if __name__ == '__main__':
|
||
app = ApplicationBuilder().token(BOT_TOKEN).build()
|
||
app.add_handler(MessageHandler(filters.Document.ALL, handle_file))
|
||
app.add_handler(MessageHandler(filters.TEXT & filters.Regex(r'^/start'), start))
|
||
app.run_polling()
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Настройка systemd-сервиса
|
||
|
||
Создай файл:
|
||
|
||
```bash
|
||
sudo nano /etc/systemd/system/telegram-bot.service
|
||
```
|
||
|
||
Содержимое:
|
||
|
||
```ini
|
||
[Unit]
|
||
Description=Telegram JSON File Bot
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=/home/god/telegram_bot
|
||
ExecStart=/home/god/telegram_bot/venv/bin/python /home/god/telegram_bot/bot.py
|
||
Restart=always
|
||
RestartSec=5
|
||
User=god
|
||
Environment=PYTHONUNBUFFERED=1
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Запуск и автозапуск
|
||
|
||
```bash
|
||
sudo systemctl daemon-reexec
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable telegram-bot.service
|
||
sudo systemctl start telegram-bot.service
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Обслуживание
|
||
|
||
### ▶ Запуск / остановка
|
||
|
||
```bash
|
||
sudo systemctl start telegram-bot.service
|
||
sudo systemctl stop telegram-bot.service
|
||
sudo systemctl restart telegram-bot.service
|
||
```
|
||
|
||
### Статус
|
||
|
||
```bash
|
||
sudo systemctl status telegram-bot.service
|
||
```
|
||
|
||
### Просмотр логов
|
||
|
||
```bash
|
||
journalctl -u telegram-bot.service -f
|
||
```
|
||
|
||
(Для выхода из `journalctl` нажми `Ctrl+C`)
|
||
|
||
---
|
||
|
||
## Telegram ID
|
||
|
||
Чтобы узнать свой Telegram ID, отправь боту `/start`.
|
||
|
||
Бот ответит:
|
||
```
|
||
👋 Привет! Твой Telegram ID: 123456789
|
||
```
|
||
|
||
Добавь этот ID в список `ALLOWED_USERS`.
|