我正在用python-telegram-bot
构建一个菜单系统
我创建了一个Django项目,如下所示,使用Webhook连接到电报
当第一条信息发出时,我会询问联系人的电话号码和电话号码 保留这个号码,这样我就不需要在对话的下一条消息中要求它, 但它不起作用。 我试图将其存储在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
一旦我在Api中找不到解决方案,我就使用这个解决方案:
当有交互时,我检查联系人是否已经存在于我的数据库中, 如果我继续谈话, 如果是否定的,我要求通过共享电话进行身份验证。 所以当我得到信息时,我会把它记录在数据库里, 这样,在新的交互中,我可以自动识别它
在我的数据库中记录它是一个选项,另一个选项是作为文本存档
如果你有更好的选择,请给我们看看
相关问题 更多 >
编程相关推荐