إنشاء روبوت محادثة بلغة Swift: من الفكرة إلى أول حوار

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا Swift هو خيار ممتاز لروبوت المحادثة؟

\n

عندما يتعلق الأمر بإنشاء روبوتات المحادثة، يفكر الكثيرون فورًا في Python أو JavaScript. وهذا منطقي: فهناك الكثير من المكتبات الجاهزة والأمثلة. ولكن ماذا لو كانت مجموعتك التقنية هي نظام Apple البيئي؟ أو كنت ترغب في إنشاء بوت يعمل مباشرة على خادم Vapor؟ أو ربما تريد فقط تجربة Swift خارج تطوير iOS؟

\n

Swift ليست مجرد بناء جملة جميل وأمان في الأنواع. إنها أيضًا سرعة فائقة، وعمل ممتاز مع الشبكة، وأدوات قوية لتحليل البيانات. في هذه المقالة، لن نكتب بوت "مرحبًا بالعالم" آخر. سنقوم خطوة بخطوة ببناء بوت Telegram كامل بلغة Swift، قادر على الرد على الأوامر، ومعالجة الرسائل النصية، وتحليل JSON. هيا بنا!

\n\n

ماذا سنحتاج؟

\n

قبل الغوص في الكود، دعنا نتعرف على الأدوات. لمشروعنا سنستخدم:

\n
    \n
  • Swift 5.9+ — أحدث إصدار مستقر.
  • \n
  • Foundation — المكتبة المدمجة للعمل مع الشبكة وJSON.
  • \n
  • Telegram Bot API — REST API الذي سنحتاج إلى استدعائه.
  • \n
  • مكتبة SwiftBot — غلاف خفيف للعمل مع Telegram (أو سنكتب عميلنا الخاص البسيط).
  • \n
\n

إذا كنت ترغب في اتباع نهج التحكم الأقصى، فسنستخدم فقط الأدوات القياسية من Foundation. لا تبعيات خارجية — فقط Swift النقي.

\n\n

الخطوة 1: تسجيل البوت لدى BotFather

\n

هذه هي أسهل خطوة. افتح Telegram، وابحث عن BotFather، واكتب /newbot واتبع التعليمات. في النهاية ستحصل على رمز مميز — سلسلة طويلة مثل 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. احفظه في متغير بيئة أو ملف إعدادات. لا تقم أبدًا بتضمين الرمز المميز مباشرة في الكود إذا كنت تخطط لنشر المشروع على GitHub.

\n

الرمز المميز هو مفتاح الوصول إلى البوت الخاص بك. من خلاله سنرسل الطلبات إلى Telegram API.

\n\n

الخطوة 2: إنشاء هيكل للعمل مع API

\n

في البداية، نحتاج إلى كتابة عميل HTTP بسيط. يعمل Telegram API من خلال طلبات GET و POST. سنستخدم URLSession — الأداة القياسية في Swift للعمل مع الشبكة.

\n\n

إنشاء الفئة الأساسية BotClient

\n
import Foundation\n\nclass BotClient {\n    private let token: String\n    private let baseURL = "https://api.telegram.org/bot"\n    \n    init(token: String) {\n        self.token = token\n    }\n    \n    // طريقة لإرسال الطلبات\n    private func sendRequest(method: String, parameters: [String: Any] = [:], completion: @escaping (Data?, Error?) -> Void) {\n        let urlString = "\\(baseURL)\\(token)/\\(method)"\n        guard let url = URL(string: urlString) else {\n            completion(nil, NSError(domain: "Invalid URL", code: -1))\n            return\n        }\n        \n        var request = URLRequest(url: url)\n        request.httpMethod = "POST"\n        request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n        \n        if !parameters.isEmpty {\n            request.httpBody = try? JSONSerialization.data(withJSONObject: parameters)\n        }\n        \n        let task = URLSession.shared.dataTask(with: request) { data, response, error in\n            completion(data, error)\n        }\n        task.resume()\n    }\n    \n    // الحصول على التحديثات (الرسائل الجديدة)\n    func getUpdates(offset: Int? = nil, completion: @escaping ([Update]?) -> Void) {\n        var params: [String: Any] = [:]\n        if let offset = offset {\n            params["offset"] = offset\n        }\n        \n        sendRequest(method: "getUpdates", parameters: params) { data, error in\n            guard let data = data else {\n                completion(nil)\n                return\n            }\n            \n            do {\n                let response = try JSONDecoder().decode(TelegramRespons                

المدونات

توصيات الكتب