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)
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
N'utiliser pas de chemin d'accès direct (comme C:/Users/Rob/application/app_settings.yaml) Cela fonctionnera sur votre machine, cependant ne fonctionneras pas une fois déployé dans le cloud, étant donné que les chemins d'accès seront différents. Pour que cela fonctionne sur votre machine et dans le cloud, basé sur vous sur le chemin d'accès de votre fichier de code principale que vous pouvez avoir avec : os.path.dirname(os.path.abspath(__file__))
Vous ne pouvez pas définir à la fois l'argument settings_yaml_filepath et settings_json_filepath
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)
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).
Définir une classe de DefaultFallback et l'ajouter est obligatoire. Si vous ne le faites pas, une erreur se produira quand vous lancerez l'application sur le cloud ou sur votre machine, elle vous informeras que vous n'avez pas défini de classe de DefaultFallback.
skill.set_default_fallback_handler(DefaultFallback)
Usage
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_)}")
Dernière mise à jour
Cet article vous a-t-il été utile ?