Реалізація AI-планувальника завдань у мобільному додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація AI-планувальника завдань у мобільному додатку
Середній
~5 днів
Часті запитання

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

AI-Планувальник Завдань у Мобільних Застосунках

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

Розбір завдань із природної мови

Користувач пише «Позвонити Ігорю до кінця тижня про презентацію, важливо»—система повинна виділити: назву завдання, дедлайн, пріоритет і можливу прив'язку до контакту.

Function calling в OpenAI—правильний інструмент:

let tools: [[String: Any]] = [{
    "type": "function",
    "function": {
        "name": "add_task",
        "description": "Add a task extracted from user input",
        "parameters": {
            "type": "object",
            "properties": {
                "title": {"type": "string", "description": "Task title, concise"},
                "due_date": {"type": "string", "format": "date-time", "description": "ISO 8601 deadline if mentioned"},
                "priority": {"type": "string", "enum": ["low", "medium", "high", "urgent"]},
                "tags": {"type": "array", "items": {"type": "string"}},
                "contact_name": {"type": "string", "description": "Person involved if mentioned"}
            },
            "required": ["title"]
        }
    }
}]

Контекст для запиту обов'язковий: поточна дата/час і часовий пояс, інакше «до кінця тижня» не розбереться.

let systemPrompt = """
Today is \(ISO8601DateFormatter().string(from: Date())).
Timezone: \(TimeZone.current.identifier).
Extract task details from user input. For relative dates ('next week', 'tomorrow', 'end of week'), calculate exact dates.
"""

Розумне перестановлення пріоритетів

Користувачі погано встановлюють пріоритети самі—все здається терміновим. AI може переоцінити чергу завдань на основі дедлайнів і закономірностей.

struct TaskPrioritizationInput: Encodable {
    let tasks: [TaskItem]
    let currentDateTime: String
    let workingHoursPerDay: Int
}

// Запит на переоцінку пріоритетів
func reprioritize(_ tasks: [TaskItem]) async throws -> [TaskItem] {
    let input = TaskPrioritizationInput(
        tasks: tasks,
        currentDateTime: ISO8601DateFormatter().string(from: Date()),
        workingHoursPerDay: userSettings.workHours
    )

    let prompt = """
    Reorder these tasks by urgency+importance matrix.
    Consider deadlines and estimated durations.
    Mark overdue tasks as urgent.
    Return the same array with updated priority field.
    Current tasks: \(try JSONEncoder().encode(input).utf8String)
    """

    let response = try await openAI.chat(messages: [.system(prompt)])
    return try JSONDecoder().decode([TaskItem].self, from: response.text.data(using: .utf8)!)
}

Інтеграція EventKit (iOS) та ContentProvider (Android)

AI-планувальник без синхронізації з системним календарем—половина цінності. EventKit на iOS забезпечує доступ до календаря й нагадувачів.

import EventKit

class CalendarIntegration {
    let store = EKEventStore()

    func addReminder(for task: TaskItem) async throws {
        let granted = try await store.requestFullAccessToReminders()
        guard granted else { throw IntegrationError.permissionDenied }

        let reminder = EKReminder(eventStore: store)
        reminder.title = task.title
        reminder.priority = task.priority.ekPriority  // Int 1-9
        reminder.calendar = store.defaultCalendarForNewReminders()

        if let due = task.dueDate {
            let components = Calendar.current.dateComponents(
                [.year, .month, .day, .hour, .minute],
                from: due
            )
            reminder.dueDateComponents = components
            reminder.addAlarm(EKAlarm(relativeOffset: -3600)) // -1 година нагадування
        }

        try store.save(reminder, commit: true)
    }
}

На Android використовуйте CalendarContract для подій календаря. ReminderProvider недоступний системно; використовуйте AlarmManager + NotificationManager для нагадувань.

Щоденний AI-Бриф

Генеруйте короткий план дня при запуску додатка на основі поточних завдань. Це не повноцінний чат—одиночний запит на генерацію тексту:

func generateDailyBrief(tasks: [TaskItem]) async throws -> String {
    let todayTasks = tasks.filter { task in
        guard let due = task.dueDate else { return task.priority == .urgent }
        return Calendar.current.isDateInToday(due) || due < Date()
    }

    let prompt = """
    Create a short (3-5 sentences) morning briefing for the user's day.
    Focus on what's most urgent and what should be done first.
    Be direct and practical, not motivational.
    Tasks: \(todayTasks.map { "\($0.title) [priority: \($0.priority), due: \($0.dueDate?.formatted() ?? "today")]" }.joined(separator: "; "))
    """

    return try await openAI.complete(prompt: prompt)
}

Голосовий ввід завдань

Більшість додавання завдань у мобільних застосунках відбувається голосом—швидко, без друку. На iOS використовуйте SFSpeechRecognizer, на Android—SpeechRecognizer API.

Важливо: не чекайте завершення фрази. Використовуйте режим .continuous і обробляйте текст при паузах > 1,5 секунди.

recognitionRequest.shouldReportPartialResults = true

recognitionTask = recognizer.recognitionTask(with: recognitionRequest) { [weak self] result, error in
    guard let result else { return }

    self?.lastTranscript = result.bestTranscription.formattedString

    if result.isFinal {
        self?.processVoiceInput(self?.lastTranscript ?? "")
    }
}

Після транскрипції текст проходить той же конвеєр function calling, що й текстовий ввід.

Орієнтири за часом

Базовий ввід завдань через природну мову + function calling—3–5 днів. Повноцінний планувальник з пріоритизацією, інтеграцією CalendarKit, щоденним брифом та голосовим вводом—3–5 тижнів.