2

我正在使用 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 中的其他模块。

谢谢您的帮助。

4

0 回答 0