Перейти к содержимому
Главная ← Исходник Telegram-бота ← Исходник Telegram-бота приёма заказов
🛍️ Уровень: средний · бесплатно

Исходник Telegram-бота приёма заказов

Пошагово берёт у клиента имя, товар и номер телефона и сохраняет заказ.

WHAT_Исходник Telegram-бота приёма заказов

Этот бот ведёт пошаговый диалог с клиентом: сначала спрашивает имя, затем товар или услугу, и в конце номер телефона, и сохраняет заказ в файл orders.csv, чтобы вы могли открыть его в Excel.

Язык: Python
Зависимость: только requests
Стоимость: бесплатно
⚠️ Важное замечание: Telegram-бот должен запускаться на сервере, имеющем доступ к api.telegram.org. На некоторых хостингах этот адрес напрямую закрыт. Если бот не запустился, проблема обычно в доступе сервера, а не в коде. Если застряли, свяжитесь с Filtor.

Пошаговое руководство по запуску

Выполните эти шаги по порядку, чтобы бот запустился на вашей системе или сервере.

Получите токен бота у BotFather в Telegram.
Установите Python и выполните pip install requests.
Откройте файл bot.py и замените значение TOKEN.
Выполните python bot.py и нажмите /start в Telegram, чтобы начать диалог оформления заказа.
Откройте файл orders.csv, создаваемый рядом с программой, в Excel и посмотрите заказы.

Весь исходник бота (скопируйте или скачайте)

Это тот же код, что и в ZIP-файле. Можете скопировать прямо отсюда. Только не забудьте заменить значение TOKEN на токен вашего бота.

bot.py
# -*- 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.

CTA_Исходник Telegram-бота приёма заказов

Не нужно разбираться самому. Команда Filtor установит, настроит и подключит этого бота к вашему бизнесу.

Другие исходники Telegram-ботов

→ Вернуться ко всем исходникам   Расчёт стоимости индивидуального бота