Как сохранить номер телефона контакта в памяти в ChatBot, используя python -telegram-bot - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю с python-telegram-bot при создании системы меню.

Я создал проект Django, как показано ниже, используя Webhook для подключения к Telegram.

Когда первое сообщение отправлено, я спрашиваю у контактного лица его номер телефона и сохраняю этот номер, чтобы мне не нужно было просить его в следующих сообщениях в беседе, но он не работает. Я пытался сохранить его в request.session, но, очевидно, каждое новое сообщение - это новый сеанс, и поэтому я теряю номер.

Как я могу решить эту проблему? Любая помощь приветствуется.

view.py

import json
from django.http.response import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from core.message import proccess


@csrf_exempt
def event(request):
    json_telegram = json.loads(request.body)
    proccess(request, json_telegram)
    return HttpResponse()

messages.py

import telegram
from bot_webhook.settings import TOKEN
from telegram import InlineKeyboardMarkup, InlineKeyboardButton

bot = telegram.Bot(token=TOKEN)


def proccess(request, json_telegram):
    if 'login' in request.session:
        msg_options(json_telegram)

    else:
        try:
            request.session['login'] = json_telegram['message']['contact']['phone_number']
            msg_options(json_telegram)

        except BaseException:
            msg_login(json_telegram)


def msg_login(json_telegram):
    chat_id = json_telegram['message']['from']['id']
    reply_markup = telegram.ReplyKeyboardMarkup(
        [[telegram.KeyboardButton('Click to Login', request_contact=True)]],
        resize_keyboard=True,
        one_time_keyboard=True
    )
    bot.sendMessage(chat_id, 'I need to authorize your access.', reply_markup=reply_markup)


def msg_options(json_telegram):
    chat_id = json_telegram['message']['from']['id']
    first_name = json_telegram['message']['from']['first_name']
    last_name = json_telegram['message']['from']['last_name']
    button_list = []
    button_list.append(InlineKeyboardButton('Button One', callback_data='query_one'))
    button_list.append(InlineKeyboardButton('Button two', callback_data='query_two'))
    reply_markup = InlineKeyboardMarkup(build_menu(button_list, n_cols=2))
    bot.send_message(text='Hello {0} {1}!\nI have this options:'.format(first_name, last_name),
                     chat_id=chat_id,
                     reply_markup=reply_markup)


def build_menu(buttons,
               n_cols,
               header_buttons=None,
               footer_buttons=None):
    menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
    if header_buttons:
        menu.insert(0, [header_buttons])
    if footer_buttons:
        menu.append([footer_buttons])
    return menu

1 Ответ

0 голосов
/ 15 апреля 2020

Как только я не нашел решение в Api, я работал с этим решением:

Когда происходит взаимодействие, я проверяю, существует ли уже контакт в моей базе данных, и если положительный, я продолжаю разговор, если отрицательный, я прошу идентификации, поделившись телефоном. Поэтому, когда я получаю информацию, я записываю ее в базу данных, чтобы при новом взаимодействии я мог ее автоматически идентифицировать.

Запись в моей базе данных - это вариант, другой вариант - текстовый архив.

Если у вас есть лучший вариант, покажите его нам.

...