Розробка інтерфейсу чат-бота на Vue.js для Бітрікс24

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка інтерфейсу чат-бота на Vue.js для Бітрікс24
Середня
~1-2 тижні
Часті питання

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

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

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка інтерфейсу чат-бота на Vue.js для Бітрікс24

Чат-боти у Бітрікс24 працюють через два канали: відкриті лінії (зовнішні месенджери) та внутрішній чат (im). Серверна частина бота — це обробник подій, який приймає повідомлення через event.message.add webhook і відповідає через imbot.message.add. Стандартний інтерфейс налаштування бота — це адміністративна сторінка з полями введення. Коли потрібен повноцінний UI керування ботом: налаштування сценаріїв, візуальний конструктор відповідей, аналітика діалогів — розробляється Vue-застосунок, вбудований у Бітрікс24 через placement або як окрема адміністративна панель.

Архітектура системи бота з Vue-інтерфейсом

┌─────────────────────────────────────────┐
│         Бітрікс24 Портал                │
│  ┌─────────────┐   ┌─────────────────┐  │
│  │  Відкрита   │   │  Vue Admin App  │  │
│  │   лінія     │   │  (placement)    │  │
│  └──────┬──────┘   └────────┬────────┘  │
│         │                   │           │
└─────────┼───────────────────┼───────────┘
          │ webhooks          │ REST API
┌─────────▼───────────────────▼───────────┐
│           Bot Backend (Laravel/Node)    │
│  ┌─────────────┐   ┌─────────────────┐  │
│  │  Bot Logic  │   │   Admin API     │  │
│  │  (сценарії) │   │  (налаштування) │  │
│  └─────────────┘   └─────────────────┘  │
└─────────────────────────────────────────┘

Реєстрація бота та підписка на події

// Реєстрація бота через REST
BX24::callMethod('imbot.register', [
    'TYPE' => 'B', // Bot type
    'EVENT_MESSAGE_ADD' => 'https://my-app.com/webhook/message',
    'EVENT_WELCOME_MESSAGE' => 'https://my-app.com/webhook/welcome',
    'EVENT_BOT_DELETE' => 'https://my-app.com/webhook/delete',
    'PROPERTIES' => [
        'NAME' => 'Мій асистент',
        'LAST_NAME' => '',
        'COLOR' => 'GREEN',
        'PERSONAL_PHOTO' => 'base64...',
    ]
]);

Vue-компонент конструктора сценаріїв

Візуальний редактор діалогових дерев — ключова частина адміністративного інтерфейсу:

<!-- ScenarioBuilder.vue -->
<template>
  <div class="scenario-builder">
    <div class="scenarios-list">
      <ScenarioCard
        v-for="scenario in scenarios"
        :key="scenario.id"
        :scenario="scenario"
        :active="activeScenario?.id === scenario.id"
        @select="selectScenario"
        @delete="deleteScenario"
      />
      <button class="add-scenario" @click="addScenario">
        + Додати сценарій
      </button>
    </div>

    <div class="scenario-editor" v-if="activeScenario">
      <StepEditor
        v-for="step in activeScenario.steps"
        :key="step.id"
        :step="step"
        @update="updateStep"
        @add-next="addNextStep"
        @delete="deleteStep"
      />
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { useScenarioStore } from '@/stores/scenarios'

const store = useScenarioStore()
const scenarios = computed(() => store.scenarios)
const activeScenario = ref(null)

onMounted(() => store.loadScenarios())

function selectScenario(scenario) {
  activeScenario.value = scenario
}

async function addScenario() {
  const newScenario = await store.createScenario({
    name: 'Новий сценарій',
    trigger: 'keyword',
    steps: [{ type: 'message', text: 'Привіт! Чим можу допомогти?' }]
  })
  activeScenario.value = newScenario
}
</script>

Компонент кроку діалогу

<!-- StepEditor.vue -->
<template>
  <div class="step-editor" :class="`step-type-${step.type}`">
    <div class="step-header">
      <select v-model="step.type" @change="onTypeChange">
        <option value="message">Повідомлення</option>
        <option value="question">Питання з кнопками</option>
        <option value="condition">Умова</option>
        <option value="api_call">Запит до API</option>
        <option value="crm_create">Створити у CRM</option>
      </select>
    </div>

    <div class="step-body">
      <MessageStep v-if="step.type === 'message'" v-model="step" />
      <QuestionStep v-if="step.type === 'question'" v-model="step" />
      <ConditionStep v-if="step.type === 'condition'" v-model="step" />
      <ApiCallStep v-if="step.type === 'api_call'" v-model="step" />
      <CrmCreateStep v-if="step.type === 'crm_create'" v-model="step" />
    </div>
  </div>
</template>

Відправлення повідомлень із кнопками

Інтерактивні кнопки в повідомленнях бота через KEYBOARD:

// bot-logic.js
async function sendMessageWithButtons(chatId, text, buttons) {
  await bx24.callMethod('imbot.message.add', {
    DIALOG_ID: chatId,
    MESSAGE: text,
    KEYBOARD: buttons.map((row, rowIndex) =>
      row.map(btn => ({
        TEXT: btn.label,
        ACTION: 'CALL',
        LINK: `https://my-app.com/bot/action/${btn.action}`,
        // або ACTION: 'SEND' для відправлення тексту в чат
        BG_COLOR: btn.color || '#29619b',
        TEXT_COLOR: '#ffffff',
        DISPLAY: 'LINE',
      }))
    )
  })
}

// Використання
await sendMessageWithButtons(dialogId, 'Оберіть дію:', [
  [
    { label: 'Створити заявку', action: 'create_lead', color: '#29619b' },
    { label: 'Перевірити статус', action: 'check_status', color: '#5a9b29' },
  ],
  [
    { label: 'Зв\'язатися з менеджером', action: 'connect_manager', color: '#9b2929' },
  ]
])

Аналітика діалогів

Vue-компоненти для моніторингу бота:

<!-- BotAnalytics.vue -->
<template>
  <div class="bot-analytics">
    <div class="metrics-grid">
      <MetricCard title="Діалогів сьогодні" :value="metrics.dialogs_today" />
      <MetricCard title="Успішних завершень" :value="metrics.completed" />
      <MetricCard title="Передано менеджеру" :value="metrics.escalated" />
      <MetricCard title="Середній час відповіді" :value="metrics.avg_response_time + 'с'" />
    </div>

    <div class="charts-row">
      <DialogsChart :data="metrics.dialogs_by_day" />
      <ScenariosChart :data="metrics.scenarios_usage" />
    </div>

    <div class="recent-dialogs">
      <h3>Останні діалоги</h3>
      <DialogTable :dialogs="recentDialogs" @view="openDialog" />
    </div>
  </div>
</template>

Живий перегляд діалогів

Для моніторингу в реальному часі — WebSocket або polling через Server-Sent Events:

// composables/useLiveDialogs.js
export function useLiveDialogs() {
  const dialogs = ref([])
  let eventSource = null

  function connect() {
    eventSource = new EventSource('/api/bot/dialogs/stream')
    eventSource.onmessage = (event) => {
      const data = JSON.parse(event.data)
      updateDialog(data)
    }
  }

  function updateDialog(update) {
    const idx = dialogs.value.findIndex(d => d.id === update.dialogId)
    if (idx >= 0) {
      dialogs.value[idx] = { ...dialogs.value[idx], ...update }
    } else {
      dialogs.value.unshift(update)
    }
  }

  onMounted(connect)
  onUnmounted(() => eventSource?.close())

  return { dialogs }
}

Терміни виконання

Адміністративний інтерфейс бота з конструктором сценаріїв і базовою аналітикою — 6–10 робочих днів. Повноцінна платформа з візуальним редактором дерева діалогів, живим моніторингом та інтеграцією з CRM — 3–6 тижнів.