Beispiel #1
0
    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
                        })