-record(dialog_builder, { id :: binary(), windows :: list(telega@dialog@types:window(any(), any(), any(), any())), initial :: gleam@option:option(binary()), initial_state :: fun(() -> any()), encode_state :: fun((any()) -> binary()), decode_state :: fun((binary()) -> {ok, any()} | {error, nil}), on_done :: gleam@option:option(fun((any(), telega@bot:context(any(), any(), any())) -> {ok, telega@bot:context(any(), any(), any())} | {error, any()})), subs :: list(telega@dialog:sub_attachment(any(), any(), any())), sub_result_hooks :: list({binary(), fun((any(), gleam@dict:dict(binary(), binary()), telega@bot:context(any(), any(), any())) -> {ok, telega@dialog@types:dialog_action(any())} | {error, any()})}), storage :: telega@flow@types:flow_storage(any()), ttl_ms :: gleam@option:option(integer()), labels :: fun((telega@bot:context(any(), any(), any())) -> telega@dialog@types:labels()) }).