Быстрый старт
Полный минимальный путь
От создания бота до первого интерактивного ответа потребуется восемь шагов.
- Создать бота.
- Получить токен.
- Настроить webhook.
- Проверить подпись.
- Получить /start.
- Отправить ответ.
- Добавить кнопку.
- Протестировать в Key Chat.
Создать бота
Откройте раздел «Боты» в Key Chat, нажмите «Добавить бота» и задайте имя, username и описание. Username должен заканчиваться на _bot.
Получить токен
После создания выпустите токен. Он показывается только один раз — храните его как секрет и никогда не передавайте клиентскому приложению.
Настроить webhook
В редакторе созданного бота укажите публичный HTTPS URL и сохраните настройки. Key Chat покажет signing secret вида kcwhsec_… только один раз — скопируйте его на сервер в KEYCHAT_WEBHOOK_SECRET.
Key Chat отправляет события минимум один раз, поэтому обработчик должен дедуплицировать их по id. Кнопка «Сменить секрет» немедленно отзывает старый секрет; обычное включение или выключение webhook его не меняет.
Проверить подпись
Проверяйте X-KeyChat-Timestamp и HMAC SHA-256 из X-KeyChat-Signature до разбора и обработки события.
Получить /start
После добавления бота приходит событие message.created с командой /start и новым session_id.
Отправить ответ
Отправьте сообщение через Runtime API, используя chat_id из события и токен бота.
curl -X POST https://chat.wokey.pro/_keychat/v1/bot/messages \
-H "Authorization: Bearer $KEYCHAT_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"chat_id":"<chat_id>","content":{"text":"Привет!"},"idempotency_key":"hello-001"}'Протестировать в Key Chat
Добавьте бота в свой список чатов. Для проверки платформы также доступен @echo_bot — он возвращает каждое полученное сообщение.
Практика с SDK
Начинайте с минимального обработчика message.created и добавляйте остальные события постепенно. Храните bot token и webhook secret в переменных окружения, а публичный webhook проверяйте тестовым событием из редактора бота.
Первый успешный ответ должен использовать chat_id из входящего события. Не сохраняйте display_name или username как ключи: для связей используйте UUID и session_id.
Примеры использования
await bot.sendMessage({
chat_id: chatId,
content: { text: '**Ready**', format: 'markdown' },
idempotency_key: crypto.randomUUID()
});