Ce message est je le referai cette année! AWS Lambda Tied Up Advent Calendar 2015 --Qiita est l'article du 18e jour. Lambda ligoté, mais cet article contient beaucoup d'ingrédients dans Amaozon Echo, Alexa Skills Kit ...
Inutile de dire que les horribles paroles de destruction. L'ancêtre a déjà créé une commande pour limiter la destruction et la mettre au monde https://github.com/qphoney/balus Cette fois, je ne suis pas si impitoyable.
Il peut répondre aux questions et coopérer avec les services par reconnaissance vocale. Vous pouvez ajouter des fonctionnalités à l'aide de l'Amazon Skills Kit. Les compétences tierces peuvent être examinées, installées et utilisées à partir d'un site dédié. https://youtu.be/7Jc82wIL7m4
Alexa est un service de reconnaissance vocale basé sur le cloud utilisé par Amazon Echo. Le kit de compétences Alexa fournit l'environnement dont vous avez besoin pour créer facilement les fonctionnalités (compétences) qu'Alexa peut utiliser. Consultez le kit de compétences Amazon Alexa
Lambda devient Python dans re: Invent l'autre jour Il a été annoncé qu'il était pris en charge, mais Lambda peut désormais être utilisé avec les fonctions ASK. Cependant, comme ASK ne prend en charge que la région «us-east-1», le modèle ASK n'apparaîtra pas dans la liste des modèles Lambda des autres régions.
Cette fois, j'ai un peu modifié ce modèle et implémenté Barus.
# -*- coding: utf-8 -*-
from __future__ import print_function
import boto3
from time import gmtime, strftime
client = boto3.client('ec2')
#Point d'accès
def lambda_handler(event, context):
print(strftime('%a, %d %b %Y %H:%M:%S +0000', gmtime()))
print(event)
if event['request']['type'] == "LaunchRequest":
#demande de début de compétence
return on_launch(event['request'], event['session'])
elif event['request']['type'] == "IntentRequest":
#Appel d'intention
return on_intent(event['request'], event['session'])
print("nothing and finish")
return get_finish_response()
def on_launch(launch_request, session):
#Obtenez le mot de la magie
return get_charm_response()
def on_intent(intent_request, session):
intent = intent_request['intent']
intent_name = intent_request['intent']['name']
#Si vous n'incluez pas les mots de destruction, vous avez terminé
if 'Barusu' not in intent['slots'] or \
'value' not in intent['slots']['Barusu'] or \
not intent_name == "RunHorobi":
return get_finish_response()
print(intent['slots']['Barusu']['value'])
stop_instance()
return get_horobi_response()
#Générer une réponse de mot magique
def get_charm_response():
session_attributes = {}
card_title = "Charm"
audio_url = "https://url/to/your/audio.mp3"
should_end_session = False
return build_response(session_attributes, build_audio_response(
card_title, speech_output, audio_url, should_end_session))
#Génère une réponse qui revient lorsque le mot de destruction est dit
def get_horobi_response():
session_attributes = {}
card_title = "Horobi"
speech_output = "Megaaaaa!"
reprompt_text = speech_output
should_end_session = True
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
#Générer une réponse quand rien n'est fait
def get_finish_response():
session_attributes = {}
card_title = "Words that should not be used"
speech_output = "Don't say the word of horobee"
reprompt_text = speech_output
should_end_session = True
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
#Obtenez une instance pour vous arrêter à Barth
def get_instances():
response = client.describe_instances(
Filters=[
{
'Name': 'tag-value','Values': [
'laputa',
]
}
]
)
instance_ids = []
for res in response['Reservations']:
for item in res['Instances']:
instance_ids.append(item['InstanceId'])
return instance_ids
#Démarrer l'instance
def start_instance():
print('start_instance')
response = client.start_instances(
InstanceIds=get_instances()
)
#Mettre fin à l'instance
def stop_instance():
print('stop_instance')
response = client.stop_instances(
InstanceIds=get_instances()
)
#Générer JSON pour la valeur de retour
def build_speechlet_response(title, output, reprompt_text, should_end_session):
return {
'outputSpeech': {
'type': 'PlainText',
'text': output
},
'card': {
'type': 'Simple',
'title': 'SessionSpeechlet - ' + title,
'content': 'SessionSpeechlet - ' + output
},
'reprompt': {
'outputSpeech': {
'type': 'PlainText',
'text': reprompt_text
}
},
'shouldEndSession': should_end_session
}
#Générer la valeur de retour du format SSML JSON
def build_audio_response(title, output, audio_url, should_end_session):
return {
'outputSpeech': {
'type': 'SSML',
'ssml': '<speak><audio src="{0}" /></speak>'.format(audio_url)
},
'card': {
'type': 'Simple',
'title': 'SessionSpeechlet - ' + title,
'content': 'SessionSpeechlet - ' + output
},
'reprompt': {
'outputSpeech': {
'type': 'SSML',
'ssml': '<speak><audio src="{0}" /></speak>'.format(audio_url)
}
},
'shouldEndSession': should_end_session
}
#Valeur de retour globale
def build_response(session_attributes, speechlet_response):
return {
'version': '1.0',
'sessionAttributes': session_attributes,
'response': speechlet_response
}
Dans ce script, parlez à «Alexa, lancez laputa» et Amazon Echo et ils répondront au magique «Lite Latobarita Urs Ariaros Bar Netril» en cas de problème.
Alexa Skills renvoie le texte et parle sur Amazon Echo et [SSML (Speech Synthesis Markup Language)](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/ Il existe un moyen de parler en utilisant speech-synthèse-markup-language-ssml-reference), mais [l'annonce de l'autre jour](https://developer.amazon.com/public/community/post/Tx3FXYSTHS579WO/Announcing-New- Alexa-Skills-Kit-ASK-Features-SSML-Audio-Tags-and-Developer-Porta) peut désormais gérer des données audio arbitraires.
La prononciation d'Alexa est basée sur l'anglais, donc je spécifie le fichier mp3 à synthèse vocale avec SSML. (À build_audio_response
)
Les fichiers audio que Amazon Echo peut lire ont de petites restrictions et doivent être au format suivant.
--Fichier MP3 valide (MPEG version 2) --Dans 90 secondes
Lors de l'utilisation de ffmpeg sur mac, la commande suivante
ffmpeg -i input.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 output.mp3
Skill information
https://developer.amazon.com/edw/home.html#/
Sélectionnez ʻAlexa Skills Kit dans le tableau de bord et enregistrez-en un nouveau depuis ʻAjouter une nouvelle compétence
.
Sélectionnez Lambda dans ʻEndpoint` et spécifiez l'ARN de la fonction Lambda que vous venez de créer.
Intent Schema
{
"intents": [
{
"intent": "RunHorobi",
"slots": [
{
"name": "Barusu",
"type": "LIST_OF_BARUSU"
}
]
}
]
}
Définissez la définition du mot clé attaché à l'intention (fonction côté fonction Lambda).
Custom Slot Types
barusu
bars
barus
barsu
Enregistrez le mot-clé correspondant. (Cependant, d'après ce que j'ai entendu lors de l'atelier, il semble qu'il soit inévitable que la fonction Lambda soit lue en réponse à des mots-clés non enregistrés ici.)
Sample Utterances
RunHorobi {Barusu}
Il spécifie quelle intention appeler en fonction du mot prononcé. Il existe plusieurs modèles de la façon dont l'utilisateur parle réellement, donc si vous supposez cela et liez plusieurs phrases à l'intention, il sera plus facile pour le côté ASK de s'identifier.
ASK dispose d'un mécanisme qui vous permet de tester Skill sans utiliser Amazon Echo. Vous pouvez l'utiliser pour tester les fonctions Lambda afin de ne pas avoir à parler à Echo lors du débogage. Cliquez sur le bouton de lecture en bas à droite et il prononcera le texte de retour. (Cependant, SSML n'est actuellement pas pris en charge)
Vous pouvez vérifier les mots réellement prononcés et les résultats sur le Tableau de bord sur l'Echo enregistré comme votre appareil. ..
En utilisant Amazon Echo, vous pouvez désormais créer un "Bals" plus réaliste. (Si vous avez une pierre volante de reconnaissance vocale, vous vous sentirez plus excité) Cependant, Amazon Echo ne prend pas encore en charge le japonais, donc l'expression «yeux!» Est trop décevante. J'espère que vous répondrez dans les plus brefs délais.
Maintenant que Lambda peut être écrit en Python, il est beaucoup plus facile de coder personnellement. Avec l'ajout de tests de compétences et de simulateurs, il est désormais possible de construire assez bien sans Amazon Echo.
Recommended Posts