A maioria dos complementos, além de apresentar dados, exige que o usuário insira informações. Ao criar um complemento baseado em cards, é possível usar widgets interativos, como botões, itens de menu da barra de ferramentas ou caixas de seleção, para solicitar ao usuário dados necessários para o complemento ou fornecer outros controles de interação.
Como adicionar ações aos widgets
Na maioria das vezes, você torna os widgets interativos vinculando-os a ações específicas e implementando o comportamento necessário em uma função de callback. Consulte ações complementares para saber mais.
Na maioria dos casos, é possível seguir este procedimento geral para configurar um widget para realizar uma ação específica quando selecionado ou atualizado:
- Crie um objeto
Action
, especifique a função de callback que será executada, junto com os parâmetros necessários. - Vincule o widget ao
Action
chamando a função de gerenciador de widgets apropriada. - Implemente a função de callback para ativar o comportamento necessário.
Exemplo
O exemplo a seguir define um botão que mostra uma notificação do usuário
após o clique. O clique aciona a função de callback notifyUser()
com um argumento que especifica o texto da notificação. O retorno de um
ActionResponse
criado resulta em uma notificação exibida.
/**
* Build a simple card with a button that sends a notification.
* @return {Card}
*/
function buildSimpleCard() {
var buttonAction = CardService.newAction()
.setFunctionName('notifyUser')
.setParameters({'notifyText': 'Button clicked!'});
var button = CardService.newTextButton()
.setText('Notify')
.setOnClickAction(buttonAction);
// ...continue creating widgets, then create a Card object
// to add them to. Return the built Card object.
}
/**
* Callback function for a button action. Constructs a
* notification action response and returns it.
* @param {Object} e the action event object
* @return {ActionResponse}
*/
function notifyUser(e) {
var parameters = e.parameters;
var notificationText = parameters['notifyText'];
return CardService.newActionResponseBuilder()
.setNotification(CardService.newNotification()
.setText(notificationText))
.build(); // Don't forget to build the response!
}
Criar interações eficazes
Ao projetar cards interativos, tenha em mente o seguinte:
Os widgets interativos geralmente precisam de pelo menos um método de manipulador para definir o comportamento.
Use a função de gerenciador de widgets
setOpenLink()
quando tiver um URL e quiser abri-lo em uma guia. Isso evita a necessidade de definir um objetoAction
e uma função de callback. Se você precisar criar o URL primeiro ou realizar outras etapas antes de abrir o URL, defina umAction
e usesetOnClickOpenLinkAction()
.Ao usar as funções
setOpenLink()
ousetOnClickOpenLinkAction()
do gerenciador de widgets, é necessário fornecer um objetoOpenLink
para definir qual URL abrir. Você também pode usar esse objeto para especificar o comportamento de abertura e fechamento usando os tipos enumeradosOpenAs
eOnClose
.É possível que mais de um widget use o mesmo objeto
Action
. No entanto, é necessário definir objetosAction
diferentes se você quiser fornecer parâmetros diferentes para a função de callback.Mantenha as funções de callback simples. Para manter a capacidade de resposta dos complementos, o serviço de cartão limita as funções de callback a um máximo de 30 segundos de tempo de execução. Se a execução demorar mais que isso, a interface do complemento pode não atualizar a exibição do cartão corretamente em resposta ao
Action
.Se o status de dados em um back-end de terceiros mudar como resultado de uma interação do usuário com a interface do complemento, é recomendável que o complemento defina um bit de "estado alterado" para
true
para que todo cache do lado do cliente seja limpo. Consulte a descrição do métodoActionResponseBuilder.setStateChanged()
para mais detalhes.