#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Fuction recognize intents and connect them to the right actions import paho.mqtt.client as mqtt import json from time import sleep from logic import tts, read_script from config import characters, directions HOST = 'localhost' PORT = 1883 def on_connect(client, userdata, flags, rc): print("Connected to {0} with result code {1}".format(HOST, rc)) # Subscribe to the text detected topic client.subscribe("hermes/nlu/intentNotRecognized") client.subscribe('hermes/intent/jocavdh:ask') client.subscribe('hermes/intent/jocavdh:answer_yes') def on_introduce(client,data,msg): data = json.loads(msg.payload) sessionId = data['sessionId'] for character, line, direction in read_script('play_scripts/demo.txt'): input_text = line voice = characters.get(character)[0] speaker = characters.get(character)[1] #speaker = 'default' # Some way to do something with the stage directions will come here action = directions.get(direction[0]) tts(voice, input_text, speaker) print('say this sentence') if action == 'listen_audience': print('listen to the audience') client.publish('hermes/dialogueManager/endSession', json.dumps({ 'sessionId': sessionId })) client.publish('hermes/dialogueManager/startSession', json.dumps({ 'siteId': 'default', 'init': {'type': 'action', 'canBeEnqueued': True, 'intentFilter':['jocavdh:answer_yes']} })) break if action == 'listen_google_home': print('ok google') client.publish('hermes/dialogueManager/endSession', json.dumps({ 'sessionId': sessionId })) client.publish('hermes/dialogueManager/startSession', json.dumps({ 'siteId': 'default', 'init': {'type': 'action', 'canBeEnqueued': True, 'sendIntentNotRecognized': True} })) # client.publish("hermes/asr/toggleOn") # client.publish('hermes/asr/startListening', json.dumps({ # 'siteId': 'default' # })) break def on_answer(client,data,msg): data = json.loads(msg.payload) answer_value = data['slots'][0]['value']['value'] print(answer_value) voice = "dfki-obadiah" speaker = 'default' if answer_value == 'yes': input_text = 'Lorem ipsum' tts(voice, input_text, speaker) #on_introduce(client,data,msg) if answer_value == 'no': input_text = 'nope nope nope' tts(voice, input_text, speaker) print('The play is over.') def onIntentNotRecognized(client, data, msg): data = json.loads(msg.payload) print('not recognized') on_introduce(client,data,msg) client = mqtt.Client() client.connect(HOST, PORT, 60) client.on_connect = on_connect client.message_callback_add('hermes/intent/jocavdh:ask', on_introduce) client.message_callback_add('hermes/intent/jocavdh:answer_yes', on_answer) client.message_callback_add("hermes/nlu/intentNotRecognized", onIntentNotRecognized) print('main') client.loop_forever()