A plataforma de desenvolvedores do Google Assistente permite criar softwares para ampliar a funcionalidade desse assistente pessoal virtual em mais de um bilhão de dispositivos, incluindo alto-falantes inteligentes, smartphones, carros, TVs, fones de ouvido e muito mais. O usuário interage com o Google Assistente em uma conversa para realizar tarefas, como fazer compras ou reservar uma viagem. Como desenvolvedor, você pode usar a plataforma para desenvolvedores do Google Assistente para criar e gerenciar experiências de conversação eficazes entre o usuário e seu próprio serviço de atendimento terceirizado.
Este codelab aborda conceitos de nível intermediário para desenvolvimento com o Google Assistente e se baseia na ação criada no nível 1. Recomendamos que você conclua o codelab do nível 1 antes de iniciar este.
A ação que será criada neste codelab informa a previsão do futuro do usuário ao se aventurar em uma terra mitológica chamada Gryffinberg, de acordo com o auxílio que ele escolher.
O que você criará
Neste codelab, você vai criar uma ação de conversa sofisticada com as seguintes funções:
- Coletar dados do usuário e, dependendo do valor, modificar solicitações de conversa
- Responder às perguntas adicionais para continuar a conversa
- Criar um loop de jogo para que o usuário possa interagir com a ação novamente depois de receber a previsão do futuro
Antes de começar a criar, você pode interagir com a ação ativa no dispositivo com o Google Assistente. Basta dizer "Ok Google, falar com Fate and Fortune (Previsão do futuro e destino)". O caminho padrão dessa ação para um usuário retornante gera a seguinte interação:
O que você aprenderá
- Como usar slots para coletar dados do usuário
- Como usar condições para adicionar lógica a uma cena
- Como adicionar um loop de jogo
- Como adicionar um caminho de apoio
Pré-requisitos
Os pré-requisitos deste codelab incluem o seguinte:
- Um navegador da Web, como o Chrome
- Um projeto concluído do Actions do codelab de nível 1
É recomendável ter familiaridade com o JavaScript (ES6), embora não seja obrigatório para entender o código de fulfillment deste codelab.
No primeiro codelab, você criou uma ação de conversa simples com uma só cena, Start
.
Neste codelab, você vai ampliar a conversa da ação. Nas seções a seguir, você vai configurar sua ação para realizar o seguinte:
- Fazer a transição para uma nova cena
Fortune
quando o usuário quiser ouvir a previsão do futuro - Perguntar ao usuário qual auxílio ele quer escolher
- Oferecer uma previsão do futuro personalizada com base na escolha do usuário
Criar Fortune
cena
Nesta seção, você vai criar a cena Fortune
e definir como o usuário faz essa transição durante a conversa.
Para criar uma cena chamada Fortune
, siga estas etapas:
- Abra seu projeto do Actions do codelab de nível 1.
- Clique em Desenvolver na navegação.
- Em Cenas, clique em Iniciar.
- Clique na intent sim (a caixa Quando "sim" corresponder) para abrir as opções.
- Desmarque Enviar solicitações para remover a solicitação.
- Na seção Transição, clique no menu suspenso e na caixa de texto. Depois, digite
Fortune
. - Clique em Adicionar. Isso vai criar uma cena chamada
Fortune
. Além disso, adicionará uma transição da cenaStart
à cenaFortune
quando o usuário quiser ouvir a previsão do futuro.
Definir lógica de conversa para a cena Fortune
Neste codelab, você vai configurar a cena Fortune
para perguntar ao usuário: "O que você escolhe para ajudar na sua missão: um dragão, um tradutor ou uma bússola?" Antes de continuar, use um recurso chamado preenchimento de slot para coletar as informações do usuário necessárias.
Sua ação oferece opções de previsão do futuro com três auxílios: um dragão, um tradutor e uma bússola. Para que sua ação identifique essas três opções na entrada de um usuário, crie um tipo.
Você pode usar tipos na etapa de preenchimento do slot de uma cena para definir as informações do usuário que quiser. Quando o mecanismo de PLN detecta uma correspondência na entrada do usuário, ele extrai o slot como um parâmetro digitado para que você possa executar a lógica com ele em uma cena.
Criar tipo available_options
Nesta seção, você vai criar um tipo chamado available_options
, que especifica as três opções que os usuários têm (dragão, tradutor e bússola) em resposta à solicitação. Você também vai definir alguns sinônimos para essas opções caso um usuário diga algo semelhante. Em outra seção, você vai adicionar o tipo available_options
a um slot para especificar que quer acessar a escolha do usuário.
Para criar o tipo available_options
, siga estas etapas:
- Na navegação, clique em Tipos.
- Clique no + (sinal de adição), digite
available_options
e pressioneEnter
. - Clique em
available_options
para abrir as opções.
Os tipos são configurados como pares de chave-valor de informações, em que chave é o nome do tipo, e os valores são sinônimos dessa chave. Ao definir a chave, ela é adicionada automaticamente como um valor.
Para adicionar as três opções que o usuário pode escolher, siga estas etapas:
- Role para baixo até a seção Adicionar entradas.
- No campo Nova entrada, digite
dragon
e pressioneEnter
. Essa ação cria uma chavedragon
. - Digite
hydra
no campo Adicionar valores e pressioneEnter
para adicionar como um valor (sinônimo). Em seguida, repita essa etapa para o valorlizard
. - Adicione as outras chaves e os valores correspondentes:
translator | translator, communicator, machine, decoder, translate
compass | compass, direction, guide
- Clique em Salvar.
Sua ação agora entende que available_options
representa dragão, tradutor e bússola, além de reconhecer alguns sinônimos.
Configurar o preenchimento de slot
Agora, configure o preenchimento de slot na cena Fortune
. Para configurar a lógica de preenchimento de slot, siga estas etapas:
- Na navegação, em Cenas, clique em Fortune.
- Na cena
Fortune
, clique no + (sinal de adição) para Preenchimento de slot. - No campo Inserir o nome do slot, adicione
chosenOptions
. - Na lista suspensa Selecionar tipo, selecione
available_options
como o tipo de slot. - Selecione Este slot é obrigatório.
- Selecione Enviar solicitações e adicione a mensagem e os ícones de sugestão a seguir:
candidates: - first_simple: variants: - speech: >- What do you choose to help you on your quest, a dragon, a translator, or a compass? suggestions: - title: 'Dragon' - title: 'Translator' - title: 'Compass'
- Clique em Salvar.
Você adicionou o tipo available_options
ao slot, que avisa à ação as informações do usuário que é preciso coletar (a opção de auxílio) antes de continuar. Além disso, configurou uma solicitação dentro do slot, que é adicionado à fila de solicitação quando o usuário chega ao estágio de preenchimento do slot da cena.
Observe que, ao nomear o slot chosenOptions
, o campo Personalize o valor do slot será atualizado com o mesmo nome ($session.params.chosenOptions
). Você pode acessar esse parâmetro pelo nome no Actions Builder e no seu fulfillment na biblioteca de cliente.
Configurar a condição scene.slots.status == "FINAL"
Quando você adiciona um slot, a condição scene.slots.status == "FINAL"
é adicionada automaticamente à lista.
A condição scene.slots.status == "FINAL"
verifica se o preenchimento de slot foi concluído. Quando todos os slots forem preenchidos, a condição pode acionar um webhook, fazer a transição para uma nova cena ou adicionar solicitações à fila.
Nesta seção, você vai configurar scene.slots.status == "FINAL"
para adicionar uma solicitação à fila depois que os slots forem preenchidos.
Para adicionar a solicitação à condição FINAL
, siga estas etapas:
- Clique na condição
scene.slots.status == "FINAL"
para abrir a janela de opções. - Selecione Enviar solicitações e adicione o seguinte:
candidates: - first_simple: variants: - speech: You picked $session.params.chosenOptions.
- Clique em Salvar.
Testar ação no simulador
Você já definiu as opções que o usuário precisa selecionar para preencher o slot. Depois de obter as informações do usuário, a ação deve fornecer uma solicitação de acordo com a opção escolhida.
Para testar a ação, siga estas etapas:
- Na barra de navegação, clique em Testar.
- Clique ou digite
Talk to my test app
no campo Entrada e pressioneEnter
. - Digite
Yes
no campo Entrada e pressioneEnter
. Também é possível clicar no ícone de sugestão Sim.
- Clique, digite ou diga
dragon
. Aparecerá a mensagem "Você escolheu um dragão".
Na próxima seção, você vai personalizar as solicitações para cada auxílio disponível ao usuário.
Personalizar solicitações usando condições
Nesta seção, você vai adicionar condições para cada opção disponível ao usuário, além de uma solicitação personalizada para cada condição.
Personalizar a previsão do futuro de dragon
Para atualizar a condição e personalizar a solicitação caso o usuário escolha "dragão", siga estas etapas:
- Clique em Desenvolver na navegação.
- Depois, clique na cena Fortune.
- Clique na condição
scene.slots.status == "FINAL"
para abrir a janela de opções. - Atualize a instrução de condição para:
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
- Selecione Enviar solicitações.
- Atualize a solicitação com a seguinte previsão do futuro no editor de código:
candidates: - first_simple: variants: - speech: >- The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon.
- Clique em Salvar.
Agora, quando um usuário disser "dragão" ou algo parecido, sua ação vai oferecer uma previsão do futuro de acordo com essa seleção. Em seguida, adicione as duas seleções restantes.
Personalizar a previsão do futuro de translator
Para adicionar a condição e personalizar a solicitação para quando um usuário escolher "tradutor", siga estas etapas:
- Clique no + (sinal de adição) ao lado de Condição.
- Adicione
scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
ao campo mais se. - Selecione Enviar solicitações.
- Adicione a seguinte solicitação no editor de código:
candidates: - first_simple: variants: - speech: >- With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many subsequent journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum.
- Clique em Salvar.
Personalizar a previsão do futuro de compass
Para adicionar a condição e personalizar a solicitação para quando um usuário escolher "bússola", siga estas etapas:
- Clique no + (sinal de adição) ao lado de Condição.
- Adicione
scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
à caixa de texto mais se. - Selecione Enviar solicitações.
- Adicione a seguinte solicitação no editor de código:
candidates: - first_simple: variants: - speech: >- The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success.
- Clique em Salvar.
Testar ação no simulador
Agora, a ação precisa fornecer uma previsão personalizada para o usuário conforme a opção selecionada.
Para testar a ação, siga estas etapas:
- Na barra de navegação, clique em Testar.
- Digite
Talk to my test app
no campo Entrada e pressioneEnter
. - Digite "Sim" no campo Entrada e pressione
Enter
**.** Ou então, clique no ícone de sugestão **Sim**. - Clique, digite ou diga
Translator
.
Você receberá a previsão do futuro adequada da opção "tradutor".
Nesta seção, você vai configurar sua ação para que o usuário possa selecionar outra opção e ouvir uma previsão diferente. Essa mudança é semelhante à mensagem "Você quer jogar novamente?" ao final de um jogo. Para criar esse loop, reutilize as intents yes
e no
criadas e adicione-as a uma nova cena chamada Again
.
Criar a cena Again
Nesta seção, você vai criar uma cena Again
e adicionar uma solicitação para perguntar se o usuário quer selecionar outra opção.
Para criar a cena Again
, siga estas etapas:
- Clique em Desenvolver na navegação.
- Em Cenas, clique no + (sinal de adição).
- Digite
Again
e pressioneEnter
. - Clique na cena
Again
na navegação. - Clique no + (sinal de adição) ao lado de Enter.
- Selecione Enviar solicitações e adicione os seguintes ícones de solicitação e sugestão:
candidates: - first_simple: variants: - speech: >- That is what I see for you. Would you like to choose a different option and explore another future? suggestions: - title: 'Yes' - title: 'No'
- Clique em Salvar.
Adicionar transição da cena Fortune
para Again
Após o usuário receber a previsão do futuro, a conversa precisa fazer a transição para a nova cena Again
.
Para adicionar uma transição da cena Fortune
à Again
, siga estas etapas:
- Clique na cena Fortune.
- Clique na primeira condição (
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
) para abrir a janela de opções. - Role e selecione
Again
em Transição. - Clique em Salvar.
- Clique na segunda condição para abrir a janela de opções.
- Role e selecione
Again
em Transição. - Clique em Salvar.
- Clique na terceira condição para abrir a janela de opções.
- Role e selecione
Again
em Transição. - Clique em Salvar.
Testar ação no simulador
Agora, sua ação deve fornecer a seguinte solicitação depois que o usuário receber a previsão: "É isso que vejo para você. Quer escolher outra opção e explorar outro futuro?"
Para testar a ação, siga estas etapas:
- Na barra de navegação, clique em Testar.
- Digite
Talk to my test app
no campo Entrada e pressioneEnter
. - Digite
Yes
no campo Entrada e pressioneEnter
. Também é possível clicar no ícone de sugestão Sim. - Clique, digite ou diga
dragon
.
Você receberá a previsão do futuro das opções de dragão e da solicitação Again
.
Adicionar intents e transição para a cena Again
Nesta seção, você adicionará as intents yes
e no
à cena Again
. Assim, a ação poderá entender se o usuário quer ou não escolher uma nova opção. Você também vai adicionar as transições adequadas para as intents yes
e no
. A intent yes
faz a transição para a cena Fortune
, e a no
faz a transição para a cena do sistema End conversation
.
Para adicionar intents e transições à cena Again
, siga estas etapas:
- Clique em Desenvolver na navegação.
- Clique na cena
Again
. - Clique no + (sinal de adição) ao lado de Processamento da intent do usuário.
- Selecione Sim no menu suspenso da intent.
- Selecione
Fortune
no menu suspenso Transição. - Clique em Salvar.
- Clique no + (sinal de adição) ao lado de Processamento da intent do usuário.
- Selecione Não no menu suspenso de intent.
- Selecione Encerrar conversa no menu suspenso Transição.
- Selecione Enviar solicitações e adicione o seguinte no editor de código:
candidates: - first_simple: variants: - speech: >- It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell.
- Clique em Salvar.
Testar ação no simulador
Sua ação agora pode entender se o usuário quer escolher uma nova opção ou encerrar a conversa.
Para testar a intent yes
, siga estas etapas:
- Na barra de navegação, clique em Testar.
- Digite
Talk to my test app
no campo Entrada e pressioneEnter
. - Digite
Yes
no campo Entrada e pressioneEnter
. Também é possível clicar no ícone de sugestão Sim. - Clique, digite ou diga uma das opções.
- Digite
Yes
no campo de entrada e pressioneEnter
.
Você receberá a solicitação "O que você quer usar como auxílio na sua missão: um dragão, um tradutor ou uma bússola?"
Para testar a intent no
, siga estas etapas:
- Clique, digite ou diga uma das opções.
- Digite
No
no campo de entrada e pressioneEnter
.
Você receberá a mensagem End conversation
: "Que bom que está feliz com sua escolha. Boa sorte na sua missão! Adeus."
Você criou o caminho principal que a maioria dos usuários usa na sua ação. No entanto, a resposta do usuário à solicitação da cena Fortune
("O que você quer usar como auxílio na sua missão: um dragão, um tradutor ou uma bússola?") pode não estar nas opções disponíveis.
Nesta seção, você vai configurar sua ação para entender quando um usuário disser "mágica", "dinheiro", "cavalo" ou "telefone" e pedir para que ele escolha uma das três opções originais Para configurar essa lógica, você precisa criar uma type
que contenha as outras opções e uma intent, other_option
, que é associada quando um usuário indica uma delas. Também é necessário anotar frases de treinamento na intent other_option
para identificar e extrair parâmetros de intent.
Quando o mecanismo de processamento de linguagem natural do Google Assistente detecta uma correspondência de parâmetros na entrada do usuário, ele extrai o valor como um parâmetro digitado para que você possa executar a lógica em uma cena. Neste codelab, você vai configurar sua ação para extrair o auxílio que o usuário quiser e indicar essa escolha em uma solicitação.
Criar tipo unavailable_options
Agora você pode criar um tipo unavailable_options
com uma variedade de opções diferentes para que sua ação possa identificar esses dados na entrada de um usuário.
Para criar o tipo unavailable_options
, siga estas etapas:
- Clique em Desenvolver na navegação.
- Em Tipos, clique no + (sinal de adição).
- Digite
unavailable_options
e pressioneEnter
. - Clique em
unavailable_options
para abrir as opções. - Digite as entradas e os valores correspondentes a seguir na seção Adicionar entradas:
|
|
|
|
|
|
|
|
A tabela de chave-valor deve ser semelhante a esta:
- Clique em Salvar.
Criar intent other_option
Em seguida, crie uma intent chamada other_option
e adicione frases de treinamento com as opções no tipo unavailable_options
. Essa intent é acionada quando o usuário seleciona uma opção que apareça no tipo unavailable_options
.
Para criar e configurar a intent other_option
, siga estas etapas:
- Clique em + (sinal de adição), em Intents.
- Digite
other_option
e pressioneEnter
. - Clique em
other_option
para abrir a janela. - Adicione as seguintes frases de treinamento e pressione
Enter
após cada uma:
I want to use spells
I really really want to use a phone
magic!
cash
I want to ride a horse
- Na seção Adicionar parâmetros de intent, atualize o nome do parâmetro para
chosenUnavailableOption
. - Clique em Salvar.
Conforme você incluir as frases de treinamento, o Actions Builder vai reconhecer spells
, phone
, magic
, cash
e horse
do tipo unavailable_options
e destacar automaticamente (ou seja, anotar) essas palavras. O Actions Builder adiciona automaticamente os parâmetros à seção Adicionar parâmetros de intent, conforme a imagem a seguir.
O parâmetro da intent permite extrair o nome da opção para usar em uma solicitação.
Adicionar a intent other_option
à cena Fortune
Agora você tem uma intent, other_option
, que será usada quando a escolha do usuário não fizer parte das opções originais. Nesta seção, você vai adicionar a intent other_option
à cena Fortune
. Use o parâmetro da intent para personalizar a solicitação com base na entrada do usuário.
Para adicionar a intent other_option
à cena Fortune
, siga estas etapas:
- Clique na cena Fortune.
- Clique no + (sinal de adição) ao lado de Processamento da intent do usuário.
- Selecione
other_option
no menu suspenso da intent. - Selecione Enviar solicitações e adicione o seguinte:
candidates: - first_simple: variants: - speech: >- I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
A expressão $intent.params.chosenUnavailableOption
refere-se ao objeto do parâmetro da intent, e $intent.params.chosenUnavailableOption.original
indica o valor desse objeto. A propriedade original
refere-se à entrada bruta fornecida pelo usuário
- Clique em Salvar.
Quando um usuário menciona uma opção listada no tipo unavailable_options
durante a cena Fortune
, isso aciona a intent other_option
e adiciona uma solicitação à fila. Como não há transição especificada, o loop de execução da cena continua reavaliando o estágio de condições. O slot chosenOptions
adiciona a solicitação à fila, que é enviada ao usuário.
Testar ação no simulador
Agora, sua ação responderá adequadamente quando um usuário selecionar uma das opções listadas no tipo unavailable_options
e especificar o auxílio selecionado. Em seguida, sua ação pedirá que o usuário escolha uma das opções originais (um dragão, um tradutor ou uma bússola).
Para testar a ação no simulador, siga estas etapas:
- Na barra de navegação, clique em Testar.
- Digite
Talk to my test app
no campo Entrada e pressioneEnter
. - Digite
Yes
no campo Entrada e pressioneEnter
. Também é possível clicar no ícone de sugestão Sim. - Digite
magic
no campo Entrada e pressioneEnter
.
Você vai notar que a solicitação não parece correta quando o usuário escolhe "mágica" devido ao artigo "um" ou "uma" antes da palavra. Saiba como resolver o problema nas seções a seguir.
Adicionar gerenciador unavailable_options
Para colocar o artigo "um" ou "uma" antes das opções apropriadas do tipo unavailable_options
, configure um manipulador de eventos na sua lógica de fulfillment para verificar se a opção escolhida pelo usuário precisa de um artigo. Primeiro, configure sua ação para chamar o gerenciador a partir da cena.
Para adicionar o gerenciador unavailable_options
, siga estas etapas:
- Clique em Desenvolver na navegação.
- Clique na cena
Fortune
. - Em Processamento da intent do usuário, clique em Quando há correspondência com other_option para abrir a janela.
- Desmarque Enviar solicitações.
- Selecione Chamar o webhook.
- Digite
unavailable_options
na caixa de texto do manipulador de eventos.
- Clique em Salvar.
Atualizar e implantar o fulfillment
Agora que você configurou a ação para chamar o manipulador de eventos unavailable_options
, basta atualizar no seu fulfillment e implantar.
Para atualizar o fulfillment, siga estas etapas:
- Clique em Webhook na navegação.
- Adicione o seguinte código no gerenciador
greeting
:
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
- Adicione o seguinte código em
const app = conversation();
:
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- Clique em Salvar fulfillment.
- Clique em Implantar fulfillment. Quando a implantação for concluída, aparecerá a seguinte mensagem acima do editor: A implantação da função do Cloud foi atualizada.
Entender o código
O gerenciador unavailable_options
faz o seguinte:
- Recebe os dados
option
do objetoconv
e atribuioption
à propriedadeoriginal
, que contém as entradas brutas do usuário - Atribui
optionKey
à propriedaderesolved
, que é a chave do tipounavailable_options
- Verifica se
optionKey
é uma das opções que precisam de um artigo. Se for, cria a mensagem com o artigo necessário - Adiciona a mensagem via
conv.add(message)
Testar ação no simulador
Agora, sua ação precisa ajustar a solicitação. Isso depende do uso do artigo "um" ou "uma" antes da escolha do usuário para o tipo unavailable_options
.
Para testar a ação, siga estas etapas:
- Na barra de navegação, clique em Testar.
- Clique ou digite
Talk to my test app
no campo Entrada e pressioneEnter
. - Digite
Yes
no campo Entrada e pressioneEnter
. Também é possível clicar no ícone de sugestão Sim. - Digite
magic
no campo Entrada e pressioneEnter
. - Digite
horse
no campo Entrada e pressioneEnter
.
Sua ação precisa adicionar o artigo "um" antes da opção "cavalo". Além disso, ela não pode incluir um artigo para a opção "mágica".
Parabéns!
Agora você já tem as habilidades intermediárias necessárias para criar ações no Google Assistente.
Conteúdo abordado
- Como desenvolver ações de conversa usando a biblioteca de fulfillment do Node.js
- Como usar slots para coletar dados do usuário
- Como usar condições para adicionar lógica à cena
- Como adicionar um loop de jogo
- Como adicionar um caminho de apoio
Recursos de aprendizado adicionais
Veja estes recursos para aprender a criar ações do Google Assistente:
- Documentação para desenvolver ações no Google Assistente
- Página do Actions on Google no GitHub com exemplos de código e bibliotecas
- A comunidade oficial do Reddit para desenvolvedores que trabalham com o Google Assistente
- Diretrizes de design de conversa com práticas recomendadas e orientações sobre ações de conversa
Como limpar o projeto [recomendado]
Para evitar possíveis cobranças, é recomendável remover os projetos que você não pretende usar. Para excluir os projetos criados neste codelab, siga estas etapas:
- Para excluir o projeto e os recursos do Cloud, conclua as etapas da seção Como encerrar (excluir) projetos.
- Opcional: para remover seu projeto do Console do Actions imediatamente, conclua as etapas da seção Como excluir um projeto. Caso contrário, seu projeto será removido automaticamente após cerca de 30 dias.
Siga nosso perfil do Twitter @ActionsOnGoogle para ficar por dentro dos nossos comunicados mais recentes e envie um tuíte para #AoGDevs contando o que você criou.
Pesquisa de feedback
Antes de sair, preencha esta breve pesquisa sobre sua experiência.