Interações com a Alexa
Introdução
Nesta seção do documento, apresentamos as interações entre o sistema embarcado e a Alexa. A Alexa é uma assistente virtual desenvolvida pela Amazon que permite a interação por voz com dispositivos inteligentes.
A integração com a Alexa permite que o usuário acesse informações sobre a cadeira de rodas motorizada, receba alertas e notificações, e realize ações específicas por meio de comandos de voz. Ao receber uma notificação, a Alexa acende uma luz amarela, para indicar que há uma notificação para o usuário.
Para iniciar qualquer interação com a Alexa do módulo "Assistente Cadeira" é necessário iniciar a alexa com a seguinte interação, apresentada na tabela 1.
Comando de Voz | Ação | Resposta |
---|---|---|
"Alexa, abrir assistente cadeira" | Alexa ativa o assistente da cadeira | "Bem-vindo! O que você gostaria de fazer?" |
Fonte: Thiago Freitas, Caio Berg
Fluxos Certos (Entrada Esperada)
A tabela 2 apresenta todas as frases para ativação das interações com a Alexa e a respostas em caso de sucesso.
Intent | Samples (Exemplos de Frases) | Retorno / Resposta Esperada |
---|---|---|
GenerateReportIntent | - “Eu quero um relatório dos últimos {dias} dias” - “Gere um relatório para os últimos {dias} dias” - "Relatório dos últimos {dias} dias" - "Me envie um relatório de {dias} dias" |
Tenta obter o e-mail do usuário (se autorizado) e envia relatório via API, ex.: “O relatório dos últimos 7 dias foi enviado para o seu e-mail.” |
GenerateReportWeekIntent | - “Eu quero um relatório de uma semana” - “Eu quero um relatório semanal” |
Mesmo comportamento de GenerateReportIntent, porém com {dias} = 7. |
GenerateReportMonthIntent | - “Eu quero um relatório mensal” | Mesmo comportamento de GenerateReportIntent, porém com {dias} = 30. |
GetBatteryAutonomyIntent | - “Qual é a autonomia da bateria” - “Quanto tempo dura a bateria” |
Retorna a autonomia estimada, ex.: “A bateria dura em média 8 horas.” |
CheckAverageTimeBatteryCriticalIntent | - “Quando a bateria atinge trinta por cento” - “Qual o horário médio para a bateria atingir trinta por cento” - "Me fale o horario padrao que a bateria chega em trinta por cento" |
Retorna o horário médio (ex.: “A bateria normalmente atinge 30% por volta das 14h30.”). |
CheckFrequencyLowBatteryIntent | - “Quantas vezes a bateria da cadeira ficou abaixo do nível crítico” - “Quanto tempo a bateria da cadeira ficou em nível baixo” |
Retorna quantidade de vezes e total de horas em nível crítico, ex.: “A bateria ficou em nível crítico 3 vezes, somando 2 horas e 30 minutos.” |
GetMostCommonEmergencyTimeIntent | - “Qual é o horário mais comum de emergências” - “Em que horário as emergências ocorrem mais” |
Indica o horário com maior incidência de emergências, ex.: “O horário mais comum de emergências é 14h.” |
GetLastBatteryIntent | - “Qual é a bateria?” - “Qual é a bateria atual da cadeira?” - “Qual é a bateria atual?” |
Retorna o nível de bateria atual, ex.: “O nível da bateria é 75%.” |
GetHigherConsumptionIntent | - “Qual foi o maior consumo de bateria entre {inicio} e {fim}” - “Quando foi o pico de consumo entre {inicio} e {fim}” - "Me fale o período de maior consumo entre {inicio} e {fim}" |
Retorna dados do maior consumo em um intervalo, ex.: “O maior consumo entre 2023-02-01 e 2023-02-10 foi 45% em uma única sessão.” |
GetEmergencyResponseTimeIntent | - “Qual o tempo médio de resposta em caso de emergência” - “Quanto tempo leva para responder uma emergência” |
Retorna o tempo médio de resposta, ex.: “O tempo médio de resposta é de 120 segundos.” |
AMAZON.CancelIntent / StopIntent | (Padrão da Alexa) | Geralmente finaliza a conversa, ex.: “Tudo bem, até logo!” |
Fonte: Thiago Freitas, Caio Berg
Fluxos Inesperados (Entrada Inválida ou Fora de Escopo)
A tabela 3 apresenta os fluxos de erros mapeados pela Alexa.
Situação / Cenário | Exemplo de Fala do Usuário | Retorno / Comportamento |
---|---|---|
Usuário faz pedido fora do escopo do skill | “Alexa, me ensine a fazer sopa de pedra.” | Caso nenhuma Intent mapeie essa fala, o skill cairá no IntentReflectorHandler (se ativado) ou em outro fallback. A resposta típica: “You just triggered IntentRequest.” ou “Desculpe, não entendi.” |
Usuário fornece slot inválido | “Gere um relatório dos últimos 150 dias” (hipoteticamente inválido) | O handler pode falhar ao processar o número (ex.: valor muito grande), a skill responde: “Houve um erro ao gerar o relatório. Por favor, tente novamente.” |
Usuário pede relatório sem conceder permissão de e-mail | “Gere um relatório para os últimos 7 dias.” | Como não há consent_token , o skill retorna mensagem pedindo para habilitar permissões, ex.: “Eu preciso de permissão para acessar seu e-mail. Por favor, habilite no aplicativo Alexa.” |
Erro de conexão com API externa | (Qualquer intenção que faça request e a API esteja offline) | O skill chama a API e recebe erro de rede. É capturado pelo requests.exceptions.RequestException , retornando algo como: “Houve um problema ao acessar as informações. Tente novamente mais tarde.” |
Slot duplicado ou não reconhecido | “Quantas vezes a bateria ficou abaixo de 30% de segunda a sexta” | Se a skill não tratar o slot adequadamente ou se a Alexa não identificar start_date e end_date , pode cair em fallback. Resposta: “Desculpe, não entendi as datas informadas. Tente novamente.” |
Usuário fala algo incompleto | “Eu quero um relatório dos últimos” (sem falar quantos dias) | A Alexa pode não preencher o slot dias , então a skill pode precisar de fallback. Pode responder: “Desculpe, eu preciso saber quantos dias para gerar o relatório. Quantos dias você deseja?” (diálogo de slot). |
Fonte: Thiago Freitas, Caio Berg
Fluxos Inesperados
A tabela 4 apresetnada os fluxos de erros da interação com a API.
Handler / Intent | Interpretação do Erro | Mensagem Falada |
---|---|---|
LaunchRequestHandler (abertura do skill) | Usuário não concedeu permissão para acessar e-mail. | “Eu preciso de permissão para acessar seu e-mail para gerar o relatório. Por favor, habilite as permissões no aplicativo Alexa.” |
GenerateReportIntentHandler | Falha ao obter o e-mail (problema de rede/endpoint). | “Houve um problema ao acessar seu e-mail. Por favor, tente novamente mais tarde.” |
CheckAverageTimeBatteryCriticalIntentHandler | A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possível se comunicar com a cadeira.” |
API retornou erro interno (sem dados). | “Não há informações disponíveis sobre o horário médio.” | |
Não há registros para calcular horário médio. | “Nenhum registro encontrado para calcular o horário médio de bateria crítica.” | |
CheckFrequencyLowBatteryIntentHandler | A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possível se comunicar com a cadeira.” |
API retornou erro interno (sem dados). | “Não existem dados para as datas informadas.” | |
GetBatteryAutonomyIntentHandler | A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possivel se comunicar com a cadeira.” |
API retornou erro interno (sem dados). | “Não existe dados para as datas informadas.” | |
GetEmergencyResponseTimeIntentHandler | A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possivel se comunicar com a cadeira.” |
API retornou erro interno (sem dados). | “Não existe dados para as datas informadas.” | |
GetLastBatteryHandler | A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possivel se comunicar com a cadeira.” |
API retornou erro interno (sem dados). | “Não existe dados.” | |
Não há informações sobre bateria no retorno da API. | “Não há informações sobre a bateria no momento.” | |
Erro de rede geral ao obter dados. | “Houve um erro ao obter as informações da bateria.” | |
GetMostCommonEmergencyTimeIntentHandler | A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possivel se comunicar com a cadeira.” |
API retornou erro interno (sem dados). | “Não existe dados para as datas informadas.” | |
GetHigherConsumptionIntentHandler | O usuário não informou (ou a Alexa não entendeu) datas válidas. | “Desculpe, não entendi as datas.” |
A cadeira (API) não foi encontrada / comunicação indisponível. | “Não foi possível se comunicar com a cadeira.” | |
API retornou erro interno (sem dados). | “Não existe dados para as datas informadas.” | |
CatchAllExceptionHandler | Erro genérico no skill. | “Sorry, I had trouble doing what you asked. Please try again.” |
Fonte: Thiago Freitas, Caio Berg
Tabela de Alertas
A tabela 5 a seguir apresenta os alertas que a Alexa pode emitir para o usuário, informando sobre situações de risco ou emergência. Ao um alerta, a Alexa acende uma luz amarela, para indicar que há uma notificação para o usuário.
Comando de Voz | Alerta | Descrição |
---|---|---|
"Alexa, quais são as notificações" | "O botão de emergência foi ativado na cadeira" | É emitido quando o sistema embarcado detecta que o usuário pressiona o botão de emergência da cadeira. |
"Alexa, quais são as notificações" | "A bateria da cadeira está abaixo de 20%, por favor, coloque para carregar" | É emitido quando o sistema embarcado detecta que a bateria está abaixo do nível definido de 20%. |
Fonte: Thiago Freitas, Caio Berg
Vídeos de Demonstração
Vídeo 1 - Envio de Relatório
Vídeo 2 - Leitura de Alertas
Tabela de Versionamento
Versão | Versão | Descrição | Responsável |
---|---|---|---|
1.0 | 20/01/2025 | Criação do Documento | Thiago Freitas, Caio Berg e Arthur Gabriel |
1.1 | 18/02/2025 | Atualização dos Fluxos | Thiago Freitas, Caio Berg |
1.2 | 18/02/2025 | Revisão e correção do documento | Ester Lino |