Pular para o conteúdo principal

Referência de Funções

Esta página documenta as funções FLOIP personalizadas disponíveis no Journey Builder da Turn. Essas funções estendem a especificação FLOIP padrão com funcionalidades específicas da Turn.

Mensagens​

send_content()​

Envia um card de conteúdo (modelo de mensagem pré-definido) da biblioteca de conteúdo da Turn.

Configuração:

CampoTipoObrigatórioDescrição
content.uuiduuidSimUUID do card de conteúdo a enviar
content.wait_for_inputboolean | expressionSimSe deve aguardar a entrada do usuário após o envio

Exemplo:

card Card do
send_content("content-uuid-here")
# Or wait for response:
resp = send_content("content-uuid-here", true)
end

add_label()​

Adiciona um rótulo a uma mensagem no contexto atual.

Configuração:

CampoTipoObrigatórioDescrição
labelslistSimLista de rótulos a aplicar
messagestringSimA referência da mensagem a rotular

Exemplo:

card Card do
add_label("important")
add_label(operator)
end

text()​

Envia uma mensagem de texto ao usuário.

Configuração:

CampoTipoObrigatórioDescrição
promptstringSimO conteúdo da mensagem a enviar

Exemplo:

card Greetings do
text("Hello @contact.name!")
text("Welcome to our service.")
end

Entrada​

ask()​

Solicita ao usuário uma resposta de texto livre com limite de caracteres opcional.

Configuração:

CampoTipoObrigatórioDescrição
max_response_charactersnumberNãoComprimento máximo permitido da resposta
promptstringSimA pergunta a fazer ao usuário

Retorna: O texto da resposta digitado pelo usuário

Exemplo:

card AskName, then: Greetings do
name = ask("What's your name?")
end

card Greetings do
text("Hello @name!")
end

buttons()​

Apresenta ao usuário um conjunto de opções como botões e aguarda que ele selecione uma.

Configuração:

CampoTipoObrigatórioDescrição
choiceslistSimLista de opções de botão (nomes de cards ou pares [valor, rótulo])
promptstringSimO texto da mensagem exibido com os botões

Retorna: Mapa com value, name, index e label da opção selecionada

Exemplo:

card ReadDocument do
buttons([Accept, Decline]) do
text("Please read and accept the terms")
document("https://example.org/terms.pdf")
end
end

card Accept do
text("Thank you for accepting!")
end

Controle​

log()​

Registra uma mensagem no log do sistema para fins de depuração.

Configuração:

CampoTipoObrigatórioDescrição
messagestringSimA mensagem a registrar

Exemplo:

card Card do
log("user not opted in for follow ups")
log("hello @today()")
end

run_stack()​

Executa outra jornada (stack) e retorna ao fluxo atual quando concluída.

Configuração:

CampoTipoObrigatórioDescrição
flow_iduuidSimUUID do fluxo a executar

Exemplo:

card Card do
run_stack("10dca9d0-3f0b-11ed-b878-0242ac120002")
end

schedule_stack()​

Agenda uma jornada para ser executada em um momento futuro, ou cancela uma jornada previamente agendada.

Configuração:

CampoTipoObrigatórioDescrição
flow_iduuidSimUUID do fluxo a agendar
schedule_atdatetimeNãoDatetime específico para executar o fluxo
schedule_inintegerNãoNúmero de segundos no futuro para executar o fluxo

Exemplo:

card Card do
# Schedule to run in 1 hour
schedule_stack("10dca9d0-3f0b-11ed-b878-0242ac120002", in: 3600)

# Or schedule at a specific time
schedule_stack("some-uuid", at: datetime_add(now(), 2, "D"))
end

Notas: É preciso fornecer schedule_at ou schedule_in. Para cancelar, forneça apenas flow_id.


wait()​

Introduz um atraso no fluxo da jornada para controlar o tempo entre ações.

Configuração:

CampoTipoObrigatórioDescrição
secondsinteger | expressionSimNúmero de segundos para aguardar (suporta expressões)

Exemplo:

card DelayCard do
text("Starting delay...")
wait(2)
text("Delay completed!")
end

Contato​

update_contact()​

Atualiza uma ou mais propriedades no contato atual.

Exemplo:

card SavePreferences do
update_contact(name: "Boaty", surname: "McBoatFace")
update_contact(opted_in: true)
end

Dados​

update_dictionary()​

Atualiza um par chave-valor em uma variável de dicionário.

Configuração:

CampoTipoObrigatórioDescrição
keystringSimA chave a definir
referencestringSimA variável de dicionário a atualizar
valueexpressionSimA expressão de valor a avaliar e armazenar

Exemplo:

card Deposit do
update_dictionary(account, "balance", account.balance + 1)
text("You've deposited $1")
end

Chat​

assign_chat_to()​

Atribui o chat atual a um usuário ou fila.

Configuração:

CampoTipoObrigatórioDescrição
assign_tostringSimE-mail do usuário para atribuir o chat

Exemplo:

card Card do
assign_chat_to("support@example.com")
end

WhatsApp​

call_permission_request()​

Solicita permissão para ligar para o usuário via o recurso nativo de permissão de chamada do WhatsApp.

Configuração:

CampoTipoObrigatórioDescrição
call_permission_request.textstringSimO texto da mensagem pedindo ao usuário que conceda permissão de chamada

Retorna: A resposta de permissão de chamada do usuário

Exemplo:

card RequestPermission do
granted = call_permission_request("Can we call you to assist?")
end

card ThankYou do
text("Thank you!")
end

whatsapp_cta()​

Envia uma mensagem de URL Call-to-Action (CTA) interativa do WhatsApp com um botão tocável que abre uma URL.

Configuração:

CampoTipoObrigatórioDescrição
cta_url.ctastringSimTexto do botão de call-to-action
cta_url.footerstringNãoTexto de rodapé opcional
cta_url.headerobjectNãoObjeto de cabeçalho opcional com um type ("text", "image", "video" ou "document") e um value
cta_url.textstringSimTexto do corpo da mensagem
cta_url.urlstringSimA URL que o botão abre

Retorna: Nada; mensagens de URL CTA não aguardam a entrada do usuário

Exemplo:

card Card do
whatsapp_cta("Visit our site", "https://example.com") do
text("Tap the button below to learn more")
end
end

catalog()​

Exibe um catálogo de produtos do WhatsApp permitindo que os usuários naveguem e peçam produtos.

Configuração:

CampoTipoObrigatórioDescrição
catalog.footerstringNãoTexto de rodapé opcional
catalog.textstringSimO texto do corpo do catálogo

Retorna: O pedido/seleção do usuário a partir do catálogo

Exemplo:

card Card do
catalog("Check out our products!") do
footer("Visit our store")
end
end

request_contact_info()​

Solicita o número de telefone do usuário via o recurso nativo de compartilhamento de contato do WhatsApp.

Configuração:

CampoTipoObrigatórioDescrição
request_contact_info.textstringSimO texto da mensagem pedindo ao usuário que compartilhe seu número de telefone

Retorna: "already_shared" quando o número já estava registrado, "shared" para qualquer resposta ao prompt

Exemplo:

card RequestContactInfo do
ref_RequestContactInfo = request_contact_info("Please share your phone number so we can help you.")
then(AlreadyHadIt when ref_RequestContactInfo == "already_shared")
then(ThankYou when ref_RequestContactInfo == "shared" and contact.whatsapp_id != null)
end

card AlreadyHadIt do
text("Let's continue.")
end

card ThankYou do
text("Thank you for sharing your number!")
end

request_location()​

Solicita a localização do usuário via o recurso nativo de compartilhamento de localização do WhatsApp.

Configuração:

CampoTipoObrigatórioDescrição
request_location.textstringSimO texto da mensagem pedindo ao usuário que compartilhe sua localização

Retorna: Os dados de localização compartilhados pelo usuário

Exemplo:

card RequestLocation do
location = request_location("Please share your location")
end

card ThankYou, when: "@input.location != nil" do
text("Thank you for sharing your location!")
end

whatsapp_flow()​

Envia um WhatsApp Flow (formulário interativo) para coleta nativa de dados no WhatsApp.

Configuração:

CampoTipoObrigatórioDescrição
flow.ctastringSimTexto do botão de call-to-action
flow.footerstringNãoTexto de rodapé opcional
flow.headerstringNãoTexto de cabeçalho opcional
flow.idstringSimO ID do WhatsApp Flow
flow.screenstringSimA tela a exibir
flow.textstringSimTexto do corpo da mensagem

Retorna: Dados JSON capturados pelo WhatsApp Flow

Exemplo:

card Card do
whatsapp_flow("Start Survey", "flow-id", "WELCOME") do
text("Please complete our survey")
end
end

send_message_template()​

Envia um modelo de mensagem do WhatsApp com parâmetros dinâmicos.

Configuração:

CampoTipoObrigatórioDescrição
template.componentslistSimLista de componentes do modelo com parâmetros
template.language.codestringSimCódigo do idioma do modelo
template.namestringSimO nome do modelo

Retorna: O JSON enviado quando o modelo tem um botão de flow, caso contrário um mapa com value e index quando o modelo tem botões de resposta

Exemplo:

card Card do
send_message_template("template_name", "en", ["param-1", "param-2"])
end

video_call_request()​

Envia uma mensagem de chamada de vídeo do WhatsApp com um botão de chamada que o usuário pode tocar para ligar para a empresa.

Configuração:

CampoTipoObrigatórioDescrição
video_call_request.display_textstringNãoRótulo opcional para o botão de chamada (padrão: "Call Now")
video_call_request.textstringSimO corpo da mensagem pedindo ao usuário que ligue

Retorna: nil

Exemplo:

card OfferCall do
video_call_request("Tap below to call us", display_text: "Call support")
end

card NextStep do
text("We look forward to your call!")
end

voice_call_request()​

Envia uma mensagem de chamada de voz do WhatsApp com um botão de chamada que o usuário pode tocar para ligar para a empresa.

Configuração:

CampoTipoObrigatórioDescrição
voice_call_request.display_textstringNãoRótulo opcional para o botão de chamada (padrão: "Call Now")
voice_call_request.textstringSimO corpo da mensagem pedindo ao usuário que ligue

Retorna: nil

Exemplo:

card OfferCall do
voice_call_request("Tap below to call us", display_text: "Call support")
end

card NextStep do
text("We look forward to your call!")
end

mark_as_read()​

Marca uma mensagem do WhatsApp como lida e opcionalmente mostra um indicador de digitação.

Configuração:

CampoTipoObrigatórioDescrição
message_idexpressionSimO ID da mensagem a marcar como lida (ex: "@event.message.id")
show_typingbooleanNãoSe deve mostrar um indicador de digitação (padrão: false)

Retorna: Nenhum valor é retornado; esta é uma operação fire-and-forget.

Exemplo:

card MyCard do
# Simply mark the message as read
mark_as_read("@event.message.id")
end

card WithTypingIndicator do
# Mark as read and show typing indicator to simulate bot composing
mark_as_read("@event.message.id", show_typing: true)
wait(3)
text("Here's the information you requested...")
end

Notas: O indicador de digitação desaparece automaticamente após 25 segundos ou quando a próxima mensagem é enviada. A jornada continua independentemente de a chamada da API ter sucesso.


post_reaction()​

Publica uma reação com emoji em uma mensagem do WhatsApp, ou remove uma reação existente.

Configuração:

CampoTipoObrigatórioDescrição
emojistringSimO emoji para reagir (use string vazia para remover reação)
message_idexpressionSimO ID da mensagem para reagir (ex: @event.message.id)

Retorna: Nenhum valor é retornado; esta é uma operação fire-and-forget.

Exemplo:

card MyCard do
# React with thumbs up to the triggering message
post_reaction(@event.message.id, "👍")
end

card AcknowledgeAndProcess do
# React to acknowledge receipt
post_reaction(@event.message.id, "👀")
# Process the request...
text("Processing your request...")
end

card RemoveReaction do
# Remove an existing reaction by passing empty emoji
post_reaction(@event.message.id, "")
end

Notas: Passe uma string vazia como emoji para remover uma reação existente. A jornada continua independentemente de a chamada da API ter sucesso.


Integração​

conversion()​

Envia eventos de conversão para a Conversions API da Meta para otimização e medição de anúncios.

Configuração:

CampoTipoObrigatórioDescrição
conversion.event_namestringSimO nome do evento de conversão (ex: "Purchase", "Lead")
conversion.optional_fieldsmapNãoCampos opcionais como event_id, event_source_url
conversion.user_datamapSimDados do usuário para correspondência (e-mail, telefone, etc.)

Exemplo:

card Card do
conversion("Purchase", phone: "+1234567890", email: "user@example.com")
end

get() / post() / put() / patch() / delete()​

Faz requisições HTTP para APIs externas. Suporta os métodos GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS e TRACE.

Configuração:

CampoTipoObrigatórioDescrição
bodystring | listNãoCorpo da requisição (string ou pares chave-valor)
headerslistSimLista de pares [chave, valor] para cabeçalhos
methodstringSimMétodo HTTP (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, TRACE)
modestringSimModo de execução "sync" ou "async"
querylistNãoLista de pares [chave, valor] para parâmetros de query
timeoutnumberSimTimeout da requisição em milissegundos (máx 20000)
urlstringSimA URL a chamar

Retorna: Mapa com url, status, body, query, mode e headers da resposta

Exemplo:

card MyCard do
response = get("https://api.example.org/data",
timeout: 5000,
query: [["id", "@contact.id"]]
)
text("Status: @response.status")
end

app()​

Chama uma função em um app Lua instalado e retorna o resultado.

Configuração:

CampoTipoObrigatórioDescrição
app_namestringSimO nome da definição do app a chamar
argslistSimLista de argumentos para passar à função (suporta expressões)
function_namestringSimO nome da função a executar

Retorna: Um mapa com result (valor de retorno da função) e success (booleano). Também armazenado na variável app_result.

Exemplo:

card MyCard do
# Call a function in a Lua app with arguments
result = app("calculator", "add_numbers", ["10", "20"])
text("Result: @(result.result)")
end

card WithExpressions do
# Use expressions to pass dynamic values
result = app("my_app", "process_data", ["@(contact.name)", "@(event.message.text)"])

# Check if the call succeeded
result when result.success do
text("Success: @(result.result)")
end

result when not result.success do
text("Error: @(result.result)")
end
end

card UsingAppResult do
# Results are also stored in the app_result variable
app("weather", "get_forecast", ["@(contact.city)"])
text("The weather is: @(app_result.result)")
end

Notas: O app deve estar instalado e habilitado. Argumentos de função suportam expressões que são avaliadas em tempo de execução.


IA (Agnóstico de Fornecedor)​

ai_add_function()​

Adiciona uma definição de função ao contexto de IA para chamadas de ferramentas.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
descriptionexpressionSimDescrição da função para a IA
nameexpressionSimNome da função
parametersexpressionSimJSON Schema definindo os parâmetros da função

Retorna: Objeto de conexão atualizado com a definição da função adicionada.

Exemplo:

card MyCard do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Add a function the AI can call
ai = ai_add_function(ai, "make_booking", "Book an appointment for the user", parse_json("""
{
"type": "object",
"properties": {
"date": {"type": "string", "description": "Appointment date in YYYY-MM-DD format"},
"time": {"type": "string", "description": "Appointment time in HH:MM format"},
"service": {"type": "string", "enum": ["consultation", "followup", "checkup"]}
},
"required": ["date", "time", "service"]
}
"""))

ai = ai_add_message(ai, "user", @(event.message.text))
result = ai_chat_completion(ai)

# Check if the AI called a function
result when result.response.functions != [] do
# Handle the function call
text("Booking confirmed!")
end
end

Notas: Os parâmetros devem ser um objeto JSON Schema válido. A IA chamará a função quando apropriado e retornará os argumentos em result.response.functions.


ai_add_image()​

Adiciona uma imagem ao contexto de IA para modelos com capacidade de visão.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
image_urlexpressionSimURL da imagem (URL pública ou data URI)
max_tokensexpressionNãoMáximo de tokens para a resposta
promptexpressionSimPrompt de texto descrevendo o que fazer com a imagem
roleexpressionSimPapel da mensagem (tipicamente user)

Retorna: Objeto de conexão atualizado com a mensagem de imagem adicionada.

Exemplo:

card MyCard do
ai = ai_add_image(ai, "user", "Describe this image", @(event.message.image.url), 300)
end

ai_add_message()​

Adiciona uma única mensagem ao contexto de conversa da IA.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
messageexpressionSimO conteúdo da mensagem
roleexpressionSimPapel da mensagem (system, user ou assistant)

Retorna: Objeto de conexão atualizado com a nova mensagem adicionada.

Exemplo:

card MyCard do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Add a system message to set the AI's behavior
ai = ai_add_message(ai, "system", "You are a helpful customer support agent.")

# Add the user's message
ai = ai_add_message(ai, "user", @(event.message.text))

# Get the AI response
result = ai_chat_completion(ai)
text(@(result.response))
end

Notas: Papéis: system (instruções), user (entrada do cliente), assistant (respostas da IA para contexto).


ai_add_messages()​

Adiciona múltiplas mensagens ao contexto de conversa da IA.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
messagesexpressionSimLista de conteúdos de mensagens
roleexpressionSimPapel da mensagem (system, user ou assistant)

Retorna: Objeto de conexão atualizado com as novas mensagens adicionadas.

Exemplo:

card MyCard do
ai = ai_add_messages(ai, "user", ["Hello", "How are you?"])
end

ai_agent()​

Executa um agente de IA com intents, skills e memória de conversa para interações complexas.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
contact_fieldsexpressionNãoCampos de contato para incluir no contexto
dataexpressionSimContexto de dados adicional para o agente
instructionsexpressionSimInstruções do sistema para o agente
intentsexpressionSimLista de intents que o agente pode reconhecer. Uma intent pode ter uma expression opcional que torna sua saída determinística: quando ela é verdadeira para a mensagem recebida, o agente segue essa saída antes de o modelo ser executado.
skillslistNãoLista de skills que o agente pode chamar. Inclui skills de conhecimento (conteúdo estático) e skills de código (funções Lua). Veja Skills de Agentes IA.

Retorna: Resposta do agente com action (intent reconhecida, 'end_conversation' ou 'continue_conversation' para uso interno do loop), response (texto da IA enviado ao usuário), status (código HTTP), error (booleano) e deterministic (true quando a saída foi decidida pela expression de uma intent, e não pelo modelo).

Exemplo:

# Agent card that handles its own conversation loop.
# ai_agent() sends its own messages and waits for user input on its own.
# It only returns to the flow when an action is recognized (intent,
# end_conversation, or error).

card Agent do
ai = ai_assistant("assistant-uuid")
ai = ai_conversation_memory(ai, "journey")

# Define intents the agent can recognize
intents = parse_json("""
[
{"id": "book_appointment", "name": "Book Appointment", "description": "When the user wants to schedule an appointment"},
{"id": "get_info", "name": "Get Information", "description": "When the user asks about hours or services"},
{"id": "urgent_help", "name": "Urgent Help", "description": "When the user is in danger", "expression": "has_any_phrase(last_message, [\"emergency\", \"urgent help\"])"}
]
""")

# Data to collect from the user (empty list if not collecting data)
data_to_collect = parse_json("[]")

agent_result = ai_agent(ai, "You are a friendly booking assistant. Help users schedule appointments.", intents, data_to_collect)

# Handle errors
then(ErrorCard when agent_result.error == true)

# Handle end of conversation
then(EndCard when agent_result.action == "end_conversation")

# Handle recognized intents - route to specific flows
then(BookAppointment when agent_result.action == "book_appointment")
then(GetInfo when agent_result.action == "get_info")

# The urgent_help intent has an expression, so this exit is also taken
# deterministically, before the model runs, whenever the expression is true
then(UrgentHelp when agent_result.action == "urgent_help")
end

card ErrorCard do
text("Sorry, something went wrong. Please try again later.")
end

card EndCard do
text("Thank you for chatting! Have a great day.")
end

card BookAppointment do
run_stack("booking-flow-uuid")
end

card GetInfo do
text("We're open Monday-Friday, 9am-5pm at 123 Main St.")
end

card UrgentHelp do
text("Please call your local emergency number now.")
end

Notas: O agente gerencia seu próprio loop de conversa. Ele envia mensagens, aguarda a entrada do usuário e só retorna ao fluxo quando uma ação é produzida (intent reconhecida ou end_conversation). Ações embutidas: submit_recognized_intent() dispara roteamento de intent, end_conversation() encerra o loop. Saídas determinísticas: uma intent com uma expression é verificada antes de cada turno do agente, na ordem da lista, e a primeira expression verdadeira faz o roteamento imediatamente, sem chamar o modelo, portanto nenhuma mensagem final é enviada. Escreva a expression como a condição when de um card e sem @ (last_message, não @last_message). Só funciona em intents escritas como um parse_json(...) literal, porque a expression é compilada antecipadamente. Dentro da expression, last_message é o que o usuário acabou de dizer ao agente (a transcrição, no caso de uma mensagem de voz). Uma mensagem recebida dispara uma saída determinística no máximo uma vez por card de agente, portanto voltar ao agente depois não gera um loop.


ai_chat_completion()​

Executa uma requisição de chat completion com todas as mensagens e funções na conexão.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA com mensagens
json_schemamapNãoJSON Schema para saída estruturada (quando response_format é json_object)
response_formatstringNãoFormato de resposta (text ou json_object)

Retorna: Um mapa com status, error e response (contendo sentences, functions, combined e value).

Exemplo:

card MyCard do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))
ai = ai_add_message(ai, "system", "You are a helpful assistant.")
ai = ai_add_message(ai, "user", @(event.message.text))

result = ai_chat_completion(ai)

# result contains:
# %{
# "status" => 200,
# "error" => false,
# "response" => %{
# "__value__" => "Hello! How can I help you today?",
# "sentences" => ["Hello!", "How can I help you today?"],
# "functions" => [],
# "combined" => [...]
# }
# }

text(@(result.response))
end

card WithJsonResponse do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))
ai = ai_add_message(ai, "user", "List 3 colors")

# Request JSON response format
result = ai_chat_completion(ai, response_format: "json_object")
end

Notas: O campo value contém a resposta de texto completa. Use response_format: "json_object" para saída JSON estruturada.


ai_connect()​

Cria um objeto de conexão de IA para qualquer fornecedor suportado (OpenAI, Anthropic, Google, etc.).

Configuração:

CampoTipoObrigatórioDescrição
modelexpressionSimO modelo de IA a usar (ex: gpt-4, claude-3-opus)
tokenexpressionSimToken de API para autenticação
vendorexpressionSimIdentificador do fornecedor de IA (openai, anthropic, google, etc.)

Retorna: Um objeto de conexão com type, token, model, vendor, messages, functions e max_tokens.

Exemplo:

card MyCard do
# Connect to OpenAI
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))
end

card AnthropicExample do
# Connect to Anthropic Claude
ai = ai_connect("anthropic", "claude-3-opus-20240229", @(secrets.anthropic_token))
end

card MetaExample do
# Connect to Meta Llama
ai = ai_connect("meta_ai", "llama-3", @(secrets.meta_ai_token))
end

Notas: Fornecedores suportados: openai, anthropic, google, meta_ai. Use o nome de modelo apropriado para cada fornecedor.


ai_assistant()​

Cria uma conexão com um Assistente de IA pré-configurado.

Configuração:

CampoTipoObrigatórioDescrição
uuidexpressionSimUUID do assistente para conectar

Retorna: Um objeto de conexão com detalhes do assistente, vendor, messages, functions e max_tokens.

Exemplo:

card MyCard do
ai = ai_assistant("assistant-uuid")
end

ai_model()​

Cria uma conexão diretamente com um fornecedor/modelo de IA, usando as credenciais configuradas da organização para esse fornecedor (sem necessidade de assistente).

Configuração:

CampoTipoObrigatórioDescrição
modelexpressionSimIdentificador do modelo para o fornecedor escolhido
vendorexpressionSimIdentificador do fornecedor de IA (ex: "openai", "anthropic", "gemini")

Retorna: Um objeto de conexão com vendor, model, token, messages, functions e max_tokens.

Exemplo:

card MyCard do
ai = ai_model("anthropic", "claude-sonnet-4-6")
end

ai_conversation_memory()​

Configura as definições de memória de conversa para a conexão de IA.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
memory_settingexpressionSimModo de memória: journey (escopo de sessão), longterm ou none

Retorna: Objeto de conexão atualizado com configurações de memória.

Exemplo:

card MyCard do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Use long-term memory (persists across sessions)
ai = ai_conversation_memory(ai, "longterm")

ai = ai_add_message(ai, "user", @(event.message.text))
result = ai_chat_completion(ai)
end

card SessionMemory do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Use journey-scoped memory (clears when journey ends)
ai = ai_conversation_memory(ai, "journey")
end

card NoMemory do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Disable memory (each interaction is independent)
ai = ai_conversation_memory(ai, "none")
end

Notas: Modos de memória: journey (padrão, escopo de sessão), longterm (persiste entre sessões para o contato), none (sem estado).


ai_stt()​

Transcreve áudio para texto usando um provedor STT configurado (OpenAI embutido ou um adaptador instalado via app).

Configuração:

CampoTipoObrigatórioDescrição
stt_modelexpressionNãoID de modelo específico do provedor (ex: "whisper-1", "scribe_v1").
stt_optionsmapNãoOpções específicas do provedor encaminhadas ao adaptador (ex: language, prompt, extras do fornecedor).
stt_providerexpressionNãoID do provedor STT. Use "openai" (embutido, padrão) ou "app:app_name:adapter_name" para um adaptador fornecido por app.
urlexpressionSimURL (ou id externo do anexo) do áudio a transcrever

Retorna: A string de transcrição combinada.

Exemplo:

card Listen do
url = attachment_url(event.message.audio.id)
text = ai_stt(url,
stt_provider: "openai",
stt_model: "whisper-1",
stt_options: parse_json("""
{"language": "en"}
""")
)
end

ai_tts()​

Gera áudio de fala a partir de texto usando um provedor TTS configurado (OpenAI embutido ou um adaptador instalado via app).

Configuração:

CampoTipoObrigatórioDescrição
textexpressionSimTexto para converter em fala
tts_modelexpressionNãoID de modelo específico do provedor (ex: "gpt-4o-mini-tts", "tts-1").
tts_optionsmapNãoOpções específicas do provedor encaminhadas ao adaptador (ex: stability do ElevenLabs).
tts_providerexpressionNãoID do provedor TTS. Use "openai" (embutido, padrão) ou "app:app_name:adapter_name" para um adaptador fornecido por app.
tts_voiceexpressionNãoID de voz específico do provedor (ex: "alloy", "nova").

Retorna: Um objeto de anexo com external_id para uso em mensagens audio().

Exemplo:

card SaySomething do
speech = ai_tts("Hello there!",
tts_provider: "openai",
tts_voice: "alloy",
tts_model: "gpt-4o-mini-tts"
)
audio(@(speech.external_id))
end

card UseAppVendor do
speech = ai_tts("Welcome",
tts_provider: "app:elevenlabs:default",
tts_voice: "Rachel",
tts_options: parse_json("""
{"stability": 0.5}
""")
)
audio(@(speech.external_id))
end

ai_text_classification()​

Classifica entrada do usuário em categorias predefinidas usando IA.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimO objeto de conexão de IA
optionsexpressionSimLista de opções de classificação
system_promptexpressionSimInstruções para classificação
user_inputexpressionSimO texto a classificar

Retorna: Resultado da classificação com a opção selecionada.

Exemplo:

card MyCard do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Classify user sentiment
result = ai_text_classification(
ai,
@(event.message.text),
"Classify the sentiment of this customer message",
["positive", "negative", "neutral"]
)

result when result == "negative" do
text("I'm sorry you're having trouble. Let me connect you with support.")
end

result when result == "positive" do
text("Great to hear! How else can I help?")
end
end

card LanguageDetection do
ai = ai_connect("openai", "gpt-4", @(secrets.openai_token))

# Detect the language of the message
language = ai_text_classification(
ai,
@(event.message.text),
"Detect the language of this text",
["english", "spanish", "french", "portuguese", "other"]
)
end

Notas: Retorna uma das opções fornecidas. Útil para roteamento, análise de sentimento, detecção de idioma e classificação de intent.


OpenAI (Legado)​

openai_add_image()​

Obsoleto

Adiciona uma imagem ao contexto OpenAI para uso com a API Vision.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão OpenAI
max_tokensexpressionSimMáximo de tokens para a resposta
messageexpressionSimPrompt de texto para a imagem
roleexpressionSimPapel da mensagem (tipicamente user)
urlexpressionSimURL da imagem

Retorna: Objeto de conexão atualizado com a mensagem de imagem adicionada.

Exemplo:

card MyCard do
openai = openai_add_image(openai, "user", "What's in this image?", @(image_url), 300)
end

openai_connect()​

Obsoleto: Use ai_connect() em vez disso.

Cria um objeto de conexão OpenAI para uso com outros blocos OpenAI.

Configuração:

CampoTipoObrigatórioDescrição
modelexpressionSimNome do modelo OpenAI (ex: gpt-4, gpt-3.5-turbo)
tokenexpressionSimToken de API OpenAI

Retorna: Um objeto de conexão com type, token, model, messages, functions, max_tokens e vendor.

Exemplo:

card MyCard do
openai = openai_connect(@(secrets.openai_token), "gpt-4")
end

openai_connect_assistant()​

Obsoleto: Use ai_assistant() em vez disso.

Cria uma conexão com um Assistente OpenAI usando o UUID da sessão como ID do thread.

Retorna: Um objeto de conexão com detalhes do thread do assistente.

Exemplo:

card MyCard do
openai = openai_connect_assistant()
end

openai_create_speech()​

Gera áudio de fala a partir de texto usando a API de text-to-speech da OpenAI.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão OpenAI
modelexpressionSimModelo TTS (tts-1 ou tts-1-hd)
textexpressionSimTexto para converter em fala
voiceexpressionSimVoz a usar (alloy, echo, fable, onyx, nova, shimmer)

Retorna: Um objeto de anexo com external_id para uso em mensagens de áudio.

Exemplo:

card MyCard do
openai = openai_connect(@(secrets.openai_token), "gpt-4")

# Generate speech from text
speech = openai_create_speech(openai, "Hello! How can I help you today?", "nova", "tts-1")

# Send the audio to the user
audio(@(speech.external_id))
end

card DynamicVoiceResponse do
openai = openai_connect(@(secrets.openai_token), "gpt-4")

# Use a variable for the text
speech = openai_create_speech(openai, @(ai_response), "alloy", "tts-1-hd")
audio(@(speech.external_id))
end

Notas: Vozes disponíveis: alloy, echo, fable, onyx, nova, shimmer. Modelos: tts-1 (mais rápido) ou tts-1-hd (maior qualidade).


openai_transcribe()​

Transcreve áudio para texto usando a API Whisper da OpenAI.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão OpenAI
languageexpressionSimCódigo do idioma (ex: en, es, fr)
promptexpressionSimPrompt para guiar a transcrição (pode ser string vazia)
urlexpressionSimURL do arquivo de áudio a transcrever

Retorna: Texto transcrito do arquivo de áudio.

Exemplo:

card MyCard do
openai = openai_connect(@(secrets.openai_token), "gpt-4")

# Transcribe audio from a voice message
transcription = openai_transcribe(openai, @(event.message.audio.url), "", "en")
text("You said: @(transcription)")
end

card WithPromptHint do
openai = openai_connect(@(secrets.openai_token), "gpt-4")

# Use a prompt to guide transcription (useful for domain-specific terms)
transcription = openai_transcribe(
openai,
@(event.message.audio.url),
"Medical terminology including diagnoses and prescriptions",
"en"
)
end

card SpanishTranscription do
openai = openai_connect(@(secrets.openai_token), "gpt-4")

# Transcribe Spanish audio
transcription = openai_transcribe(openai, @(event.message.audio.url), "", "es")
end

Notas: Usa o modelo Whisper da OpenAI. O prompt pode conter termos específicos do domínio para melhorar a precisão. Códigos de idioma seguem ISO 639-1 (en, es, fr, etc.).


Lelapa AI​

lelapa_connect()​

Cria uma conexão com os serviços de IA VulaVula da Lelapa.

Configuração:

CampoTipoObrigatórioDescrição
tokenexpressionSimToken de API Lelapa

Retorna: Um objeto de conexão com type e token.

Exemplo:

card MyCard do
# Create a Lelapa connection using your API token from secrets
lelapa = lelapa_connect(@(secrets.lelapa_token))

# Now use the connection with other Lelapa blocks
sentiment = lelapa_sentiment_analysis(lelapa, @(event.message.text))
end

lelapa_entity_recognition()​

Identifica entidades nomeadas (pessoas, locais, etc.) em texto usando NER da Lelapa.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão Lelapa
textexpressionSimTexto para analisar (máx 180 tokens)

Retorna: Lista de entidades com tipo de entidade, palavra, posições de início e fim.

Exemplo:

card MyCard do
lelapa = lelapa_connect(@(secrets.lelapa_token))
entities = lelapa_entity_recognition(lelapa, @(event.message.text))

# entities is a list like:
# [
# %{"entity" => "person", "word" => "Ramaphosa", "start" => 10, "end" => 19},
# %{"entity" => "location", "word" => "Emfuleni Municipality", "start" => 33, "end" => 54}
# ]
end

Notas: Suporta múltiplos idiomas sul-africanos. Limitado a 180 tokens por requisição. Tipos de entidade incluem: person, location, organization.


lelapa_intent_classification()​

Classifica entrada do usuário em intents especificadas com exemplos mínimos de treinamento.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão Lelapa
examplesexpressionSimLista de pares [intent, exemplo] para treinamento
inputexpressionSimTexto a classificar

Retorna: Mapa com value (intent), intent e score.

Exemplo:

card MyCard do
lelapa = lelapa_connect(@(secrets.lelapa_token))

# Provide examples for each intent (supports multiple languages)
result = lelapa_intent_classification(lelapa, @(event.message.text), [
["greeting", "Hello!"],
["greeting", "Hi there!"],
["greeting", "Habari yako?"],
["goodbye", "Goodbye!"],
["goodbye", "See you later!"],
["goodbye", "Kwaheri"]
])

# result contains:
# %{"__value__" => "greeting", "intent" => "greeting", "score" => 0.74}
text("Detected intent: @(result.intent) with confidence @(result.score)")
end

Notas: Suporta múltiplos idiomas com aprendizado few-shot. Forneça pelo menos 2-3 exemplos por intent para melhores resultados.


lelapa_sentiment_analysis()​

Analisa sentimento (positivo, negativo, neutro) em texto.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão Lelapa
textexpressionSimTexto para analisar

Retorna: Mapa com value (label), label, score, text e sentiments (para análise de múltiplas sentenças).

Exemplo:

card MyCard do
lelapa = lelapa_connect(@(secrets.lelapa_token))
sentiment = lelapa_sentiment_analysis(lelapa, @(event.message.text))

# sentiment contains:
# %{
# "__value__" => "positive",
# "label" => "positive",
# "score" => 0.99,
# "text" => "am happy",
# "sentiments" => [...] # detailed breakdown for multi-sentence text
# }

sentiment when sentiment.label == "negative" do
text("I'm sorry to hear that. How can I help?")
end
end

Notas: Labels são: positive, negative, neutral. Para texto com múltiplas sentenças, o array sentiments contém análise por sentença.


lelapa_translate()​

Traduz texto entre idiomas sul-africanos usando a API de tradução da Lelapa.

Configuração:

CampoTipoObrigatórioDescrição
connectionexpressionSimObjeto de conexão Lelapa
source_langexpressionSimCódigo do idioma de origem (ex: zul_Latn, eng_Latn)
target_langexpressionSimCódigo do idioma de destino
textexpressionSimTexto para traduzir

Retorna: Mapa com value (texto traduzido) e array translation.

Exemplo:

card MyCard do
lelapa = lelapa_connect(@(secrets.lelapa_token))

# Translate from Zulu to English
translated = lelapa_translate(lelapa, @(event.message.text), "zul_Latn", "eng_Latn")
# translated.__value__ = "This sentence is written in Zulu."

text("Translation: @(translated)")
end

card TranslateToZulu do
lelapa = lelapa_connect(@(secrets.lelapa_token))

# Translate from English to Zulu
translated = lelapa_translate(lelapa, "Hello, how are you?", "eng_Latn", "zul_Latn")
text(@(translated))
end

Notas: Códigos de idioma suportados: eng_Latn (Inglês), zul_Latn (Zulu), xho_Latn (Xhosa), afr_Latn (Africâner), nso_Latn (Soto do Norte), sot_Latn (Soto do Sul), tsn_Latn (Tswana).


Analytics​

track_event()​

Emite um evento de analytics para o ClickHouse para rastreamento de métricas.

Configuração:

CampoTipoObrigatórioDescrição
dimensionsmapNãoMapa opcional de nomes de dimensões para expressões, usado para filtragem/agrupamento
metric_namestringSimO nome da métrica a rastrear (ex.: "appointment/booked")

Retorna: Nenhum valor é retornado; é uma operação do tipo fire-and-forget.

Exemplo:

card TrackBooking do
track_event("appointment/booked")
end

card TrackWithDimensions do
track_event("csat/score/submitted",
clinic_id: clinic_id, doctor: "Frank"
)
end

Notas: Os eventos são enfileirados para inserção no ClickHouse. A jornada continua independentemente de a emissão do evento ser bem-sucedida.