Get Started
Preparing External Services
On this page
  1. Google Cloud (TTS and STT)
  2. OpenAI
  3. ElevenLabs
  4. Telegram Bot
  5. Firebase Realtime Database
  6. Choosing an Instrument from a SoundFont
  7. Fetching Weather Data

Preparing External Services

Some settings need a key or value issued by an external service. Here is how to obtain each of them.

ServiceValues to enter in GrabloUsed by
Google CloudAPI keyText-to-Speech, Speech-to-Text
OpenAIAPI keyText-to-Speech, Speech-to-Text, LLM AI
ElevenLabsAPI key, Voice IDText-to-Speech
TelegramBot token, chat IDTelegram Bot setting, Telegram Message action
FirebaseDatabase address, web API key, login accountDatabase
SoundFontBank and preset numbersSynthesizer action
Caution If an API key leaks, others can use it without permission and run up charges on your account. Do not publish issued keys, and if you suspect a leak, delete the key on the service and issue a new one.

Google Cloud (TTS and STT)

  1. Sign in to Google Cloud and click Console at the top right. Create a new project from the project selector at the top, and attach a payment method to it under Billing.
  2. Under APIs & Services, find and enable both Text-to-Speech API and Speech-to-Text API.Searching for text to speech and speech to text finds them.
  3. In APIs & Services > Credentials, choose + Create credentials → API key and copy the value.
  4. On the same screen, restrict the key to those two APIs.An unrestricted key can be used by every application and API in the project. Restricting it limits the damage if the key leaks.

OpenAI

  1. Sign in to the OpenAI platform (platform.openai.com), click + Create new secret key → Create secret key under Dashboard > API keys, and copy the value with Copy.The key value is shown only once when it is created, so copy it right away.
  2. Add a payment method and top up your balance under Settings > Billing > Payment methods.OpenAI's speech conversion has no free allowance, so a balance is required.

ElevenLabs

  1. Sign up on the ElevenLabs website, then open your account name at the bottom left and click API Keys → Create Key. Leave the name at its default, click Create, and copy the key value shown.
  2. In Voices, preview the voice you want, then click View → ID to copy its Voice ID.The API key alone does not complete the setting; the Voice ID is required too.

Telegram Bot

  1. Find BotFather in Telegram, start the chat with START, and send /newbot.
  2. Enter a display name for the bot, then a username.The username must end in bot and must not collide with another bot.
  3. Enter the issued token in Settings → Telegram Bot.
  4. Open the new bot's link to start a chat and press START.Without this step the bot cannot send you messages.
  5. Find @userinfobot in Telegram and start it to learn your chat ID. Enter that value in Action → Telegram Message.A chat ID is the unique number identifying the user, group, or channel that receives messages.

Firebase Realtime Database

  1. Create a new project in the Firebase console (Go to console). Enter a project name and click Continue, turn Google Analytics off, and click Create project.
  2. Choose Realtime Database from the product list and click Create Database. Select a database location and click Next, then choose Start in locked mode for the security rules.
  3. Copy the database address shown at the top of the screen with the link button.
  4. Under Authentication → Sign-in method, enable the method you want. For email and password access, switch on Enable for Email/Password, click Save, and add accounts on the Users tab (several accounts can be added); for access without a login, enable Anonymous under Add new provider.The sign-in method can be changed at any time later with Edit configuration.
  5. Click the gear icon next to Project Overview → Project settings → General, and copy the web API key.The web API key is needed for the controller to connect to the Firebase database server.
  6. On the Rules tab of Realtime Database, delete the existing content, paste the rules below, and click Publish.A database created in locked mode is closed to everyone. These rules open it to the users you allowed above.
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

Choosing an Instrument from a SoundFont

The Synthesizer setting takes a SoundFont file plus the bank and preset numbers that identify an instrument. Those numbers come from a SoundFont editor. Open the SoundFont (sf2, sf3) in an editor such as Polyphone, select an instrument in the Presets list, check the sound with the virtual keyboard, and enter the bank and preset values shown at the bottom of the screen.

Polyphone is available from polyphone.io. Expand the preset list with the arrow button, and open the virtual keyboard with the piano key icon at the top right. The values are used by the Synthesizer action.

Fetching Weather Data

Grablo has no dedicated weather action, so a weather API is called with the HTTP Communication action. With WeatherAPI.com, for example, sign up, find the API key on the dashboard, and request the following.

https://api.weatherapi.com/v1/forecast.json?key=API_KEY&q=Seoul&days=3&lang=en

The general form is as follows.

https://api.weatherapi.com/v1/forecast.DATATYPE?key=API_KEY&q=LOCATION&days=DAYS&lang=LANGUAGE
ItemDescription
DATATYPEjson or xml
keyThe API key shown on the WeatherAPI dashboard
qA city name (e.g. Seoul, Busan, Incheon, Daegu, Daejeon, Gwangju, Ulsan, Jeju, London), a latitude and longitude (e.g. 37.5665,126.9780), or auto:ip
daysNumber of forecast days. The maximum available depends on your plan.
langResponse language (e.g. en English, ko Korean, ja Japanese)

The values most often used from the response are below; extract them with the JSON blocks and store them in variables (Part 8).

PathValue
location.name, location.region, location.countryLocation name, region, country
location.tz_id, location.localtimeTime zone, local time
current.temp_cCurrent temperature in Celsius
current.humidityCurrent humidity (%)
current.is_day1 during the day, 0 at night
current.wind_kphCurrent wind speed (km/h)
current.condition.textCurrent conditions
forecast.forecastday[].dateForecast date
forecast.forecastday[].day.maxtemp_c, mintemp_cDaily high and low temperature
forecast.forecastday[].day.daily_chance_of_rainDaily chance of rain (%)
forecast.forecastday[].day.condition.textDaily conditions
forecast.forecastday[].astro.sunrise, sunsetSunrise and sunset times
forecast.forecastday[].hour[]Hourly forecast
Note Free allowances and pricing on external services change frequently. Check the current terms on each service's pricing page.