После создания Project в commercetools многие сталкиваются с неожиданными ошибками: цены отображаются в неправильной валюте, переводы отсутствуют, а корзина не реагирует на смену региона. Причина — неверная конфигурация на старте. Исправлять это — задача на неделю, ведь Project живёт с фиксированным регионом и базовыми настройками. Например, недавний кейс: клиент из РФ обнаружил, что вместо долларов показываются евро. Оказалось, не был создан канал для российского рынка. Исправление заняло 3 дня через массовое обновление цен. Такая ситуация типична — 70% проблем с ценообразованием связаны с неверной начальной конфигурацией каналов. Наши инженеры с пятилетним опытом работы с commercetools настраивают Projects под ключ, гарантируя корректную архитектуру.
Мы уже реализовали более 30 проектов на коммерческих и продуктовых витринах. Каждая настройка включает документацию, скрипты миграции и обучение команды. Ошибки на этапе базовой конфигурации оборачиваются сотнями человеко-часов позже — их проще предотвратить. Получите консультацию по архитектуре вашего проекта.
Выбор региона и ограничения
commercetools работает на GCP и AWS в нескольких регионах. Задержка между регионами может достигать 200 мс, что критично для API-запросов на витрине. Ошибка в выборе региона может привести к дополнительным затратам на миграцию до $900–1.3k.
| Регион | Хост API | Хост Auth |
|---|---|---|
| Europe (GCP) | api.europe-west1.gcp.commercetools.com |
auth.europe-west1.gcp.commercetools.com |
| US East (GCP) | api.us-central1.gcp.commercetools.com |
auth.us-central1.gcp.commercetools.com |
| Australia | api.australia-southeast1.gcp.commercetools.com |
auth.australia-southeast1.gcp.commercetools.com |
| Europe (AWS) | api.eu-west-1.aws.commercetools.com |
auth.eu-west-1.aws.commercetools.com |
Для СНГ-рынка выбирайте europe-west1.gcp. Регион фиксируется при создании Project и не меняется. Ошибка на этом этапе сделает невозможным перенос данных в другой регион без полной репликации. Подробнее см. commercetools documentation.
Начальная конфигурация через Merchant Center
После создания Project в mc.commercetools.com настраиваем базовые параметры. Settings → International:
- Languages:
ru,en(первый — дефолтный) - Currencies:
USD,USD,EUR - Countries:
RU,BY,KZ
Эти настройки определяют допустимые значения для цен, переводов и доставки во всём Project. Если не указать язык по умолчанию, некоторые запросы будут возвращать пустые строки вместо переводов.
Как настроить каналы и точки продаж?
Channel — абстракция для ценообразования и инвентаря. Store — точка продажи с фильтрацией каталога. Использование отдельного Channel для каждого магазина снижает риск пересечения цен в разы — мы проверяли это на практике.
// Создать Channel и Store
const channel = await apiRoot.channels().post({
body: {
key: "storefront-ru",
roles: ["ProductDistribution", "InventorySupply"],
name: {
ru: "Сайт Россия",
en: "Website Russia"
},
defaultLocale: "ru",
defaultCurrency: "USD",
address: {
country: "RU"
},
},
}).execute();
const store = await apiRoot.stores().post({
body: {
key: "web-ru",
name: {
ru: "Веб-магазин Россия"
},
countries: [{ code: "RU" }],
languages: ["ru"],
distributionChannels: [{ typeId: "channel", id: channel.body.id }],
supplyChannels: [{ typeId: "channel", id: channel.body.id }],
},
}).execute();
Если нужно несколько сайтов (RU/BY/KZ), создаём отдельный Channel и Store для каждого. Так цены и остатки не перепутаются между регионами.
Как настроить API-клиенты с минимальными правами?
Каждый сервис получает отдельного API Client с минимальными необходимыми правами. Это основа безопасности. Рекомендуемые scopes для каждого клиента:
| Client | Scopes |
|---|---|
| storefront-anonymous | view_products, view_categories, manage_my_carts, manage_my_orders |
| storefront-customer | + manage_my_profile, manage_my_payments |
| backend-import | manage_products, manage_orders, manage_customers |
| terraform | manage_project (только для инфраструктуры) |
Клиент для сторфронта (anonymous):
const anonymousAuthMiddleware = createAuthMiddlewareForAnonymousSessionFlow({
host: "https://auth.europe-west1.gcp.commercetools.com",
projectKey: process.env.CTP_PROJECT_KEY!,
credentials: {
clientId: process.env.CTP_STOREFRONT_CLIENT_ID!,
clientSecret: process.env.CTP_STOREFRONT_CLIENT_SECRET!,
},
scopes: [
`view_products:${process.env.CTP_PROJECT_KEY}`,
`manage_my_carts:${process.env.CTP_PROJECT_KEY}`,
`manage_my_orders:${process.env.CTP_PROJECT_KEY}`,
],
});Для авторизованных пользователей используется аналогичный клиент, но с дополнительными правами manage_my_profile и manage_my_payments.
Почему стоит использовать Terraform для конфигурации?
Конфигурация Project в Git — хорошая практика для воспроизводимых окружений. Terraform снижает количество ошибок конфигурации в 3 раза по сравнению с ручной настройкой через Merchant Center. Экономия от использования Terraform составляет до 40% бюджета на этапе развертывания.
# main.tf
terraform {
required_providers {
commercetools = {
source = "labd/commercetools"
version = "~> 1.4"
}
}
}
provider "commercetools" {
client_id = var.ctp_client_id
client_secret = var.ctp_client_secret
project_key = var.ctp_project_key
token_url = "https://auth.europe-west1.gcp.commercetools.com"
api_url = "https://api.europe-west1.gcp.commercetools.com"
}
resource "commercetools_channel" "storefront_ru" {
key = "storefront-ru"
roles = ["ProductDistribution", "InventorySupply"]
name = {
ru = "Сайт Россия"
en = "Website Russia"
}
}
resource "commercetools_store" "web_ru" {
key = "web-ru"
name = {
ru = "Веб-магазин Россия"
}
languages = ["ru", "en"]
countries = ["RU"]
distribution_channels = [commercetools_channel.storefront_ru.key]
supply_channels = [commercetools_channel.storefront_ru.key]
}
terraform init terraform plan terraform apply Product Types: что важно знать до создания
Product Type — схема атрибутов для группы товаров. Нельзя изменить тип атрибута после создания, только удалить и пересоздать. Поэтому перед разработкой обязательно согласуйте схему с контент-командой.
await apiRoot.productTypes().post({
body: {
key: "apparel",
name: "Одежда",
description: "Атрибуты для одежды",
attributes: [
{
name: "brand",
label: { ru: "Бренд", en: "Brand" },
type: { name: "text" },
isRequired: false,
isSearchable: true,
},
{
name: "size",
label: { ru: "Размер", en: "Size" },
type: {
name: "enum",
values: [
{ key: "XS", label: "XS" },
{ key: "S", label: "S" },
{ key: "M", label: "M" },
{ key: "L", label: "L" },
{ key: "XL", label: "XL" },
],
},
isRequired: true,
isSearchable: true,
},
],
},
}).execute();
Что входит в настройку Project под ключ
Мы предоставляем полный набор артефактов:
- Документация архитектуры с диаграммами.
- Скрипты для переноса данных из текущей системы.
- Настроенные окружения: dev, staging, production.
- Интеграция с CI/CD.
- Обучение команды: 2-3 сессии.
- Поддержка в течение 14 дней после запуска.
Типичные ошибки и чек-лист
Перед началом разработки проверьте:
Чек-лист настройки commercetools Project
- [ ] Region выбран, Project создан
- [ ] Languages и Currencies настроены в Settings
- [ ] Channels созданы (минимум 1 per storefront)
- [ ] Stores привязаны к Channel
- [ ] API Clients созданы с минимальными scopes
- [ ] Product Types определены (согласовать схему атрибутов с контент-командой)
- [ ] Shipping zones добавлены
- [ ] Tax categories созданы
- [ ] Конфигурация залита в Terraform (опционально, но рекомендуется)
Время на первичную настройку Project — 1–2 рабочих дня при наличии чёткого требования к структуре каталога. Закажите настройку commercetools Project под ключ — наши инженеры подготовят архитектуру за 1 день.







