Я создаю чат-бота с использованием Python и MS Bot Builder SDK для Python.
Бот - это HTTPServer, использующий обработчик. То, что я хочу, это переменные, которые помогают мне отслеживать разговор, например счетчик сообщений. Но я не могу заставить его работать, каждый раз, когда бот получает запрос (я что-то отправляю), как будто создается другой обработчик, потому что количество сообщений всегда равно 1. Я не уверен, что вызывается на каждом запрос.
Вот (важный) код:
class BotRequestHandler(BaseHTTPRequestHandler):
count = 0
@staticmethod
def __create_reply_activity(request_activity, text):
# not important
def __handle_conversation_update_activity(self, activity):
# not important
def __handle_message_activity(self, activity):
self.count += 1 ############## INCREMENTATION ##############
self.send_response(200)
self.end_headers()
credentials = MicrosoftAppCredentials(APP_ID, APP_PASSWORD)
connector = ConnectorClient(credentials, base_url=activity.service_url)
reply = BotRequestHandler.__create_reply_activity(activity, '(%d) You said: %s' % (self.count, activity.text))
connector.conversations.send_to_conversation(reply.conversation.id, reply)
def __handle_authentication(self, activity):
# not important
def __unhandled_activity(self):
# not important
def do_POST(self):
body = self.rfile.read(int(self.headers['Content-Length']))
data = json.loads(str(body, 'utf-8'))
activity = Activity.deserialize(data)
if not self.__handle_authentication(activity):
return
if activity.type == ActivityTypes.conversation_update.value:
self.__handle_conversation_update_activity(activity)
elif activity.type == ActivityTypes.message.value:
self.__handle_message_activity(activity)
else:
self.__unhandled_activity()
class BotServer(HTTPServer):
def __init__(self):
super().__init__(('localhost', 9000), BotRequestHandler)
def _run(self):
try:
print('Started http server')
self.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down server')
self.socket.close()
server = BotServer()
server._run()
Что я получу, если введу сообщение 'a' 4 раза is '(1) Вы сказали: a' 4 раза.
Я попытался переопределить метод инициализации BaseHTTPRequestHandler, но он не сработал.
Для тех, кто знает: дело в Python SDK, у нас нет диалогов Waterfall, как в Node.js, или я не нашел, как это работает, если кто-то знает, просто скажите мне, потому что здесь мне нужно сохранить отслеживать много вещей от пользователя и мне нужны переменные. И я действительно хочу использовать Python, потому что мне нужны некоторые ML и другие модули в Python.
Спасибо за вашу помощь.