Prefetch Reducer
Overview
Prefetch Reducers are used to dynamically populate a Slack Select Menu for Prompt Fields marked with prefetch = True
. Each Prompt Field marked with prefetch = True
must have a corresponding Prefetch Reducer, and there may be exactly one Prefetch Reducer for a given Prompt Field.
A Prefetch Reducer must return a list of FieldOptions, where a FieldOption
defines a given item to be displayed in Slack.
The list of FieldOption
returned by your reducer will dictate the allowed values a requester may select from for that Prompt Field. When filling out the request form, the requester's input will be used to search for a FieldOption
whose label contains the input value.
Prefetch Reducer Limits
Prefetch Reducers may return up to a maximum of 1000 items. If your reducer returns more than 1000 items, your Flow will terminate with an error.
Prefetch Reducers are run before displaying the request form to users. If your reducer is slow, it may impact the performance of your requests!
Prefetch reducers will be validated at runtime, and not during
terraform apply
. If there is a missing or duplicate prefetch reducer, an error will be raised as the user makes the request in Slack.

A demo of a Prompt Field that returns Pokemon names as FieldOptions
Examples
Given the following Prompt Field definition:
prompt_field {
name = "pokemon"
label = "What Pokemon do you want?"
type = "string"
prefetch = true
required = true
}
You would define the following Prefetch Reducer:
import requests
from sym.sdk.annotations import prefetch
@prefetch(field_name="pokemon")
def get_pokemon(evt) -> List[FieldOption]:
# Make an API Call or even invoke an AWS Lambda
response = requests.get(url="https://pokeapi.co/api/v2/pokemon?limit=100")
all_pokemon = response.json()["results"]
# Return a list of FieldOption
return [
FieldOption(value=pokemon["name"], label=pokemon["name"].upper())
for pokemon
in all_pokemon
]
Updated 3 months ago