def test_carousel(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render( "testuser", "<carousel><card><image>http://servusai.com/aiml.png</image><title>Servusai</title><subtitle>Home of programr</subtitle><button><text>Hello</text><url>http://click.me</url></button></card></carousel>" ) self.assertIsNotNone(mock_console._response) self.assertEquals( { 'cards': [{ 'buttons': [{ 'postback': None, 'text': 'Hello', 'type': 'button', 'url': 'http://click.me' }], 'image': 'http://servusai.com/aiml.png', 'subtitle': 'Home of programr', 'title': 'Servusai', 'type': 'card' }], 'type': 'carousel' }, mock_console._response)
def test_location(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<location />") self.assertIsNotNone(mock_console._response) self.assertEquals({'type': 'location'}, mock_console._response)
def test_split(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<split />") self.assertIsNotNone(mock_console._response) self.assertEquals({'type': 'split'}, mock_console._response)
def __init__(self, argument_parser=None): EventBotClient.__init__(self, "Socket", argument_parser) print("TCP Socket Client server now listening on %s:%d" % (self._host, self._port)) self._server_socket = self.create_socket_connection( self._host, self._port, self._queue, self._max_buffer) self._renderer = JSONRenderer(self) config = self.client_context.brain.configuration self.client_context.brain.load_services(config)
def test_delay(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<delay><seconds>0</seconds></delay>") self.assertIsNotNone(mock_console._response) self.assertEquals({ 'seconds': '0', 'type': 'delay' }, mock_console._response)
def test_text_only(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "Hello world") self.assertIsNotNone(mock_console._response) self.assertEquals({ 'text': 'Hello world', 'type': 'text' }, mock_console._response)
def test_reply_without_postback(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<reply><text>Hello</text></reply>") self.assertIsNotNone(mock_console._response) self.assertEquals({ 'postback': None, 'text': 'Hello', 'type': 'reply' }, mock_console._response)
def test_video(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<video>http://servusai.com/aiml.mov</video>") self.assertIsNotNone(mock_console._response) self.assertEquals( { 'type': 'video', 'url': 'http://servusai.com/aiml.mov' }, mock_console._response)
def test_image(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<image>http://servusai.com/aiml.png</image>") self.assertIsNotNone(mock_console._response) self.assertEquals( { 'type': 'image', 'url': 'http://servusai.com/aiml.png' }, mock_console._response)
def test_link(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render( "testuser", "<link><text>Hello</text><url>http://click.me</url></link>") self.assertIsNotNone(mock_console._response) self.assertEquals( { 'text': 'Hello', 'type': 'link', 'url': 'http://click.me' }, mock_console._response)
def test_postback_button(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render( "testuser", "<button><text>Hello</text><postback>HELLO</postback></button>") self.assertIsNotNone(mock_console._response) self.assertEquals( { 'postback': 'HELLO', 'text': 'Hello', 'type': 'button', 'url': None }, mock_console._response)
def test_url_button(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render( "testuser", "<button><text>Hello</text><url>http://click.me</url></button>") self.assertIsNotNone(mock_console._response) self.assertEquals( { 'postback': None, 'text': 'Hello', 'type': 'button', 'url': 'http://click.me' }, mock_console._response)
def test_olist(self): mock_console = MockConsoleBotClient() renderer = JSONRenderer(mock_console) self.assertIsNotNone(renderer) renderer.render("testuser", "<olist><item>Item1</item><item>Item2</item></olist>") self.assertIsNotNone(mock_console._response) self.assertEquals( { 'items': [{ 'text': 'Item1', 'type': 'text' }, { 'text': 'Item2', 'type': 'text' }], 'type': 'list' }, mock_console._response)
class SocketBotClient(EventBotClient): def __init__(self, argument_parser=None): EventBotClient.__init__(self, "Socket", argument_parser) print("TCP Socket Client server now listening on %s:%d" % (self._host, self._port)) self._server_socket = self.create_socket_connection( self._host, self._port, self._queue, self._max_buffer) self._renderer = JSONRenderer(self) config = self.client_context.brain.configuration self.client_context.brain.load_services(config) def get_description(self): return 'ProgramR AIML2.0 TCP Socket Client' def get_client_configuration(self): return SocketConfiguration() def parse_configuration(self): self._host = self.configuration.client_configuration.host self._port = self.configuration.client_configuration.port self._queue = self.configuration.client_configuration.queue self._max_buffer = self.configuration.client_configuration.max_buffer def extract_question(self, receive_payload): question = None if 'question' in receive_payload: question = receive_payload['question'] if question is None or question == "": raise Exception("Clientid missing from payload") return question def extract_userid(self, receive_payload): userid = None if 'userid' in receive_payload: userid = receive_payload['userid'] if userid is None or userid == "": raise Exception("Clientid missing from payload") return userid def extract_servicename(self, receive_payload): servicename = None if 'servicename' in receive_payload: servicename = receive_payload['servicename'] if servicename is None or servicename == "": raise Exception("servicename missing from payload") return servicename def ask_question_from_service(self, servicename, question): service = ServiceFactory.get_service(servicename) answer = service.ask_question(self.client_context, question) return answer def create_socket_connection(self, host, port, queue, max_buffer): return SocketConnection(host, port, queue, max_buffer) def process_question(self, client_context, question): # Returns a response return client_context.bot.ask_question(client_context, question, responselogger=self) def render_response(self, client_context, response): # Calls the renderer which handles RCS context, and then calls back to the client to show response self._renderer.render(client_context, response) def process_response(self, client_context, response): self._client_connection.send_response(client_context.userid, response) def run_loop(self): bot = self.bot_factory.bot("bot") self._running = True bot.initiate_conversation_storage() while self._running: self._running = self.wait_and_answer() def wait_and_answer(self, ): running = True try: self._client_connection = self._server_socket.accept_connection() receive_payload = self._client_connection.receive_data() question = self.extract_question(receive_payload) userid = self.extract_userid(receive_payload) service_name = self.extract_servicename(receive_payload) client_context = self.create_client_context(userid) answer = self.ask_question_from_service(service_name, question) self.render_response(client_context, answer) except KeyboardInterrupt: running = False YLogger.debug(self, "Cleaning up and exiting...") except Exception as e: if self._client_connection is not None: self._client_connection.send_error(e) finally: if self._client_connection is not None: self._client_connection.close() return running def run(self): if self.arguments.noloop is False: YLogger.info(self, "Entering conversation loop...") self.prior_to_run_loop() self.run_loop() self.post_run_loop() else: YLogger.debug(self, "noloop set to True, exiting...")