InoftSkill (application)

InoftSkill(settings_yaml_filepath: Optional[str] = None, settings_json_filepath: Optional[str] = None):

Fonctionnement

L'InoftSkill est l'objet qui ramène ensemble toutes vos classes (RequestHandler, StateHandler, etc), qui vas utiliser le fichier de configuration de votre application (voir fichier de configuration), et recevoir les requêtes de vos utilisateurs et générez la réponse adéquate.

Si vous n'avez pas spécifié d'emplacement précis de votre fichier de configuration, l'InoftSkill vas chercher dans le dossier où se trouve votre code Python, un fichier nommé app_settings.yaml (voir fichier de configuration)

Si vous avez plusieurs fichiers dans multiples dossier, la recherche de votre fichier de configuration vas partir du fichier de code où vous avez initialiser l'objet InoftSkill

Arguments

settings_yaml_filepath

Optionnel | Attends une valeur de type str (texte)

Vous permet de spécifier directement le fichier de configuration (en format .yaml) de votre application. Il n'est pas recommandé de l'utiliser, mais vous en aurez besoin si vous voulez que votre fichier de configuration ne soit pas dans le même dossier que votre principale fichier de code (celui où l'objet InoftSkill est initialisé)

Exemple :

from inoft_vocal_framework import InoftSkill
import os

skill = InoftSkill(settings_yaml_filepath=os.path.join(
    os.path.dirname(os.path.abspath(__file__)),
    # Trouve le chemin d'accès du dossier dans lequel se trouve
    # votre fichier de code qui est en train d'être éxécuter
    "dossier_pratique",
    # Ajoute au chemin d'accès, le dossier nommé dossier_pratique
    "app_settings.yaml")
    # Puis le nom de votre fichier de configuration
)

settings_json_filepath

Optionnel | Attends une valeur de type str (texte)

Exactement pareil que l'argument settings_yaml_filepath, mais à utiliser si votre fichier de configuration est en format .json et non .yaml

Fonctions

add_request_handler

Vous permet d'ajouter vos classes étant de type InoftRequestHandler une par une à votre application. Si vous n'ajoutez pas vos classes via cette fonctions, leurs fonctions can_handle (qui peut permettre leurs déclenchement) ne seront pas vérifié, donc vos classes ne seront pas utilisé.

skill.add_request_handler(LaunchRequestHandler)

Vos classes sont ajouté dans l'ordre à la même liste de classes. Une fois qu'une de vos classes à été déclenché via sa fonction can_handle, l'InoftSkill n'iras pas vérifier les autres classes. Si vous avez plusieurs classes qui peuvent potentiellement être déclenché par le même événement, uniquement la classe ayant été ajouté le plus tôt sera utilisé pour fournir la réponse à l'utilisateur.

add_state_handler

Vous permet d'ajouter vos classes étant de type InoftStateHandler une par une à votre application. Quand vous utilisez la fonction self.memorize_session_then_state(NomDeClasse) (voir plus). Alors, lors de la prochaine interaction de l'utilisateur, le framework vas chercher la classe StateHandler correspondante parmis tous les StateHandler que vous avez ajouté. Si la classe n'est pas trouvé, le framework vas essayer de trouver une classe RequestHandler pouvant gérer la requête, et si elle n'en trouve pas, elle utilisera la classe de DefaultFallback.

skill.add_state_handler(LaunchStateHandler)

set_default_fallback

Vous permet de définir la classe qui répondra à votre utilisateur si aucune de vos autres classes n'ont été activé (et donc n'ont pas créer de réponse).

skill.set_default_fallback_handler(DefaultFallback)

Vous ne pouvez définir qu'une seule classe de DefaultFallback, si vous utilisez la fonction deux fois, vous remplacerez la première classe que vous avez défini.

Usage

app.py
from inoft_vocal_framework import InoftSkill, \
    InoftRequestHandler, InoftStateHandler, InoftDefaultFallback

class LaunchRequestHandler(InoftRequestHandler):
    def can_handle(self) -> bool:
        return self.is_launch_request()

    def handle(self):
        self.say("Bien le bonjour ! Est-ce que vas bien mon ami ?")
        self.memorize_session_then_state(LaunchStateHandler)
        return self.to_platform_dict()

class LaunchStateHandler(InoftStateHandler):
    def handle(self):
        if self.is_in_intent_names(["Yes"]):
            self.say("Ca me fait plaisir ! Je te souhaite la meilleur des journées !")
        elif self.is_in_intent_names(["No"]):
            self.say("Mince, ne t'inquiète pas, je te garanti que ta journée vas être excellente ! ")
        else:
            self.say("Je n'ai pas très bien compris. Peut-être une autre fois ?")    
        
        # Peu importe la réponse, la session se fini ici.
        self.end_session()
        return self.to_plateform_dict()

# Une classe de DefaultFallback est obligatoire dans toutes applications
class DefaultFallback(InoftDefaultFallback):
    def handle(self):
        self.say("J'ai pas compris mon ami !")
        return self.to_platform_dict()

def lambda_handler(event, context):
    # L'objet InoftSkill doit obligatoirement être initier
    # et paramétré dans la function lambda_handler
    
    skill = InoftSkill()
    # Pas de chemin d'accès du fichier de configuration à été spécifié. Le fichier
    # app_settings.yaml vas être chercher dans le dossier contenant ce fichier Python.
    
    skill.add_request_handler(LaunchRequestHandler)
    skill.add_state_handler(LaunchStateHandler)
    skill.set_default_fallback_handler(DefaultFallback)
    # Les RequestHandler, StateHandler et DefaultFallback sont ajouté un par un.
    # PS : Si aucun DefaultFallback n'est spécifié, une erreur se produiras au lancement.
    
    return skill.handle_any_platform(event=event, context=context)
    # L'InoftSkill vas traiter l'event (la requête de l'utilisateur)
    # et retourner son résultat (la réponse de l'application) comme résultat.
    
# Uniquement si le fichier est lancer depuis une machine local (et non sur
# le cloud). L'application sera lancé en simulant le lancement d'un skill Alexa.
if __name__ == "__main__":
    from inoft_vocal_framework import Simulator
    event_, context_ = Simulator(event_type="alexa/start").get_event_and_context()
    print(f"\n\nFinal Output : {lambda_handler(event=event_, context=context_)}")

Vous pouvez nommer la variable contenant l'objet InoftSkill comme vous le souhaitez. Cependant les conventions du framework recommandent de l'appeler "skill" ou "skill_builder".

Mis à jour

Ce contenu vous a-t-il été utile ?