kb-personal/src/content/docs/knowledge-base/Администрирование/Установка и настройка телеграм-бота для отправки HTTP-запросов в 1с.md
2025-10-12 23:13:17 +05:00

197 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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`.