Розробка кастомних Contentful Apps (розширень)

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка кастомних Contentful Apps (розширень)
Середня
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка спеціальних Contentful Apps (розширень)

Contentful Apps — це механізм розширення інтерфейсу редактора через iframe-застосунки, які монтуються у поля, бічні панелі або цілі екрани. Це не просто UI-віджети: через Contentful App SDK застосунок отримує доступ до Entry API, Space API та може запускати App Actions — серверні функції, виконувані в контексті Contentful.

Архітектура Contentful App

Кожен застосунок складається з двох частин: фронтенду (React/Vue/Vanilla JS, розміщений будь-де) та опціонального App Backend (AWS Lambda або будь-який HTTP-endpoint для App Actions та Events). Обидві реєструються в App Definition через Contentful Management API або Web App.

App Definition
  ├── Locations: field, sidebar, entry-editor, page, home
  ├── Parameters: instance params (per-field) + installation params (per-space)
  └── App Actions: serverless functions callable from UI or API

Типові сценарії:

  • Спеціальний field editor — наприклад, колірний пікер, пов'язаний з дизайн-токенами з Figma
  • Sidebar extension — панель SEO-аналізу, яка читає поля Entry у реальному часі
  • Page location — повноекранний Asset Manager з інтеграцією Cloudinary
  • App Actions — генерування AI-описань через OpenAI при збереженні Entry

Розробка Field Extension

Ініціалізація SDK:

import { init, FieldExtensionSDK } from '@contentful/app-sdk';

init((sdk: FieldExtensionSDK) => {
  // Читаємо поточне значення поля
  const value = sdk.field.getValue();

  // Підписуємося на зміни з зовнішніх джерел
  sdk.field.onValueChanged((newValue) => {
    setFieldValue(newValue);
  });

  // Оновлюємо значення
  sdk.field.setValue({ color: '#ff5500', token: 'brand-primary' });

  // Авторесайз iframe під контент
  sdk.window.startAutoResizer();
});

Для React-застосунків зручніше @contentful/react-apps-toolkit:

import { useSDK, useFieldValue } from '@contentful/react-apps-toolkit';

const ColorPickerField = () => {
  const sdk = useSDK<FieldExtensionSDK>();
  const [value, setValue] = useFieldValue<string>();

  return (
    <ColorPicker
      value={value}
      onChange={(color) => setValue(color.hex)}
      tokens={sdk.parameters.installation.designTokens}
    />
  );
};

App Actions (серверна логіка)

App Actions дозволяють запускати серверний код з інтерфейсу Contentful без спеціального бекенду — Contentful проксирує виклик до зареєстрованого endpoint:

// Реєстрація App Action в App Definition (через CMA)
// callType: "request" | "event"
// url: https://your-backend.com/actions/generate-seo

// Виклик з фронтенд-застосунку
const result = await sdk.cma.appAction.callById({
  spaceId: sdk.ids.space,
  environmentId: sdk.ids.environment,
  appDefinitionId: sdk.ids.app,
  appActionId: 'generate-seo',
  parameters: {
    entryId: sdk.ids.entry,
    locale: sdk.locales.default,
  },
});

На стороні сервера (Node.js/Express):

app.post('/actions/generate-seo', async (req, res) => {
  // Верифікуємо підпис Contentful
  verifySignature(req.headers['x-contentful-signature'], req.body);

  const { entryId, locale } = req.body.parameters;
  const entry = await cma.entry.get({ entryId });

  const seoData = await openai.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: buildSeoPrompt(entry, locale) }],
  });

  res.json({ result: { seoTitle: seoData.choices[0].message.content } });
});

Параметри установки та конфігурація

Параметри установки задаються один раз при інсталяції застосунку в Space. Через них передаються API-ключі, токени, конфіги — без hardcode у коді застосунку:

// Екран налаштувань застосунку
const ConfigScreen = () => {
  const sdk = useSDK<AppExtensionSDK>();
  const [params, setParams] = useState(sdk.parameters.installation);

  sdk.app.onConfigure(() => ({
    parameters: params,
    targetState: {
      EditorInterface: {
        // Автоматично підключити до полів типу Symbol
        controls: [{ fieldId: 'seoTitle', widgetId: sdk.ids.app }],
      },
    },
  }));
};

Збірка та розгортання

Contentful надає CLI для локальної розробки та розгортання:

# Створення нового застосунку за шаблоном
npx create-contentful-app@latest my-app --template typescript

# Локальна розробка з туннелем
npm run start  # запускає на localhost:3000
contentful-app-scripts activate  # тимчасово реєструє localhost в App Definition

# Розгортання на Contentful-хостинг (безплатно для Apps)
npm run build
contentful-app-scripts upload  # загружує dist/ до Contentful CDN

Терміни та обсяг

Тип розширення Складність Час розробки
Простий field editor (пікер, слайдер) Низька 1–2 дні
Sidebar з зовнішнім API Середня 3–5 днів
Page location (повний екран) Висока 1–2 тижні
App Actions + серверний бекенд Висока 1–2 тижні
Повнофункціональний застосунок з конфіг-екраном Висока 2–3 тижні

Під час розробки обов'язково покриваємо тестами з @contentful/app-sdk mock-об'єктами та налаштовуємо CI для автоматичного розгортання через contentful-app-scripts upload.