我正在使用 Python 和 MS Bot Builder SDK for 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 次,我得到的是'(1)你说:a' 4 次。我尝试覆盖 BaseHTTPRequestHandler 的 init 方法,但没有奏效。
对于那些知道的人:问题在于 Python SDK 我们没有像 Node.js 中那样的瀑布对话框,或者我没有找到它是如何工作的,如果有人知道就告诉我,因为在这里我需要跟踪一个来自用户的很多东西,我需要变量。我真的很想使用 Python,因为我需要一些 ML 和 Python 中的其他模块。
谢谢您的帮助。