Construção de Chatbots
Editor do Fluxo
Ações
ações são funções do lado do servidor executadas pelo chatbot como parte de um fluxo de conversação as ações têm o poder de alterar o estado da conversa; enviar mensagens personalizadas para a conversa; executar código arbitrário, como chamar uma api ou armazenar dados no banco de dados como são funções javascript, elas podem fazer praticamente qualquer coisa e têm as seguintes propriedades user todos os atributos do usuário; session variáveis mantidas apenas para a sessão; temp variáveis mantidas apenas para o fluxo; bot objeto contendo variáveis globais para este bot (igual para todos os usuários); event evento original (mais recente) recebido do usuário; args argumentos passados para esta ação do editor de fluxo ; process vm em área restrita contendo algumas das variáveis de ambiente (começando com exposed ) exemplo / const virtual machine = async function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / user\['firstname'] = 'bob' user\['age'] = 17 temp = { text 'hello there' } session store = \[{ id 1, id 2, id 3 }] / } / cadastrando novas ações há duas maneiras de registrar novas ações adicione seu código javascript em um jsarquivo e coloque o na pasta data/global/actions 🖊 nota não há como adicionar novos durante o tempo de execução programaticamente escreva ações diretamente na gui do conversation studio navegando até o editor de código e usando um modelo de ação usamos comentários javadoc para exibir informações significativas (como nome, descrição, argumentos, valores padrão) no editor de fluxo de diálogo é possível manter uma ação oculta no editor de fluxo adicionando o sinalizador @hidden true no javadoc bibliotecas externas o código nas ações deve ser mantido relativamente simples é possível definir contadores, formatar dados, buscar dados de uma api usando a biblioteca axios incluída se for necessário usar módulos ou bibliotecas npm ou de outras linguagens de programação, recomendamos que configure um servidor para essa finalidade ou use funções sem servidor e chame a api usando as ações do botpress usar o botpress para casos de uso de computação pesada de javascript , como processamento de imagem ou vídeo, pode causar problemas de latência para seu bot desativando ações o botpress irá ignorar os arquivos que começam com um ponto ( ) dessa forma, é possível desabilitar um gancho ou ação simplesmente prefixando o nome do arquivo com um ponto ações incorporadas ações de espera título da ação espera/atraso categoria utilitário autor botpress, inc parâmetros data type\ number name\ delay (padrão = 1000) o número de milissegundos para espera exemplo const wait = async delay => { return new promise(resolve => settimeout(() => resolve(), delay)) } return wait(args delay || 1000) 🖊 nota como é possível ver, a ação é apenas uma simples função de seta assíncrona que leva o número de milissegundos delaycomo parâmetro ao construir uma ação, é necessário especificar o tipo de ação, sua categoria, o autor e seus parâmetros anexar contexto título da ação anexar contexto categoria nlu autor botpress, inc 1º parâmetro data type\ string name\ contexts lista de contextos separados por vírgulas 2º parâmetro data type\ string name \[ttl=1] time to live do contexto em número de turnos de diálogo coloque 0 para desativar a expiração essa ação adiciona contexto(s) à lista de contextos usados pelo mecanismo nlu para mensagens subsequentes para essa sessão de bate papo 🖊 nota se um contexto já estivesse presente na lista, o ttl mais alto venceria; para substituir um contexto específico, use a removecontextação antes desta ação esse método é contextual à sessão de bate papo do usuário atual especifique mais de um contexto separando os com uma vírgula remover contexto título da ação remover contexto categoria nlu autor botpress, inc parâmetro data type\ string name\ contexts lista de contextos separados por vírgulas use esta ação para remover o(s) contexto(s) fornecido(s) da lista de contextos usados pelo mecanismo nlu para as mensagens subsequentes dessa sessão de bate papo esse método é contextual à sessão de bate papo do usuário atual especifique mais de um contexto separando os com uma vírgula redefinir contexto título da ação remover contexto categoria nlu autor botpress, inc parâmetro nenhum ele redefine o contexto nlu para o escopo padrão esse método é contextual ao usuário atual e à sessão de bate papo atual enviar comentários título da ação enviar comentários categoria nlu autor botpress, inc parâmetro data type\ number name\ value o valor de feedback use 1 para feedback positivo e 1 para feedback negativo fornece feedback ( 1 para feedback positivo ou 1 negativo) no final de uma meta (um fluxo de trabalho que o usuário concluiu) obter variável título da ação obter variável global categoria armazenamento autor botpress, inc 1º parâmetro data type\ string name\ name o nome da variável 2º parâmetro data type\ string name\ output a variável de estado para saída esta ação recupera uma variável que foi armazenada globalmente usando uma chave de armazenamento o botpress usa um sistema key value de armazenamento para permitir definições complexas de armazenamento de objetos redefinir variável título da ação redefinir variável global categoria armazenamento autor botpress, inc parâmetro data type\ string name\ name o nome da variável a ser redefinida use esta ação para redefinir uma variável com escopo global definir variável título da ação definir variável global categoria armazenamento autor botpress, inc 1º parâmetro data type\ string name\ name o nome da variável 2º parâmetro data type\ any name\ value defina o valor da variável 3º parâmetro data type\ string name \[expiry=never] defina a expiração dos dados, pode ser never ou uma string curta como 6 hours 4º parâmetro data type\ string name\ output a variável de estado para a saída esta ação permite definir uma variável globalmente, com expiração opcional definir variável título da ação definir variável categoria armazenamento autor botpress, inc 1º parâmetro data type\ string name\ type escolha entre usuário, sessão, temp e bot 2º parâmetro data type\ string name\ name o nome da variável 3º parâmetro data type\ any name\ value defina o valor da variável digite null ou deixe em branco para apagá la use esta ação para armazenar dados no armazenamento desejado com base na expectativa de tempo de vida útil redefinir sessão título da ação redefinir sessão categoria armazenamento autor botpress, inc parâmetro nenhum esta ação redefine a sessão do usuário e limpa as informações armazenadas em temp e session para o usuário esta ação não remove o histórico de contextos nlu e histórico de últimas mensagens mudar idioma título da ação mudar idioma categoria armazenamento autor botpress, inc parâmetro data type\ string name\ lang o código do idioma, por exemplo en válido para detentores de licença empresarial com bots multilíngues, esta ação permite alterar o idioma do bot para o usuário atual o botpress vem pré embalado com um mecanismo de tradução que ajuda os desenvolvedores a projetar um bot em um idioma enquanto atende aos usuários de todos os idiomas suportados e configurados tipos de conteúdo os tipos de conteúdo são a principal maneira de exibir conteúdo no chat audio o componente de áudio pode transmitir mp3áudio ( mp3 ) use o para transmitir músicas do spotify ou do youtube este componente também pode transmitir arquivos de áudio armazenados em seu servidor exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create a video content type in action ``` { type 'audio', video 'https //url to your video mp3', title 'random video', typing true } ``` @title display audio in the action @category content type @author botpress / const myaction = async () => { const audio = await bp cms renderelement( cartão um cartão é um único elemento de um carrossel pode ser visto como uma carta em um baralho de cartas o carrossel é todo o baralho de cartas exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create an card content type in action ``` { type 'card', title 'botpress', subtitle 'website', image 'https //avatars githubusercontent com/u/23510677?s=200\&v=4', actions \[{ title 'botpress website documentation', action 'open url', url 'https //botpress com/docs' }] } ``` @title display an card in the action @category content type @author botpress / const myaction = async () => { const audio = await bp cms renderelement( 'builtin card', { type 'card', title 'botpress', subtitle 'website', image 'https //avatars githubusercontent com/u/23510677?s=200\&v=4', actions \[{ title 'botpress website documentation', action 'open url', url 'https //botpress com/docs' }] }, event ) await bp events replytoevent(event, audio) } return myaction() / your code ends here / } carrossel um carrossel é uma série de cartas este componente é útil no chatbot de e commerce o elemento de imagem pode ser um url ou urls de dados exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create a carousel content type in action ``` { type 'carousel', items \[ { title 'botpress', subtitle 'website', image 'https //avatars githubusercontent com/u/23510677?s=200\&v=4', actions \[{ title 'botpress website', action 'open url', url 'https //botpress com' }] } ], typing true }, ``` @title display a carousel in the action @category content type @author botpress / const myaction = async () => { const carousel = await bp cms renderelement( 'builtin carousel', { type 'carousel', items \[ { title 'botpress', subtitle 'website', image 'https //avatars githubusercontent com/u/23510677?s=200\&v=4', actions \[{ title 'botpress website', action 'open url', url 'https //botpress com' }] }, { title 'botpress documentation', subtitle 'website', image 'data\ image/jpeg;base64,/9j/4a /9k=', actions \[{ title 'botpress website', action 'open url', url 'https //botpress com' }] } ], typing true }, event ) await bp events replytoevent(event, carousel) } return myaction() / your code ends here / } lista suspensa uma lista suspensa exibe uma lista de opções exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create a dropdown content type in action ``` { type 'dropdown', message 'dropdown content type', buttontext 'click me', placeholdertext 'dropdown placeholder', options \[{ label 'food', value 'apple' }], width 10, displayinkeyboard false, allowcreation false, allowmultiple false, markdown true, typing true } ``` @title display a dropdown in an action @category content type @author botpress / const myaction = async () => { const dropdown = await bp cms renderelement( 'dropdown', { type 'dropdown', message 'dropdown content type', buttontext 'click me', placeholdertext 'dropdown placeholder', options \[{ label 'food', value 'apple' }], markdown true, typing true }, event ) await bp events replytoevent(event, dropdown) } return myaction() / your code ends here / } imagem é possível exibir imagens use uma imagem de url ou uma url de dados exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create an image content type in action ``` { type 'image', title 'random image', image 'url your image', typing true } ``` @title display image in action @category content type @author botpress / const myaction = async () => { const image = await bp cms renderelement( 'builtin image', { type 'image', image 'https //upload wikimedia org/wikipedia/commons/thumb/d/d3/sphalerite creede%2c mineral county%2c colorado%2c usa jpg/1920px sphalerite creede%2c mineral county%2c colorado%2c usa jpg', typing true }, event ) await bp events replytoevent(event, image) } return myaction() / your code ends here / } localização ele exibe um lugar em um mapa a localização só está habilitada no canal vonage exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create an location content type in an action ``` { type 'location', latitude '', longitude '', address '', title 'botpress office', typing true } ``` @title display an location in the action @category content type @author botpress / const myaction = async () => { const audio = await bp cms renderelement( 'builtin location', { type 'location', latitude 46 784541, longitude 71 2909357, address '2480 ch ste foy bureau 175, quebec city, quebec g1v 1t6', title 'botpress office', typing true }, event ) await bp events replytoevent(event, audio) } return myaction() / your code ends here / } arquivo botpress pode exibir arquivo pdf atualmente, apenas o formato pdf é suportado exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create an file content type in action ``` { type 'file', file 'http //wavelets ens fr/boycott elsevier/declarations/declarations/2008 07 01 aaron swartz open access manifesto pdf', title 'aaron swartz guerilla manifesto', typing true } ``` @title display a file in the action @category content type @author botpress / const myaction = async () => { const file = await bp cms renderelement( 'builtin file', { type 'file', file 'http //wavelets ens fr/boycott elsevier/declarations/declarations/2008 07 01 aaron swartz open access manifesto pdf', title 'aaron swartz guerilla manifesto', typing true }, event ) await bp events replytoevent(event, file) } return myaction() / your code ends here / } escolha única este componente carrega uma mensagem, geralmente uma pergunta, e sugere escolhas ao usuário para cumprir a mensagem o usuário pode escolher apenas uma opção e, ao selecionar a preferência, instrua seu chatbot a obter um valor personalizado exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create a single choice content type in action ``` { type 'single choice', text 'ort cloud', isdropdown 'https //ia801901 us archive org/13/items/home odyssey/home odyssey 04oortcloud mp3', dropdownplaceholder true, choices \[{ title 'title', value 'value' }], markdown true, disablefreetext true, typing true }, ``` @title display a single choice in the action @category content type @author botpress / const myaction = async () => { const single choice = await bp cms renderelement( 'builtin single choice', { type 'single choice', text 'place to eat', isdropdown true, dropdownplaceholder true, choices \[ { title 'burger place', value 'burger' }, { title 'salad place', value 'salad' } ], markdown true, disablefreetext true, typing true }, event ) await bp events replytoevent(event, single choice) } return myaction() / your code ends here / } texto o tipo de conteúdo de texto é uma mensagem de texto normal com indicadores de digitação opcionais e alternativas utilize markdown em seu texto para adicionar formatação e estilo, mas certifique se de que o canal de destino possa renderizar esse texto é possível escrever em html no conteúdo de texto no canal da web e seu chatbot irá renderizá lo corretamente isso abre a possibilidade de incluir iframes e construir páginas da web em miniatura (comumente conhecidas como visualizações da web) em seu conteúdo sem criar componentes personalizados exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create a text content type in a action ``` { type 'text', text 'hello world !', variations \['greeting', 'bonjour tout le monde'], markdown true, typing true } ``` @title hello world with a built in text @category content type @author botpress / const myaction = async () => { const text = await bp cms renderelement( 'builtin text', { type 'text', text 'hello world!', typing true, markdown true }, event ) await bp events replytoevent(event, text) } return myaction() / your code ends here / } vídeo faça upload de um vídeo ou link para um arquivo de vídeo que será buscado quando o elemento de conteúdo for invocado exemplo function action(bp typeof sdk, event sdk io incomingevent, args any, { user, temp, session } = event state) { / your code starts below / / show how to create a video content type in a action ``` { type 'video', video 'https //url to your video mp4', title 'random video', typing true } ``` @title display an video in the action @category content type @author botpress / const myaction = async () => { const video = await bp cms renderelement( 'builtin video', { type 'video', title 'lady gaga', video 'https //ia601201 us archive org/4/items/lady gaga poker face /lady%20gaga poker%20face%20 mp4', typing true }, event ) await bp events replytoevent(event, video) } return myaction() / your code ends here / }