[PYTHON] Ich habe den APL-Teil mit der Alexa-Fertigkeit "Industry Term Conversion" erstellt.

Einführung

Ich habe auch dieses Jahr an den Alexa Developer Skill Awards teilgenommen. Drei interne Freiwillige führen eine kurzfristig intensive Entwicklung durch, wie Hackason ("Industry Term Conversion") (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).

Personen Menschen Menschen Menschen Menschen Menschen Menschen Menschen > Zagin de Shisu: Sushi: <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

Etwa das verantwortliche Teil

Gesamtfertigkeit @daisukeArk Morphologischer Analyseteil @ryosukeeeee APL part @ sr-mtmt

Ich habe mich für APL entschieden, weil dies eine Gelegenheit für technischen Nachholbedarf war. Als ich die Alexa-Fertigkeit zuvor erstellt habe, habe ich sie außerdem in Node.js (TypeScript) geschrieben. Dieses Mal habe ich beschlossen, es in Python zu schreiben.

Was ist APL?

Alexa und andere Sprachassistenten bekommen endlich Bildschirme Es ist jetzt möglich, auch visuelle Informationen bereitzustellen.

Alexa Presentation Language (APL) Visuelle Elemente wie Animationen, Grafiken, Bilder, Diashows und Videos Sie können verschiedene Effekte erzielen, indem Sie sie entsprechend dem Austausch von Fähigkeiten ändern.

Zum Beispiel wird die Fähigkeit von PIZZA SALVATORE CUOMO auf der Alexa-Veranstaltung ausgestellt. Sie können nur die Bedienung der Fertigkeit ausprobieren, ohne sie in der Testversion zu erwerben.

ich habe es gemacht

Übrigens habe ich für die Node.js-Version auf diese Serie verwiesen. https://qiita.com/Mount/items/72d9928ff2c0ae5de737

Die Verwendung des Bildschirms der Skill Development Console und die Geschichte von JSON sind für Python identisch, daher werde ich darauf verzichten.

#Starten Sie das Anforderungshandle
def handle(self, handler_input):
    # type: (HandlerInput) -> Response

    session_attr = AttributesManager.session_attributes
    logger.info(session_attr)

    speak_output = "Herzlich willkommen.\n Wandeln Sie Ihre Worte in die von Branchenleuten um.\n Bitte fragen Sie wie "Was ist" Sushi in Ginza "?""

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

    #Fügen Sie dem Builder nur APL-Informationen für APL-kompatible Geräte hinzu
    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
#Rufen Sie eine JSON-Datei mit APL-Informationen ab
class GetAplJsonBase(object):
    _document_type = None

    @classmethod
    def get_apl_json(cls, intent_name):
        #Beachten Sie, dass dies aus Sicht von Lambda ein absoluter Pfad ist, kein relativer Pfad vom Speicherort dieser Datei.
        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

Es wurde darauf hingewiesen, dass es möglicherweise einfacher ist, den JSON von APL-Informationen zu verwenden, wenn er durch js anstelle einer Textdatei definiert wird. Ich habe verschiedene Dinge ausprobiert und das Format wurde nicht festgelegt, also habe ich dieses Mal JSON aus einer Textdatei gelesen und übergeben.

Klicken Sie hier als Referenz beim Definieren mit 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"
            }
        ]
    }
  };
}

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

das Ende

Wenn Sie JSON entwickeln, sollten Sie in der Lage sein, verschiedene Dinge herauszubringen

Es fällt mir schwer, über die Unterstützung visueller Informationen und Touchpanels nachzudenken und gleichzeitig die Individualität von VUI zu nutzen. Ich wollte nicht nur mit Ingenieuren, sondern auch mit verschiedenen Menschen zusammenarbeiten, um herauszufinden, wie man sie mit Smartphones richtig einsetzt.

Smart Speaker Adventskalender 2019 Es gibt einen freien Speicherplatz. Bitte posten Sie, wenn Sie interessiert sind: sonnig:

Recommended Posts

Ich habe den APL-Teil mit der Alexa-Fertigkeit "Industry Term Conversion" erstellt.
Ich habe einen Ansible-Installer gemacht
Ich habe einen IFTTT-Knopf gemacht, der den Eingang 2-Sesam mit 1 Knopf (über AWS Lambda) entsperrt.
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ich habe mit Swift eine N-dimensionale Matrixoperationsbibliothek Matft erstellt
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Ich habe eine Animation gemacht, die Othellos Stein mit POV-Ray zurückgibt
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Ich habe einen Original-Programmführer mit der NHK-Programmführer-API erstellt.
Ich habe einen Blackjack mit Python gemacht!
Ich habe einen Xubuntu-Server erstellt.
Ich habe COVID19_simulator mit JupyterLab erstellt
Ich habe Word2Vec mit Pytorch gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part2 zu bedienen
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Ich habe versucht, E-Mails vom Sakura-Server mit Flask-Mail zu senden
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part1 zu bedienen
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Ich habe die grundlegende Operation von Pandas im Jupyter Lab geschrieben (Teil 2).
Ich habe ein npm-Paket erstellt, um die ID der IC-Karte mit Raspberry Pi und PaSoRi zu erhalten