[PYTHON] J'ai créé la partie APL avec la compétence Alexa "Conversion des termes de l'industrie"

introduction

J'ai également participé aux Alexa Developer Skill Awards cette année. Trois volontaires en interne effectuent un développement intensif à court terme comme un hackathon, ["Conversion de termes industriels"](https://www.amazon.co.jp/HANDS-LAB-INC-%E6%A5%AD%E7 % 95% 8C% E7% 94% A8% E8% AA% 9E% E5% A4% 89% E6% 8F% 9B / dp / B07WW4S8GL).

Les gens les gens les gens les gens les gens les gens les gens > Zagin de Shisu: sushi: <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

À peu près la partie responsable

Compétence globale @daisukeArk Partie analyse morphologique @ryosukeeeee Pièce APL @ sr-mtmt

J'ai décidé de toucher APL car c'était une opportunité de rattrapage technique. De plus, lorsque j'ai créé la compétence Alexa auparavant, je l'ai écrite dans Node.js (TypeScript), Cette fois, j'ai décidé de l'écrire en Python.

Qu'est-ce que l'APL

Alexa et d'autres assistants vocaux commencent enfin à avoir des écrans Il est désormais possible de fournir également des informations visuelles.

Langue de présentation Alexa (APL) Éléments visuels comprenant des animations, des graphiques, des images, des diaporamas et des vidéos Vous pouvez créer divers effets en le modifiant en fonction de l'échange de compétences.

Par exemple, la compétence de PIZZA SALVATORE CUOMO est exposée lors de l'événement Alexa. Vous ne pouvez essayer que le fonctionnement de la compétence sans l'acheter dans la version d'essai.

je l'ai fait

Au fait, pour la version Node.js, j'ai fait référence à cette série. https://qiita.com/Mount/items/72d9928ff2c0ae5de737

Comment utiliser l'écran de la console de développement de compétences et l'histoire de JSON sont les mêmes pour Python, je vais donc l'omettre.

#Poignée de demande de lancement
def handle(self, handler_input):
    # type: (HandlerInput) -> Response

    session_attr = AttributesManager.session_attributes
    logger.info(session_attr)

    speak_output = "Bienvenue.\n Convertissez vos paroles en celles des gens de l'industrie.\n Veuillez demander "Qu'est-ce que" Sushi à Ginza "?""

    builder = (
        handler_input.response_builder
        .speak(speak_output)
        .ask(speak_output)
    )

    #Ajouter des informations APL au générateur uniquement pour les appareils compatibles APL
    if(is_apl_supported(handler_input.request_envelope)):
        builder.add_directive(
            RenderDocumentDirective(
                document=GetAplJsonDocument.get_apl_json("launch"),
                datasources=GetAplJsonDatasources.get_apl_json("launch")
            )
        )

    return builder.response
#Récupérer un fichier JSON contenant des informations APL
class GetAplJsonBase(object):
    _document_type = None

    @classmethod
    def get_apl_json(cls, intent_name):
        #Notez qu'il s'agit d'un chemin absolu vu de Lambda, et non d'un chemin relatif depuis l'emplacement de ce fichier.
        file_path_base = '/var/task/'

        with open(file_path_base + cls._document_type + '/' + intent_name + '.json', 'r', encoding="utf-8") as f:
            return json_load(f)


class GetAplJsonDocument(GetAplJsonBase):
    _document_type = 'document'


class GetAplJsonDatasources(GetAplJsonBase):
    _document_type = 'datasources'


def is_apl_supported(request):
    apl_interface = request.context.system.device.supported_interfaces.alexa_presentation_apl
    return apl_interface is not None

Il a été souligné qu'il peut être plus facile d'utiliser le JSON des informations APL s'il est défini dans js au lieu d'un fichier texte. J'ai essayé diverses choses et le format n'a pas été décidé, donc cette fois j'ai lu JSON à partir d'un fichier texte et je le transmets.

Cliquez ici pour référence lors de la définition avec js

function createDatasource(attributes) {
  return {
    "riddleGameData": {
        "properties": {
            "currentQuestionSsml": "<speak>" 
                + attributes.currentRiddle.question
                + "<speak>",
            "currentLevel": attributes.currentLevel,
            "currentQuestionNumber": (attributes.currentIndex + 1),
            "numCorrect": attributes.correctCount,
            "currentHint": attributes.currentRiddle.hints[attributes.currentHintIndex]
        },
        "transformers": [
            {
                "inputPath": "currentQuestionSsml",
                "outputName": "currentQuestionSpeech",
                "transformer": "ssmlToSpeech"
            },
            {
                "inputPath": "currentQuestionSsml",
                "outputName": "currentQuestionText",
                "transformer": "ssmlToText"
            }
        ]
    }
  };
}

Source de référence) https://github.com/alexa-labs/skill-sample-nodejs-level-up-riddles/blob/master/Step%203%20-%20Add%20APL/lambda/custom/index.js # L461-L487

la fin

Avec cela, si vous concevez JSON, vous devriez être en mesure de sortir diverses choses

J'ai du mal à penser à la prise en charge des informations visuelles et des panneaux tactiles tout en profitant de l'individualité de VUI. Je voulais collaborer non seulement avec des ingénieurs mais aussi avec diverses personnes pour savoir comment les utiliser correctement avec les smartphones.

Calendrier de l'Avent Smart Speaker 2019 Il y a un espace libre, alors s'il vous plaît postez si vous êtes intéressé: ensoleillé:

Recommended Posts

J'ai créé la partie APL avec la compétence Alexa "Conversion des termes de l'industrie"
J'ai créé un installateur Ansible
J'ai fait un bouton IFTTT qui déverrouille l'entrée 2 lock sésame avec 1 bouton (via AWS Lambda)
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
J'ai créé une bibliothèque d'opérations matricielles à N dimensions Matft avec Swift
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait une animation qui renvoie la pierre d'Othello avec POV-Ray
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
J'ai créé un guide de programme original en utilisant l'API de guide de programme NHK.
J'ai fait un blackjack avec du python!
J'ai créé un serveur Xubuntu.
J'ai créé COVID19_simulator avec JupyterLab
J'ai créé Word2Vec avec Pytorch
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai essayé d'envoyer du courrier depuis le serveur Sakura avec flask-mail
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 2)
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi