Інтеграція Microsoft Bot Framework в мобільного чат-бота
Microsoft Bot Framework v4 + Azure Bot Service — це не просто NLP, це платформа для управління діалогом з підтримкою десятків каналів. Якщо ваш бот повинен працювати в Teams, Telegram, веб-чаті та мобільному додатку одночасно — це архітектурно правильний вибір. Якщо потрібен тільки мобільний канал, оверхед фреймворку може бути надлишковим.
Де найчастіше виникають проблеми
Direct Line API. Мобільний додаток підключається до Azure Bot Service через Direct Line — це спеціальний канал для кастомних клієнтів. Поширена помилка: використовувати DirectLineSecret прямо в мобільному додатку. Ніколи цього не робіть — секрет скомпрометирован при реверс-інжиніринзі APK. Правильний підхід: бекенд генерує тимчасовий token через /v3/directline/tokens/generate та надає його клієнту. Токен живе 30 хвилин, оновлюється через /v3/directline/tokens/refresh.
// iOS: отримання токена з сервера та ініціалізація сесії Direct Line
func startBotSession() async throws -> String {
let tokenResponse = try await authService.getDirectLineToken()
// Зберігаємо conversationId для переподключення
UserDefaults.standard.set(tokenResponse.conversationId, forKey: "botConversationId")
return tokenResponse.token
}
LUIS vs CLU. Bot Framework традиційно використовувався з LUIS (Language Understanding) для розпізнавання намірів. Microsoft мігрує LUIS на Conversational Language Understanding (CLU) у складі Azure AI Language. Для нових проектів — беріть CLU; LUIS вводиться з активної підтримки. Для існуючої LUIS-інтеграції — зважайте на те, що CLU використовує різні формати експорту та інший SDK (Azure.AI.Language.Conversations).
Управління станом (State Management). Bot Framework зберігає стан діалогу в BotState (UserState, ConversationState). За замовчуванням — в пам'яті, що означає втрату контексту при перезавантаженні сервера. У продакшені використовуємо CosmosDbPartitionedStorage або BlobStorage:
var storage = new CosmosDbPartitionedStorage(new CosmosDbPartitionedStorageOptions {
CosmosDbEndpoint = configuration["CosmosDb:Endpoint"],
AuthKey = configuration["CosmosDb:AuthKey"],
DatabaseId = "BotStorage",
ContainerId = "DialogState"
});
var userState = new UserState(storage);
var conversationState = new ConversationState(storage);
Adaptive Cards у мобільному клієнті
Bot Framework підтримує Adaptive Cards — JSON-схему для опису UI-карточок. Це зручно для мультиканального бота: одна карточка рендерується в Teams, веб-чаті та вашому мобільному додатку. Для iOS та Android є офіційні SDK (AdaptiveCards-iOS, adaptivecards-android), але кастомізація стилів обмежена — дизайн карточки не завжди вписується в UI програми.
На практиці для мобільного додатку часто простіше обробляти кастомні activity з типом event та рендерити UI нативно, ігноруючи механізм Adaptive Cards.
Direct Line WebSocket vs Polling
Direct Line підтримує два режими отримання повідомлень: long polling (/v3/directline/conversations/{id}/activities) та WebSocket (streamUrl з відповіді на створення сесії). WebSocket кращий — зменшує затримку та навантаження на сервер. На Android — OkHttp WebSocket, на iOS — URLSessionWebSocketTask.
Важливо: streamUrl живе ~60 секунд без активності, потім закривається. Обробляйте onClosed та переподключайтеся з оновленим токеном.
Процес розробки
Реєстрація Azure Bot Service, налаштування Direct Line каналу.
Розробка бот-логіки на C# (.NET) або JavaScript/TypeScript (Bot Framework SDK v4).
Інтеграція CLU/LUIS для розпізнавання намірів.
Мобільний клієнт: Direct Line token exchange, WebSocket підключення, UI повідомлень.
Тестування через Bot Framework Emulator перед деплойментом на Azure.
Орієнтири за часом
Інтеграція з готовим Azure Bot — 3–5 днів. Розробка з нуля включно з CLU-моделлю, діалоговою логікою, Azure-інфраструктурою та мобільним клієнтом — 2–4 тижні.







