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.

Controle

wait()

Pausa a execução da jornada por uma duração especificada antes de continuar para o próximo bloco.

Configuração:

CampoTipoObrigatórioDescrição
secondsinteger | expressionSimNúmero de segundos para aguardar

Retorna: Nenhum valor é retornado; o bloco apenas introduz um atraso.

Exemplo:

card MyCard do
# Wait for 5 seconds before continuing
wait(5)
text("This message appears after the delay")
end

card PacedConversation do
text("Let me check that for you...")
wait(3)
text("Here's what I found!")
end

Notas: Útil para espaçar mensagens, simular atrasos de digitação ou limitar a taxa de envio.


Whatsapp

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

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.


get() / post() / ...

Faz uma requisição HTTP para uma URL externa e armazena a resposta no contexto da jornada.

Configuração:

CampoTipoObrigatórioDescrição
bodystring | listNãoCorpo da requisição (string para JSON, lista de pares para form data)
cache_ttlintegerNãoTTL do cache em milissegundos (padrão: 60000)
headerslistSimLista de pares [chave, valor] para cabeçalhos HTTP
methodstringSimMétodo HTTP: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, TRACE
modestringSimsync (aguarda resposta) ou async (dispara e esquece)
querylistNãoLista de pares [chave, valor] para parâmetros de query
timeoutintegerSimTimeout da requisição em milissegundos (máx 20000)
urlexpressionSimA URL a chamar (suporta expressões)

Retorna: Um mapa com url (URL requisitada), status (código de status HTTP), body (corpo da resposta, parseado como JSON se aplicável), headers, query e mode.

Exemplo:

card MyCard do
# Simple GET request
response = get("https://api.example.com/users")

# GET with query parameters and custom timeout
response = get("https://api.example.com/search",
query: [["q", "@(contact.name)"], ["limit", "10"]],
headers: [["Authorization", "Bearer @(secrets.api_token)"]],
timeout: 10000
)

# POST with JSON body
response = post("https://api.example.com/data",
body: %{name: @(contact.name), phone: @(contact.urn)},
headers: [
["Content-Type", "application/json"],
["Authorization", "Bearer @(secrets.api_token)"]
]
)

# POST with plain text body
response = post("https://api.example.com/log",
body: "User @(contact.name) completed action",
headers: [["Content-Type", "text/plain; charset=utf-8"]]
)

# Fire-and-forget async request (doesn't wait for response)
post("https://api.example.com/events",
body: %{event: "user_action"},
headers: [["Content-Type", "application/json"]],
mode: "async"
)

# Access response fields
text("Status: @(response.status)")
text("Body: @(response.body)")
end

# Branching based on response status
card CheckStatus, then: HandleResponse do
response = get("https://api.example.com/status")
end

card HandleResponse when response.status == 200 do
text("Success: @(response.body.message)")
end

card HandleResponse when response.status != 200 do
text("Error: @(response.body)")
end

Notas: Métodos HTTP suportados: get(), post(), put(), patch(), delete(), head(), options(), trace(). Timeout padrão é 5 segundos, máximo é 20 segundos. Modo padrão é sync.


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
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 ou 'continue_conversation'), response (texto da IA para exibir), status (código HTTP) e error (booleano).

Exemplo:

# Padrão de loop de conversa do agente
# O card do agente chama a si mesmo para criar uma conversa multi-turno

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"}
]
""")

# 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")

# Display the agent's response and wait for user input
ask("@agent_result.response")

# Loop back to continue the conversation
then(Agent when agent_result.action == "continue_conversation")
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

Notas: Crie loops de conversa fazendo o card do agente chamar a si mesmo quando action for 'continue_conversation'. Use ask() para exibir a resposta e aguardar entrada do usuário. Ações embutidas: submit_recognized_intent() dispara roteamento de intent, end_conversation() encerra o 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_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_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: Use ai_add_image() em vez disso.

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).