# VK (VKontakte)

The VK channel uses Bots Long Poll API for bot-based communication with VK social network. It supports text messages, media attachments (photos, videos, audio, documents, stickers), and group chat interactions.

## Configuration

```json
{
  "channel_list": {
    "vk": {
      "enabled": true,
      "type": "vk",
      "token": "NOT_HERE",
      "group_id": 123456789,
      "allow_from": ["123456789"],
      "group_trigger": {
        "mention_only": false,
        "prefixes": ["/bot", "!bot"]
      }
    }
  }
}
```

| Field            | Type   | Required | Description                                                        |
| ---------------- | ------ | -------- | ------------------------------------------------------------------ |
| enabled          | bool   | Yes      | Whether to enable the VK channel                                   |
| token            | string | Yes      | Set to `NOT_HERE` - token is stored securely (see Token Storage)   |
| group_id         | int    | Yes      | VK Community ID (Group ID)                                         |
| allow_from       | array  | No       | Allowlist of user IDs; empty means all users are allowed           |
| group_trigger    | object | No       | Configuration for group chat triggers                              |

### Token Storage

For security reasons, the VK access token should not be stored directly in the configuration file. Instead:

1. Set `token` to `"NOT_HERE"` in the configuration
2. Store the actual token using one of these methods:
   - **Environment variable**: Set `PICOCLAW_CHANNELS_VK_TOKEN` environment variable
   - **Secure storage**: Use PicoClaw's secure token storage mechanism

Example using environment variable:
```bash
export PICOCLAW_CHANNELS_VK_TOKEN="vk1.a.abc123..."
```

### Group Trigger Configuration

| Field        | Type     | Description                                                        |
| ------------ | -------- | ------------------------------------------------------------------ |
| mention_only | bool     | Only respond when bot is mentioned in group chats                  |
| prefixes     | []string | List of prefixes that trigger bot response in group chats          |

## Setup

### 1. Create a VK Community

1. Go to [VK](https://vk.com) and log in
2. Create a new community or use an existing one
3. Note your Community ID (found in the community URL, e.g., `public123456789`)

### 2. Enable Messages

1. Go to your community page
2. Click "Manage" → "Messages" → "Community Messages"
3. Enable community messages

### 3. Create Access Token

1. Go to "Manage" → "API usage" → "Access tokens"
2. Click "Create token"
3. Select the following permissions:
   - `messages` - Access to messages
   - `photos` - Access to photos (optional)
   - `docs` - Access to documents (optional)
4. Copy the generated access token
5. Store the token securely (see Token Storage section below)

### 4. Configure PicoClaw

1. Add the token to your PicoClaw configuration
2. Set the `group_id` to your community ID (numeric value)
3. (Optional) Configure `allow_from` to restrict which user IDs can interact

## Features

### Supported Message Types

- **Text messages**: Full support for text messages
- **Photos**: Photos are displayed as `[photo]` placeholder
- **Videos**: Videos are displayed as `[video]` placeholder
- **Audio**: Audio files are displayed as `[audio]` placeholder
- **Voice messages**: Voice messages are displayed as `[voice]` placeholder and support transcription
- **Documents**: Documents are displayed as `[document: filename]`
- **Stickers**: Stickers are displayed as `[sticker]` placeholder

### Voice Support

The VK channel supports both voice message reception and text-to-speech capabilities:

- **ASR (Automatic Speech Recognition)**: Voice messages can be transcribed to text using configured voice models
- **TTS (Text-to-Speech)**: Text responses can be converted to voice messages

To enable voice transcription, configure a voice model in your providers setup. See [Voice Transcription](../../guides/providers.md#voice-transcription) for details.

### Group Chat Support

The VK channel supports group chats with configurable triggers:

- **Mention-only mode**: Bot only responds when mentioned
- **Prefix mode**: Bot responds to messages starting with specified prefixes
- **Permissive mode**: Bot responds to all messages (default)

### Message Length

VK has a maximum message length of 4000 characters. PicoClaw automatically splits longer messages into multiple parts.

## Example Configuration

### Basic Configuration

```json
{
  "channel_list": {
    "vk": {
      "enabled": true,
      "type": "vk",
      "token": "NOT_HERE",
      "group_id": 123456789
    }
  }
}
```

### With User Whitelist

```json
{
  "channel_list": {
    "vk": {
      "enabled": true,
      "type": "vk",
      "token": "NOT_HERE",
      "group_id": 123456789,
      "allow_from": ["123456789", "987654321"]
    }
  }
}
```

### With Group Chat Triggers

```json
{
  "channel_list": {
    "vk": {
      "enabled": true,
      "type": "vk",
      "token": "NOT_HERE",
      "group_id": 123456789,
      "group_trigger": {
        "prefixes": ["/bot", "!bot"]
      }
    }
  }
}
```

## Troubleshooting

### Bot Not Responding

1. Check that the access token is valid
2. Verify that the `group_id` is correct
3. Ensure the user ID is in `allow_from` if configured
4. Check PicoClaw logs for error messages

### Permission Errors

Make sure the access token has the necessary permissions:
- `messages` - Required for sending and receiving messages
- `photos` - Optional, for handling photo attachments
- `docs` - Optional, for handling document attachments

### Group Chat Issues

If the bot doesn't respond in group chats:
1. Check `group_trigger` configuration
2. Try using a prefix to trigger the bot
3. Check if the bot has permission to read group messages

## API Reference

The VK channel uses the [VK SDK for Go](https://github.com/SevereCloud/vksdk) library, which supports VK API version 5.199.

For more information about VK API, see:
- [VK API Documentation](https://dev.vk.com/en)
- [VK Bots Long Poll API](https://dev.vk.com/en/api/bots-long-poll/getting-started)
