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 |