> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vzaps.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TypeBot

> Configurar TypeBot e gerenciar sessões com o SDK Go

Use `client.Typebots` para integrar fluxos TypeBot com uma instância VZaps.

Campos comuns em toda chamada:

| Campo           | Tipo     | Obrigatório | Descrição           |
| --------------- | -------- | ----------- | ------------------- |
| `InstanceID`    | `string` | Sim         | ID da instância.    |
| `InstanceToken` | `string` | Sim         | Token da instância. |

## `Typebots.List(ctx, instanceID, options)`

Lista TypeBots configurados na instância.

```go theme={null}
typebots, err := client.Typebots.List(ctx, "VZ...", vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
fmt.Printf("%#v\n", typebots)
```

**Retorno:** lista/array de configuracoes TypeBot da instancia (IDs, gatilhos, prioridade, etc.).

## `Typebots.Create(ctx, req)`

Cria configuração de TypeBot.

```go theme={null}
created, err := client.Typebots.Create(ctx, vzaps.TypebotRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	Enabled:         true,
	Description:     "Fluxo de boas-vindas",
	TypebotURL:      "https://typebot.io",
	PublicID:        "my-public-flow",
	TriggerType:     "keyword",
	TriggerValue:    "hello",
	Priority:        10,
	ExpireInMinutes: 30,
	KeywordFinish:   "exit",
	DefaultDelayMs:  800,
	UnknownMessage:  "Desculpe, não entendi. Pode reformular?",
	TranscribeAudio: true,
	ListenFromMe:    false,
	StopBotFromMe:   true,
	KeepOpen:        false,
	DebounceMs:      1500,
	IgnoreGroups:    false,
})
fmt.Printf("%#v\n", created)
```

**Retorno:** configuracao criada, incluindo `typebot_id` para updates posteriores.

Principais campos do payload:

| Campo (JSON)        | Campo Go          | Obrigatório | Descrição                                                                   |
| ------------------- | ----------------- | ----------- | --------------------------------------------------------------------------- |
| `enabled`           | `Enabled`         | Sim         | Habilita ou desabilita avaliação de gatilho.                                |
| `description`       | `Description`     | Sim         | Nome de exibição da configuração.                                           |
| `typebot_url`       | `TypebotURL`      | Sim         | URL base do TypeBot.                                                        |
| `public_id`         | `PublicID`        | Sim         | Identificador público do fluxo.                                             |
| `trigger_type`      | `TriggerType`     | Sim         | `all`, `keyword`, `contains`, `starts_with`, `regex`, `advanced` ou `none`. |
| `trigger_value`     | `TriggerValue`    | Condicional | Texto ou regex do gatilho.                                                  |
| `trigger_operator`  | `TriggerOperator` | Condicional | Usado quando `TriggerType` é `advanced`.                                    |
| `priority`          | `Priority`        | Sim         | Ordem de avaliação. Valor maior primeiro.                                   |
| `expire_in_minutes` | `ExpireInMinutes` | Sim         | Expiração da sessão após inatividade. `0` = sem expiração.                  |

## `Typebots.Update(ctx, req)`

Atualiza TypeBot existente. Passe `TypebotID` do create ou list.

```go theme={null}
_, err := client.Typebots.Update(ctx, vzaps.TypebotMutationRequest{
	TypebotRequest: vzaps.TypebotRequest{
		InstanceScopedRequest: vzaps.InstanceScopedRequest{
			InstanceID:    "VZ...",
			InstanceToken: "instance-token",
		},
		Enabled:         true,
		Description:     "Fluxo de boas-vindas atualizado",
		TriggerType:     "contains",
		TriggerValue:    "help",
		Priority:        20,
		ExpireInMinutes: 60,
	},
	TypebotID: "550e8400-e29b-41d4-a716-446655440000",
})
```

**Retorno:** configuracao atualizada ou `{ status: "ok" }`.

## `Typebots.Delete(ctx, req)`

Remove configuração e suas sessões.

```go theme={null}
_, err := client.Typebots.Delete(ctx, vzaps.TypebotMutationRequest{
	TypebotRequest: vzaps.TypebotRequest{
		InstanceScopedRequest: vzaps.InstanceScopedRequest{
			InstanceID:    "VZ...",
			InstanceToken: "instance-token",
		},
	},
	TypebotID: "550e8400-e29b-41d4-a716-446655440000",
})
```

**Retorno:** confirmacao de remocao (`{ status: "ok" }` ou mensagem equivalente).

## `Typebots.StartSession(ctx, req)`

Inicia sessão manualmente com um contato.

Por `PublicID`:

```go theme={null}
_, err := client.Typebots.StartSession(ctx, vzaps.TypebotStartSessionRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	PublicID:  "support",
	Phone:     "5511999999999",
	PushName:  "Cliente",
	Message:   "Preciso de ajuda",
})
```

**Retorno:** sessao iniciada (UUID da sessao, contato, status `opened`).

Por `TypebotID`:

```go theme={null}
_, err := client.Typebots.StartSession(ctx, vzaps.TypebotStartSessionRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	TypebotID: "550e8400-e29b-41d4-a716-446655440000",
	Phone:     "5511999999999",
	Message:   "Preciso de ajuda",
})
```

| Campo (JSON) | Campo Go    | Obrigatório | Descrição                                                      |
| ------------ | ----------- | ----------- | -------------------------------------------------------------- |
| `public_id`  | `PublicID`  | Condicional | Identificador público do fluxo. Use `PublicID` ou `TypebotID`. |
| `typebot_id` | `TypebotID` | Condicional | ID interno do TypeBot.                                         |
| `phone`      | `Phone`     | Sim         | Telefone do contato.                                           |
| `message`    | `Message`   | Sim         | Mensagem inicial enviada ao fluxo.                             |
| `push_name`  | `PushName`  | Não         | Nome de exibição do contato.                                   |

## `Typebots.ListSessions(ctx, instanceID, options)`

Lista sessões ativas e encerradas.

```go theme={null}
sessions, err := client.Typebots.ListSessions(ctx, "VZ...", vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
fmt.Printf("%#v\n", sessions)
```

**Retorno:** lista de sessoes (`opened`, `paused`, `closed`) por contato/flow.

## `Typebots.PauseSession(ctx, req)`

Pausa sessão aberta. Passe UUID da sessão em `Session`.

```go theme={null}
_, err := client.Typebots.PauseSession(ctx, vzaps.TypebotSessionRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	Session: "550e8400-e29b-41d4-a716-446655440001",
})
```

**Retorno:** sessao com status `paused`.

## `Typebots.CloseSession(ctx, req)`

Encerra sessão manualmente.

Por UUID da sessão:

```go theme={null}
_, err := client.Typebots.CloseSession(ctx, vzaps.TypebotSessionRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	Session: "550e8400-e29b-41d4-a716-446655440001",
})
```

**Retorno:** sessao encerrada (`closed`) ou confirmacao por telefone.

Por telefone do contato (encerra todas as sessões ativas desse número):

```go theme={null}
_, err := client.Typebots.CloseSession(ctx, vzaps.TypebotSessionRequest{
	InstanceScopedRequest: vzaps.InstanceScopedRequest{
		InstanceID:    "VZ...",
		InstanceToken: "instance-token",
	},
	Session: "5511999999999",
})
```
