@crut0y

Почему не работает callback второй раз?

import telebot
import webbrowser
from telebot import types
import sqlite3
import requests
import json

bot = telebot.TeleBot('token')

file = open('./start1.jpg', 'rb')
@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton('Оценка', url='https://google.com')
    markup.add(btn1)
    btn2 = types.InlineKeyboardButton('Кадастровые работы', callback_data='cadastral')
    markup.add(btn2)
    btn3 = types.InlineKeyboardButton('Строительные экспертизы', callback_data='expertise')
    markup.add(btn3)
    bot.send_photo(message.chat.id, file, caption='Здравствуйте, это Бот-помощник группы компаний "Стандарт Оценка", я помогу Вам определиться с нужной услугой, оформить заявку и связаться с администратором. Выберете желаемую услугу', reply_markup=markup)



@bot.callback_query_handler(func=lambda callback: True)
def callback_message(callback):
    if callback.data == 'cadastral':



        bot.delete_message(callback.message.chat.id, callback.message.message_id - 0)
        bot.send_message(callback.message.chat.id, 'Введите свое ФИО')
        @bot.message_handler(content_types=['text'])  # Создаём новую функцию ,реагирующую на любое сообщение
        def message_input_step(message):
            global name
            name = message.text
            bot.send_message(callback.message.chat.id, 'Введите свой номер телефона')
            bot.register_next_step_handler(message, phone)

        @bot.message_handler(content_types=['text'])
        def phone(message):
            global phone
            phone = message.text
            markup = types.InlineKeyboardMarkup()
            btn1 = types.InlineKeyboardButton('Все верно✅', callback_data='all')
            markup.add(btn1)
            btn2 = types.InlineKeyboardButton('Начать сначало❌', callback_data='cadastral')
            markup.add(btn2)
            bot.send_message(callback.message.chat.id, f'Ваше ФИО: {name}\nВаш номер телефона: {phone}', reply_markup=markup)

        @bot.callback_query_handler(func=lambda callback: True)
        def callback_message(callback):
            if callback.data == 'all':
                bot.send_message(callback.message.chat.id, 'kgf')
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
- Зачем светить своим токеном?
- Зачем 2 раза объявлять одну и туже функцию callback_message?
- Внутри функции callback_message Вы использовали callback.message.chat.id для отправки сообщений, но callback.message является ссылкой на сообщение, которое инициировало callback, а не на сообщение, которое нужно отправить.
- А как же обработка callback_data cadastral?
- message.message_id минус 0?
import telebot
from telebot import types

bot = telebot.TeleBot('token')
file = open('./start1.jpg', 'rb')

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton('Оценка', url='https://google.com'))
    markup.add(types.InlineKeyboardButton('Кадастровые работы', callback_data='cadastral'))
    markup.add(types.InlineKeyboardButton('Строительные экспертизы', callback_data='expertise'))
    bot.send_photo(message.chat.id, file, 
                   caption='Здравствуйте, это Бот-помощник группы компаний "Стандарт Оценка", я помогу Вам определиться с нужной услугой, оформить заявку и связаться с администратором. Выберете желаемую услугу', 
                   reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)
def callback_message(call):
    if call.data == 'cadastral':
        bot.delete_message(call.message.chat.id, call.message.message_id)
        bot.send_message(call.message.chat.id, 'Введите свое ФИО')
        bot.register_next_step_handler(call.message, message_input_step)
    elif call.data == 'expertise':
        bot.send_message(call.message.chat.id, 'Вы выбрали Строительные экспертизы')
    elif call.data == 'all':
        bot.send_message(call.message.chat.id, 'Все данные верны')

def message_input_step(message):
    global name
    name = message.text
    bot.send_message(message.chat.id, 'Введите свой номер телефона')
    bot.register_next_step_handler(message, phone)

def phone(message):
    global phone
    phone = message.text
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton('Все верно✅', callback_data='all'))
    markup.add(types.InlineKeyboardButton('Начать сначало❌', callback_data='cadastral'))
    bot.send_message(message.chat.id, f'Ваше ФИО: {name}\nВаш номер телефона: {phone}', reply_markup=markup)

if __name__ == "__main__":
    bot.polling(none_stop=True)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы