|
|
|
@ -1,7 +1,7 @@
|
|
|
|
# bot_message.py
|
|
|
|
# bot_message.py
|
|
|
|
import re
|
|
|
|
import re
|
|
|
|
import qrcode
|
|
|
|
import qrcode
|
|
|
|
from ai_agent.api_common import get_ai_agent, call_ai_agent, get_contact_meta, set_contact_meta, is_valid_name
|
|
|
|
from ai_agent.api_common import get_ai_agent, call_ai_agent, get_contact_meta
|
|
|
|
from max_bot.max_api import *
|
|
|
|
from max_bot.max_api import *
|
|
|
|
from restoran_max_bot.bot_started import check_registration
|
|
|
|
from restoran_max_bot.bot_started import check_registration
|
|
|
|
from restoran_max_bot.common import *
|
|
|
|
from restoran_max_bot.common import *
|
|
|
|
@ -106,45 +106,14 @@ def bot_message(client: Client, message: dict, settings_max: dict, message_type)
|
|
|
|
|
|
|
|
|
|
|
|
# ---------- проверка и запрос имени ----------
|
|
|
|
# ---------- проверка и запрос имени ----------
|
|
|
|
meta = get_contact_meta(contact)
|
|
|
|
meta = get_contact_meta(contact)
|
|
|
|
real_name = meta.get('real_name')
|
|
|
|
|
|
|
|
name_asked = meta.get('name_asked', False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Если имя ещё не запрашивали и нет реального имени
|
|
|
|
|
|
|
|
if not real_name and not name_asked:
|
|
|
|
|
|
|
|
# Проверяем имя, которое пришло из мессенджера (contact.name)
|
|
|
|
|
|
|
|
if is_valid_name(contact.name):
|
|
|
|
|
|
|
|
# Если валидное, сохраняем как реальное
|
|
|
|
|
|
|
|
set_contact_meta(contact, 'real_name', contact.name.strip())
|
|
|
|
|
|
|
|
real_name = contact.name.strip()
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
# Если невалидное — запрашиваем
|
|
|
|
|
|
|
|
maxbot_send_text_message(chat_id, settings_max['token'],
|
|
|
|
|
|
|
|
"Как мне к вам обращаться? Напишите ваше имя, чтобы я мог обращаться к вам лично.")
|
|
|
|
|
|
|
|
set_contact_meta(contact, 'name_asked', True)
|
|
|
|
|
|
|
|
# Завершаем обработку, ждём ответ
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Если имя уже запрашивали, но пользователь не ответил, а сейчас прислал сообщение
|
|
|
|
|
|
|
|
if name_asked and not real_name:
|
|
|
|
|
|
|
|
potential_name = message['message']['body']['text'].strip()
|
|
|
|
|
|
|
|
if is_valid_name(potential_name):
|
|
|
|
|
|
|
|
set_contact_meta(contact, 'real_name', potential_name)
|
|
|
|
|
|
|
|
real_name = potential_name
|
|
|
|
|
|
|
|
maxbot_send_text_message(chat_id, settings_max['token'],
|
|
|
|
|
|
|
|
f"Приятно познакомиться, {potential_name}! Чем могу помочь?")
|
|
|
|
|
|
|
|
# После приветствия продолжаем обработку (не завершаем)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
maxbot_send_text_message(chat_id, settings_max['token'],
|
|
|
|
|
|
|
|
"Пожалуйста, напишите ваше настоящее имя (от 2 символов).")
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ---------- обработка стандартных команд (меню, бонусы и т.п.) ----------
|
|
|
|
# ---------- обработка стандартных команд (меню, бонусы и т.п.) ----------
|
|
|
|
data = None
|
|
|
|
data = None
|
|
|
|
if message_type == 'message_created':
|
|
|
|
if message_type == 'message_created':
|
|
|
|
data = common_get_data(client=client, key=str(message['message']['body']['text']).lower())
|
|
|
|
data = common_get_data(client=client, key=str(message['message']['body']['text']).lower())
|
|
|
|
elif message_type == 'message_callback':
|
|
|
|
elif message_type == 'message_callback':
|
|
|
|
payload = json.loads(message['callback']['payload'])
|
|
|
|
data_payload = json.loads(message['callback']['payload'])
|
|
|
|
data = common_get_data(client=client, key=str(payload['data']).lower())
|
|
|
|
data = common_get_data(client=client, key=str(data_payload['data']).lower())
|
|
|
|
|
|
|
|
|
|
|
|
if data:
|
|
|
|
if data:
|
|
|
|
for dt in data:
|
|
|
|
for dt in data:
|
|
|
|
@ -188,6 +157,10 @@ def bot_message(client: Client, message: dict, settings_max: dict, message_type)
|
|
|
|
maxbot_send_menu_button(chat_id=chat_id, max_token=settings_max['token'], message='👇 Выберите раздел',
|
|
|
|
maxbot_send_menu_button(chat_id=chat_id, max_token=settings_max['token'], message='👇 Выберите раздел',
|
|
|
|
client=client)
|
|
|
|
client=client)
|
|
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
# если при нажатии на кнопку небыл найден контент, тогда для AI передаем имя кнопки
|
|
|
|
|
|
|
|
if message_type == 'message_callback':
|
|
|
|
|
|
|
|
message['message']['body']['text'] = str(data_payload['data']).lower()
|
|
|
|
|
|
|
|
|
|
|
|
# ---------- обработка через AI ----------
|
|
|
|
# ---------- обработка через AI ----------
|
|
|
|
# Проверяем, есть ли AI-агент у клиента
|
|
|
|
# Проверяем, есть ли AI-агент у клиента
|
|
|
|
@ -197,12 +170,13 @@ def bot_message(client: Client, message: dict, settings_max: dict, message_type)
|
|
|
|
message='👇 Выберите раздел', client=client)
|
|
|
|
message='👇 Выберите раздел', client=client)
|
|
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
real_name = contact.name.strip()
|
|
|
|
# Вызываем AI-агента через универсальную функцию, передавая реальное имя
|
|
|
|
# Вызываем AI-агента через универсальную функцию, передавая реальное имя
|
|
|
|
response = call_ai_agent(
|
|
|
|
response = call_ai_agent(
|
|
|
|
client=client,
|
|
|
|
client=client,
|
|
|
|
session_id=str(chat_id),
|
|
|
|
session_id=str(chat_id),
|
|
|
|
user_query=message['message']['body']['text'],
|
|
|
|
user_query=message['message']['body']['text'],
|
|
|
|
contact_name=real_name # передаём имя для персонализации
|
|
|
|
contact_name=real_name # передаём имя для персонализации
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ---------- обработка ответа AI ----------
|
|
|
|
# ---------- обработка ответа AI ----------
|
|
|
|
@ -281,3 +255,34 @@ def bot_message(client: Client, message: dict, settings_max: dict, message_type)
|
|
|
|
maxbot_send_menu_button(chat_id=chat_id, max_token=settings_max['token'],
|
|
|
|
maxbot_send_menu_button(chat_id=chat_id, max_token=settings_max['token'],
|
|
|
|
message='👇 Выберите раздел', client=client)
|
|
|
|
message='👇 Выберите раздел', client=client)
|
|
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def bot_promo(client: Client, message: dict, settings_max: dict):
|
|
|
|
|
|
|
|
chat_id = message['chat_id']
|
|
|
|
|
|
|
|
promo = message['payload'].lower()
|
|
|
|
|
|
|
|
data = common_get_data(client=client, key=promo)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if data:
|
|
|
|
|
|
|
|
# Генерация qr кода URL в параметрах телефон, промокод
|
|
|
|
|
|
|
|
url_promo = f"https://maxbot.telefon-ip.ru/promo/?promo={promo}&chat-id={chat_id}"
|
|
|
|
|
|
|
|
img = qrcode.make(url_promo)
|
|
|
|
|
|
|
|
file_name = f"{promo}-{chat_id}.png"
|
|
|
|
|
|
|
|
img.save(f"{STATICFILES_DIRS[0]}/client_qr/{file_name}")
|
|
|
|
|
|
|
|
url = f"https://maxbot.telefon-ip.ru/static/client_qr/{file_name}"
|
|
|
|
|
|
|
|
maxbot_send_img_message(chat_id=chat_id, max_token=settings_max['token'], img=url,
|
|
|
|
|
|
|
|
message='Ваш QR-код')
|
|
|
|
|
|
|
|
# Отправка данных
|
|
|
|
|
|
|
|
for dt in data:
|
|
|
|
|
|
|
|
if dt.img:
|
|
|
|
|
|
|
|
url = f"https://cdn.telefon-ip.ru/{dt.img}?thumb=600"
|
|
|
|
|
|
|
|
maxbot_send_img_message(chat_id=chat_id, max_token=settings_max['token'], img=url, message=dt.descr)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if dt.title:
|
|
|
|
|
|
|
|
maxbot_send_text_message(chat_id=chat_id, max_token=settings_max['token'], message=dt.descr)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if dt.url:
|
|
|
|
|
|
|
|
maxbot_send_text_message(chat_id=chat_id, max_token=settings_max['token'], message=dt.url)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# сохранение в meta информации о коде
|
|
|
|
|
|
|
|
# ПРОВЕРКА НА РЕГИСТРАЦИЮ ???
|
|
|
|
|
|
|
|
return True
|
|
|
|
|