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
Actionchamando 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 objetoActione uma função de callback. Se você precisar criar o URL primeiro ou realizar outras etapas antes de abrir o URL, defina umActione usesetOnClickOpenLinkAction().Ao usar as funções
setOpenLink()ousetOnClickOpenLinkAction()do gerenciador de widgets, é necessário fornecer um objetoOpenLinkpara definir qual URL abrir. Você também pode usar esse objeto para especificar o comportamento de abertura e fechamento usando os tipos enumeradosOpenAseOnClose.É possível que mais de um widget use o mesmo objeto
Action. No entanto, é necessário definir objetosActiondiferentes 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
truepara que todo cache do lado do cliente seja limpo. Consulte a descrição do métodoActionResponseBuilder.setStateChanged()para mais detalhes.