def onEndSession(self, session: DialogSession, reason: str = 'nominal'): self.enableCaptureFeedback() text = session.payload.get('text', '') if text: session.isEnding = True self.cancelSessionTimeout(sessionId=session.sessionId) self.MqttManager.publish( topic=constants.TOPIC_TTS_SAY, payload={ 'text': session.payload['text'], 'lang': self.LanguageManager.activeLanguageAndCountryCode, 'siteId': session.deviceUid, 'sessionId': session.sessionId }) else: self.MqttManager.publish(topic=constants.TOPIC_SESSION_ENDED, payload={ 'siteId': session.deviceUid, 'sessionId': session.sessionId, 'customData': json.dumps(session.customData), 'termination': { 'reason': reason } })
def onSayFinished(self, session: DialogSession, uid: str = None): """ Triggers when a Tts say has finished playing. If the session has not yet ended and is currently in dialog, we start listening again :param uid: :param session: :return: """ if not session or session.hasEnded: return if session.isEnding or session.isNotification: if session.isEnding and 0 < session.notUnderstood < int( self.ConfigManager.getAliceConfigByName( 'notUnderstoodRetries')): session.isEnding = False self.SkillManager.getSkillInstance( 'AliceCore').askUpdateUtterance(session=session) return session.payload['text'] = '' self.onEndSession(session=session, reason='nominal') else: if not session.hasStarted: self.onStartSession(deviceUid=session.deviceUid, payload=dict()) else: self.startSessionTimeout(sessionId=session.sessionId) if not session.textInput: self.MqttManager.publish( topic=constants.TOPIC_ASR_TOGGLE_ON) self.MqttManager.publish( topic=constants.TOPIC_ASR_START_LISTENING, payload={ 'siteId': session.deviceUid, 'sessionId': session.sessionId })