Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# IDE
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db
108 changes: 108 additions & 0 deletions VOICE_MANAGER_README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Голосовий Менеджер для Інтернет Магазину

## Опис

Цей модуль реалізує голосового менеджера для інтернет магазину, який автоматично відповідає на вхідні дзвінки та надає інформацію про товари, замовлення та контакти.

## Функціональність

### Основні можливості:
1. **Автоматична відповідь на дзвінки** - привітальне повідомлення з меню опцій
2. **Інформація про товари** - загальна інформація про каталог товарів
3. **Перевірка статусу замовлення** - можливість дізнатися про стан замовлення
4. **Контактна інформація** - телефон, години роботи
5. **Переведення на оператора** - зв'язок з живим оператором
6. **Логування дзвінків** - всі дзвінки автоматично зберігаються в Creatio CRM

### Меню опцій:
- **1** - Інформація про товари
- **2** - Перевірка статусу замовлення
- **3** - Зв'язок з оператором
- **4** - Контактна інформація

## Технічна реалізація

### Використані технології:
- **FastAPI** - веб-фреймворк для обробки HTTP запитів
- **Twilio** - сервіс для обробки голосових дзвінків (TwiML)
- **Text-to-Speech** - перетворення тексту у мову (Polly.Ruslana для української мови)
- **Creatio API** - інтеграція з CRM системою для логування

### Архітектура:
```
Вхідний дзвінок → Twilio → /voice/incoming → Voice Manager → TwiML відповідь
Введення цифр → Twilio → /voice/handle-input → Voice Manager → TwiML відповідь
Статус дзвінка → Twilio → /voice/status → Логування в Creatio
```

## Налаштування

### Необхідні змінні середовища:
```bash
# Основні налаштування бота
TELEGRAM_BOT_TOKEN=your_bot_token
WEBHOOK_BASE_URL=https://your-domain.com

# Налаштування Creatio
CREATIO_BASE_URL=https://your-creatio-instance.com/0
CREATIO_IDENTITY_SERVICE_URL=https://your-creatio-instance.com/0
CREATIO_CLIENT_ID=your_client_id
CREATIO_CLIENT_SECRET=your_client_secret

# Налаштування голосового менеджера
STORE_PHONE_NUMBER=+380991234567
```

### Налаштування Twilio:

1. **Створіть акаунт на Twilio**
2. **Купіть телефонний номер**
3. **Налаштуйте webhook URLs:**
- Voice URL: `https://your-domain.com/voice/incoming`
- Voice Method: `POST`
- Status Callback URL: `https://your-domain.com/voice/status`
- Status Callback Method: `POST`

### Endpoints:

- `POST /voice/incoming` - обробка вхідних дзвінків
- `POST /voice/handle-input` - обробка введення користувача
- `POST /voice/status` - отримання статусу дзвінків

## Використання

### Сценарій типового дзвінка:

1. **Клієнт дзвонить на номер магазину**
2. **Система автоматично відповідає:**
> "Вітаємо у Інтернет Магазин! Для отримання інформації про товари натисніть 1, для перевірки статусу замовлення натисніть 2, для зв'язку з оператором натисніть 3, для отримання контактної інформації натисніть 4."

3. **Клієнт натискає цифру 1** (інформація про товари)
4. **Система відповідає:**
> "Наш каталог включає електроніку, одяг, товари для дому та спорту. Для детальної консультації натисніть 0 для зв'язку з консультантом, або відвідайте наш сайт."

5. **Всі дії логуються в Creatio CRM**

### Можливості розширення:

- **Інтеграція з базою даних товарів** для надання детальної інформації
- **Система перевірки замовлень** за номером
- **Багатомовність** (додавання інших мов)
- **Розширене меню** з додатковими опціями
- **Інтеграція з календарем** для резервування консультацій

## Моніторинг та логування

Всі дзвінки автоматично логуються в Creatio CRM з наступною інформацією:
- Номер телефону дзвінка
- Час дзвінка
- Тривалість розмови
- Обрані опції меню
- Статус завершення дзвінка

## Безпека

- Всі дані передаються через HTTPS
- API ключі зберігаються як змінні середовища
- Логування не включає особисті дані клієнтів
- Інтеграція з Creatio використовує OAuth2
25 changes: 23 additions & 2 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
from bot import bot, dp
from aiogram.types import Update
from dotenv import load_dotenv
from voice_manager import handle_incoming_call, handle_voice_input, handle_voice_status_callback

load_dotenv()
logging.basicConfig(level=logging.INFO)

app = FastAPI()
app = FastAPI(title="Telegram Creatio ChatAPI с голосовым менеджером")

WEBHOOK_URL = f"{os.getenv('WEBHOOK_BASE_URL')}/webhook"

Expand All @@ -31,4 +32,24 @@ async def telegram_webhook(request: Request):

@app.get("/")
async def health_check():
return {"status": "ok"}
return {
"status": "ok",
"services": ["telegram_bot", "voice_manager"],
"description": "Telegram Bot с интеграцией Creatio и голосовым менеджером для интернет магазина"
}

# Голосовые endpoints
@app.post("/voice/incoming")
async def voice_incoming_call(request: Request):
"""Обработка входящих звонков через Twilio"""
return await handle_incoming_call(request)

@app.post("/voice/handle-input")
async def voice_handle_input(request: Request):
"""Обработка пользовательского ввода во время звонка"""
return await handle_voice_input(request)

@app.post("/voice/status")
async def voice_status_callback(request: Request):
"""Обработка статусных сообщений о звонках"""
return await handle_voice_status_callback(request)
4 changes: 4 additions & 0 deletions render.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@ services:
value: твій_бот_токен
- key: CREATIO_BASE_URL
value: https://knajpapro.creatio.com/0
- key: CREATIO_IDENTITY_SERVICE_URL
value: https://knajpapro.creatio.com/0
- key: CREATIO_CLIENT_ID
value: твій_client_id
- key: CREATIO_CLIENT_SECRET
value: твій_client_secret
- key: STORE_PHONE_NUMBER
value: "+380991234567"
plan: free
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ httpx==0.27.0
python-dotenv==1.0.1
uvicorn==0.29.0
pydantic==2.5.3
python-multipart==0.0.6
Loading