Пошагово берёт у клиента имя, товар и номер телефона и сохраняет заказ.
Этот бот ведёт пошаговый диалог с клиентом: сначала спрашивает имя, затем товар или услугу, и в конце номер телефона, и сохраняет заказ в файл orders.csv, чтобы вы могли открыть его в Excel.
Выполните эти шаги по порядку, чтобы бот запустился на вашей системе или сервере.
Это тот же код, что и в ZIP-файле. Можете скопировать прямо отсюда. Только не забудьте заменить значение TOKEN на токен вашего бота.
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Telegram-бот приёма заказов | Создано Filtor (filtori.com)
# ------------------------------------------------------------
# Этот бот ведёт пошаговый диалог с клиентом, принимает заказ
# и сохраняет его в файл orders.csv:
# 1) имя клиента
# 2) товар или услуга
# 3) номер телефона
# В конце отправляет клиенту сводку заказа.
#
# Замечание: Telegram-бот должен запускаться на сервере,
# имеющем доступ к api.telegram.org.
#
# Полное руководство:
# https://filtori.com/tj/telegram-bot-source/order-bot/
# Индивидуальная версия + подключение панели и оплаты? +98 912 287 4862
# Наш Telegram: https://t.me/filtori
# ------------------------------------------------------------
import csv
import time
from datetime import datetime
import requests
TOKEN = "ВСТАВЬТЕ_ТОКЕН_ВАШЕГО_БОТА"
BASE = f"https://api.telegram.org/bot{TOKEN}"
# Файл, в который сохраняются заказы (создаётся рядом с этим файлом)
ORDERS_FILE = "orders.csv"
# ------------------------------------------------------------
# Временная память диалога:
# для каждого пользователя храним, на каком шаге приёма заказа он находится.
# Внимание: эта память в оперативной памяти; при перезапуске бота она очищается.
# Для реального проекта лучше использовать базу данных (команда Filtor поможет).
# ------------------------------------------------------------
sessions = {}
def send_message(chat_id, text):
url = f"{BASE}/sendMessage"
try:
requests.post(url, json={"chat_id": chat_id, "text": text}, timeout=15)
except requests.RequestException as error:
print("Ошибка отправки сообщения:", error)
def get_updates(offset):
url = f"{BASE}/getUpdates"
params = {"offset": offset, "timeout": 30}
try:
return requests.get(url, params=params, timeout=40).json()
except requests.RequestException as error:
print("Ошибка получения сообщений:", error)
return {"ok": False, "result": []}
def save_order(data):
"""Сохранение одного полного заказа в файл CSV."""
is_new_file = False
try:
with open(ORDERS_FILE, "r", encoding="utf-8"):
pass
except FileNotFoundError:
is_new_file = True
with open(ORDERS_FILE, "a", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
if is_new_file:
writer.writerow(["Дата", "Имя", "Товар", "Телефон"])
writer.writerow(
[
datetime.now().strftime("%Y-%m-%d %H:%M"),
data["name"],
data["product"],
data["phone"],
]
)
def handle(chat_id, text):
"""Логика пошагового диалога приёма заказа."""
if text == "/start":
sessions[chat_id] = {"step": "name", "data": {}}
send_message(chat_id, "Привет 👋 Для оформления заказа, пожалуйста, напишите ваше «имя и фамилию»:")
return
if chat_id not in sessions:
send_message(chat_id, "Чтобы начать оформление заказа, отправьте команду /start.")
return
session = sessions[chat_id]
step = session["step"]
if step == "name":
session["data"]["name"] = text
session["step"] = "product"
send_message(chat_id, "Спасибо ✅ Теперь напишите, какой товар или услугу вы хотите?")
elif step == "product":
session["data"]["product"] = text
session["step"] = "phone"
send_message(chat_id, "Отлично 👌 Напоследок напишите ваш номер телефона, чтобы мы связались с вами:")
elif step == "phone":
session["data"]["phone"] = text
data = session["data"]
save_order(data)
send_message(
chat_id,
"Ваш заказ успешно оформлен ✅\n\n"
f"👤 Имя: {data['name']}\n"
f"🛍️ Товар: {data['product']}\n"
f"📞 Телефон: {data['phone']}\n\n"
"Мы скоро свяжемся с вами. Спасибо, что выбрали Filtor 🙏",
)
del sessions[chat_id]
def main():
print("Бот приёма заказов Filtor запущен... (Ctrl+C для остановки)")
offset = 0
while True:
updates = get_updates(offset)
if not updates.get("ok"):
time.sleep(2)
continue
for update in updates.get("result", []):
offset = update["update_id"] + 1
message = update.get("message")
if not message:
continue
chat_id = message["chat"]["id"]
text = message.get("text", "")
if text:
handle(chat_id, text)
time.sleep(0.5)
if __name__ == "__main__":
main()
Они сохраняются в файл orders.csv рядом с программой, который открывается и в Excel.
Да, незавершённый диалог хранится во временной памяти; для реальной версии лучше использовать базу данных, которую Filtor может для вас настроить.
Да, в индивидуальной версии можно добавить онлайн-оплату, панель управления и SMS.
Не нужно разбираться самому. Команда Filtor установит, настроит и подключит этого бота к вашему бизнесу.