Как настроить бота чтобы он реагировал только на сообщения, содержащие номер телефона?

Как создать бота, который отвечает пользователю определенным сообщением только после получения его номера телефона?
  • 31 октября 2023 г. 19:00
Ответы на вопрос 4
Для того чтобы бот реагировал только на сообщения, содержащие номер телефона, можно использовать регулярные выражения для проверки текста сообщения. Вот пример кода на Python, используя библиотеку python-telegram-bot:

```python
import re
from telegram.ext import Updater, MessageHandler, Filters

def handle_message(update, context):
    text = update.message.text
    pattern = "\d{10}"  # Регулярное выражение для проверки наличия 10 цифр, предполагая, что номер телефона имеет 10 цифр.
    if re.search(pattern, text):
        # Если сообщение содержит номер телефона, можно добавить нужную логику реакции или ответа.
        context.bot.send_message(chat_id=update.effective_chat.id, text="Спасибо за предоставленный номер телефона!")
    else:
        # Иначе, игнорировать сообщение
        pass

def main():
    updater = Updater(token='YOUR_TOKEN', use_context=True)
    dispatcher = updater.dispatcher
    message_handler = MessageHandler(Filters.text & ~Filters.command, handle_message)
    dispatcher.add_handler(message_handler)
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
```

Чтобы создать бота, который отвечает пользователю определенным сообщением только после получения его номера телефона, можно использовать состояния (states) бота. Вот пример кода на Python, используя библиотеку python-telegram-bot:

```python
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, ConversationHandler

PHONE_NUMBER = range(1)  # Уникальное значение для определения состояния запроса номера телефона

def start(update, context):
    reply_text = "Привет! Пожалуйста, отправь мне свой номер телефона."
    update.message.reply_text(reply_text)

    return PHONE_NUMBER

def handle_phone_number(update, context):
    phone_number = update.message.contact.phone_number

    # Отправить пользователю нужное сообщение
    context.bot.send_message(chat_id=update.effective_chat.id, text="Спасибо за предоставленный номер телефона!")

    return ConversationHandler.END

def cancel(update, context):
    # Отменить текущую операцию и сбросить состояние
    context.bot.send_message(chat_id=update.effective_chat.id, text="Операция отменена.")
    
    return ConversationHandler.END

def main():
    updater = Updater(token='YOUR_TOKEN', use_context=True)
    dispatcher = updater.dispatcher

    conversation_handler = ConversationHandler(
        entry_points=[CommandHandler('start', start)],
        states={
            PHONE_NUMBER: [MessageHandler(Filters.contact, handle_phone_number)]
        },
        fallbacks=[CommandHandler('cancel', cancel)]
    )

    dispatcher.add_handler(conversation_handler)

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
```

В приведенном примере бот запрашивает пользователя отправить свой номер телефона и после получения номера отвечает пользователю нужным сообщением. Также, бот предлагает команду "/cancel" для отмены текущей операции.
1. Получаем сообщение 
 2. Проверяем на наличие номера телефона с помощью regexp 
 3. Выполняем нужные действия (или ничего не делаем)
Похожие вопросы