Add paradiz booking registry and Telegram notification flow

This commit is contained in:
OpenClaw Assistant
2026-02-21 20:03:49 +00:00
parent 7831c1df00
commit 9e7149bb22
4 changed files with 192 additions and 0 deletions

View File

@@ -0,0 +1,143 @@
#!/usr/bin/env python3
import argparse
import json
import os
from datetime import datetime
from pathlib import Path
from urllib import parse, request
def send_telegram(bot_token: str, chat_id: str, text: str) -> None:
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
payload = parse.urlencode({
"chat_id": chat_id,
"text": text,
"disable_web_page_preview": "true",
}).encode("utf-8")
req = request.Request(url, data=payload, method="POST")
with request.urlopen(req, timeout=15) as resp:
if resp.status != 200:
raise RuntimeError(f"Telegram HTTP {resp.status}")
def load_telegram_from_config():
cfg = Path('/home/openclaw/.openclaw/openclaw.json')
if not cfg.exists():
return "", ""
try:
j = json.loads(cfg.read_text(encoding='utf-8'))
except Exception:
return "", ""
bot = ""
chat = ""
# 1) dedicated env for paradiz skill
try:
env = j.get('skills', {}).get('entries', {}).get('paradiz', {}).get('env', {})
bot = (env.get('PARADIZ_TG_BOT_TOKEN') or "").strip()
chat = str(env.get('PARADIZ_TG_CHAT_ID') or "").strip()
except Exception:
pass
# 2) fallback to channel token format
if not bot:
bt = str(j.get('channels', {}).get('telegram', {}).get('botToken', '')).strip()
if bt.startswith('https://api.telegram.org/bot'):
bt = bt.replace('https://api.telegram.org/bot', '', 1)
bot = bt
return bot, chat
def main():
p = argparse.ArgumentParser(description="Сохранить бронь и отправить уведомление в Telegram")
p.add_argument("--guest", required=True, help="ФИО гостя")
p.add_argument("--phone", required=True, help="Телефон")
p.add_argument("--email", required=True, help="E-mail")
p.add_argument("--checkin", required=True, help="Дата заезда YYYY-MM-DD")
p.add_argument("--checkout", required=True, help="Дата выезда YYYY-MM-DD")
p.add_argument("--guests", required=True, type=int, help="Количество гостей")
p.add_argument("--room", required=True, help="Категория номера")
p.add_argument("--total", required=True, help="Итоговая сумма")
p.add_argument("--prepay", required=True, help="Сумма предоплаты")
p.add_argument("--notes", default="", help="Комментарий")
p.add_argument("--file", default="/home/openclaw/.openclaw/workspace/skills/paradiz/data/bookings.txt")
p.add_argument("--notify", action="store_true", help="Отправить Telegram-уведомление")
args = p.parse_args()
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
entry = {
"created_at": now,
"guest": args.guest,
"phone": args.phone,
"email": args.email,
"checkin": args.checkin,
"checkout": args.checkout,
"guests": args.guests,
"room": args.room,
"total": args.total,
"prepay": args.prepay,
"notes": args.notes,
}
out = Path(args.file)
out.parent.mkdir(parents=True, exist_ok=True)
human = (
f"[{now}] БРОНЬ\n"
f"Гость: {args.guest}\n"
f"Телефон: {args.phone}\n"
f"Email: {args.email}\n"
f"Период: {args.checkin}{args.checkout}\n"
f"Гостей: {args.guests}\n"
f"Номер: {args.room}\n"
f"Итого: {args.total}\n"
f"Предоплата: {args.prepay}\n"
f"Комментарий: {args.notes or '-'}\n"
f"---\n"
)
with out.open("a", encoding="utf-8") as f:
f.write(human)
jsonl = out.with_suffix(".jsonl")
with jsonl.open("a", encoding="utf-8") as jf:
jf.write(json.dumps(entry, ensure_ascii=False) + "\n")
sent = False
err = None
if args.notify:
bot_token = os.getenv("PARADIZ_TG_BOT_TOKEN", "").strip()
chat_id = os.getenv("PARADIZ_TG_CHAT_ID", "").strip()
if not (bot_token and chat_id):
cfg_bot, cfg_chat = load_telegram_from_config()
bot_token = bot_token or cfg_bot
chat_id = chat_id or cfg_chat
if bot_token and chat_id:
text = (
"📌 Новая бронь Парадиз\n"
f"Гость: {args.guest}\n"
f"Телефон: {args.phone}\n"
f"Email: {args.email}\n"
f"Период: {args.checkin}{args.checkout}\n"
f"Гостей: {args.guests}\n"
f"Номер: {args.room}\n"
f"Итого: {args.total}\n"
f"Предоплата: {args.prepay}\n"
f"Комментарий: {args.notes or '-'}"
)
try:
send_telegram(bot_token, chat_id, text)
sent = True
except Exception as e:
err = str(e)
else:
err = "PARADIZ_TG_BOT_TOKEN / PARADIZ_TG_CHAT_ID не заданы"
print(json.dumps({"ok": True, "saved": str(out), "jsonl": str(jsonl), "telegram_sent": sent, "telegram_error": err}, ensure_ascii=False))
if __name__ == "__main__":
main()