عمل إجراءات على الطلب من رسالة الواتس اب دون الذهاب إلى ادمن المستخدم بالموقع الكتروني

تفاصيل المشروع

طلب. قادم من الموقع الكتروني. يرسل نسخة الى رقم واتس مقدم الخدمة يستطيع عمل عليه الإجراءات الآتية

القبول

الرفض

التعديل

في حالة القبول

يعمل الإجراءات الآتية

تأكيد

لم يحضر العميل

تقيم العميل

دون فتح. الادمن بالموقع

صاحب الطلب يستطيع من رسالة الواتس اب التى وصلته من ألم قع. عمل الاتي :

الغاء الطلب

تعديل الطلب

قبول التعديل من مقدم الخدمة

تقيم مقدم الخدمة

/

البرمجة php larvel

____

للتقريب الفكرة هكذا فهمت. بالذكاء؟الصناعيى

إليك المشروع مختصراً بالكامل في 5 خطوات، مع التركيز على الكود الصافي مباشرة لتسريع عملية النسخ واللصق:

1️⃣ قاعدة البيانات والنموذج (Database & Model)

الملف: database/migrations/2026_01_01__create_orders_table.php

php

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;

return new class extends Migration {

public function up(): void {

Schema::create('orders', function (Blueprint $table) {

$table->id();

$table->string('customer_name');

$table->string('customer_phone');

$table->string('provider_phone');

$table->string('service');

$table->string('status')->default('pending');

$table->text('notes')->nullable();

$table->timestamps();

});

}

public function down(): void { Schema::dropIfExists('orders'); }

};

يُرجى استخدام الرمز البرمجي بحذر.

الملف: app/Models/Order.php

php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model {

protected $fillable = ['customer_name', 'customer_phone', 'provider_phone', 'service', 'status', 'notes'];

}

يُرجى استخدام الرمز البرمجي بحذر.

2️⃣ خدمة الواتساب (WhatsApp Service)

الملف: app/Services/WhatsAppService.php

php

<?php

namespace App\Services;

use Illuminate\Support\Facades\Http;

class WhatsAppService {

protected $url; protected $token;

public function __construct() {

$this->url = "https://ultramsg.com"; . env('ULTRA_INSTANCE') . "/messages";

$this->token = env('ULTRA_TOKEN');

}

public function sendMessage($to, $body) {

return Http::post("{$this->url}/chat", ['token' => $this->token, 'to' => $to, 'body' => $body]);

}

public function sendButtons($to, $text, $buttons, $title = '') {

$formatted = [];

foreach ($buttons as $id => $titleStr) {

$formatted[] = ['type' => 'reply', 'reply' => ['id' => $id, 'title' => $titleStr]];

}

return Http::post("{$this->url}/interactive", [

'token' => $this->token, 'to' => $to, 'type' => 'button',

'body' => json_encode(['title' => $title, 'body' => $text, 'action' => ['buttons' => $formatted]])

]);

}

}

يُرجى استخدام الرمز البرمجي بحذر.

3️⃣ البث المباشر (Event)

الملف: app/Events/OrderUpdated.php

php

<?php

namespace App\Events;

use App\Models\Order;

use Illuminate\Broadcasting\Channel;

use Illuminate\Broadcasting\InteractsWithSockets;

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

use Illuminate\Foundation\Events\Dispatchable;

use Illuminate\Queue\SerializesModels;

class OrderUpdated implements ShouldBroadcast {

use Dispatchable, InteractsWithSockets, SerializesModels;

public $order;

public function __construct(Order $order) { $this->order = $order; }

public function broadcastOn(): array { return [new Channel('orders-channel')]; }

public function broadcastAs(): string { return 'order.changed'; }

}

يُرجى استخدام الرمز البرمجي بحذر.

4️⃣ المتحكم والمسارات (Controller & Routes)

الملف: app/Http/Controllers/OrderController.php

php

<?php

namespace App\Http\Controllers;

use App\Models\Order;

use App\Services\WhatsAppService;

use App\Events\OrderUpdated;

use Illuminate\Http\Request;

class OrderController extends Controller {

protected $ws;

public function __construct(WhatsAppService $ws) { $this->ws = $ws; }

public function createOrder(Request $request) {

$order = Order::create($request->validate([

'customer_name' => 'required', 'customer_phone' => 'required',

'provider_phone' => 'required', 'service' => 'required'

]));

broadcast(new OrderUpdated($order));

$this->ws->sendButtons($order->provider_phone, "طلب جديد من {$order->customer_name}", [

"accept_{$order->id}" => "✅ قبول", "reject_{$order->id}" => "❌ رفض"

], "طلب #{$order->id}");

return response()->json($order);

}

public function handleWebhook(Request $request) {

$msg = $request->input('data.message');

if (!$msg) return response()->json(['status' => 'no data']);

if (isset($msg['interactive']['reply_button'])) {

list($action, $id) = explode('_', $msg['interactive']['reply_button']['id']);

if ($order = Order::find($id)) {

$status = $action === 'accept' ? 'accepted' : 'rejected';

$order->update(['status' => $status]);

$this->ws->sendMessage($order->customer_phone, $status === 'accepted' ? "🎉 تم قبول طلبك" : "❌ تم رفض طلبك");

broadcast(new OrderUpdated($order));

}

}

return response()->json(['status' => 'success']);

}

public function adminView() { return view('admin.orders', ['orders' => Order::latest()->get()]); }

}

يُرجى استخدام الرمز البرمجي بحذر.

المسارات: أضف هذه الأسطر في ملفاتها الخاصة:

• في routes/api.php:php

Route::post('/create-order', [App\Http\Controllers\OrderController::class, 'createOrder']);

Route::post('/whatsapp/webhook', [App\Http\Controllers\OrderController::class, 'handleWebhook']);

يُرجى استخدام الرمز البرمجي بحذر.

• في routes/web.php:php

Route::get('/admin/orders', [App\Http\Controllers\OrderController::class, 'adminView']);

يُرجى استخدام الرمز البرمجي بحذر.

5️⃣ لوحة الأدمن (Blade View)

الملف: resources/views/admin/orders.blade.php

html

<!DOCTYPE html>

<html lang="ar" dir="rtl">

<head>

<title>الطلبات اللحظية</title>

<script src="https://jsdelivr.net"; defer></script>

@vite(['resources/css/app.css', 'resources/js/app.js'])

<style> .flash { animation: f 2s ease-out; } @keyframes f { 0% { background:#d1fae5; } 100% { background:transparent; } } </style>

</head>

<body class="bg-gray-100 p-8" x-data="{ orders: {{ $orders->toJson() }} }" x-init="

window.Echo.channel('orders-channel').listen('.order.changed', (e) => {

let i = orders.findIndex(o => o.id === e.order.id);

e.order.ju = true;

if (i !== -1) orders[i] = e.order; else orders.unshift(e.order);

setTimeout(() => { let o = orders.find(x => x.id === e.order.id); if(o) o.ju = false; }, 2000);

});

">

<div class="max-w-4xl mx-auto bg-white p-6 rounded shadow">

<h1 class="text-xl font-bold mb-4">📦 إدارة الطلبات</h1>

<table class="w-full text-right">

<tr class="bg-gray-200">

<th class="p-2">الرقم</th><th class="p-2">العميل</th><th class="p-2">الخدمة</th><th class="p-2">الحالة</th>

</tr>

<template x-for="o in orders" :key="o.id">

<tr class="border-b" :class="{'flash': o.ju}">

<td class="p-2" x-text="o.id"></td>

<td class="p-2" x-text="o.customer_name"></td>

<td class="p-2" x-text="o.service"></td>

<td class="p-2"><span class="px-2 py-1 rounded text-sm" :class="o.status === 'accepted' ? 'bg-green-100 text-green-800' : 'bg-yellow-100 text-yellow-800'" x-text="o.status"></span></td>

</tr>

</template>

</table>

</div>

</body>

</html>

يُرجى استخدام الرمز البرمجي بحذر.

هل تحتاج إلى إرشادات سريعة لـ استثناء مسار الـ Webhook من حماية الـ CSRF ليعمل بشكل صحيح؟

Laravel

تجربة النموذج قبل الاستلام

حالة المشروع
مُغلق
تاريخ النشر
الميزانية
$50.00 - $100.00
مدة التنفيذ
5 أيام
المهارات

صاحب المشروع
عبد الحكيم ع.
تاريخ التسجيل
معدل التوظيف
المشاريع المفتوحة 0
مشاريع قيد التنفيذ 1
التواصلات الجارية 20

تقدم للمشروع

العروض المقدمة

مرحبا أستاذ عبد الحكيم، أنا محمود، Full Stack Developer، ولدي خبرة في Laravel وREST APIs وWebhooks وأتمتة تدفقات العمل، ويمكنني تنفيذ إدارة الطلبات من واتساب دو...

السلام عليكم ورحمه الله وبركاته كيف حالك استاذ عبد الحكيم لقد اطلعت علي المطلوب واستطيع تنفيذه بكل احترافيه وباحدث التقنيات واعلي حمايه وذلك لخبرتي في بناء مشار...

مرحبا استاذ عبد الحكيم، الكود الاسترشادي المرفق في مشروعك يحل نصف الفكرة فقط (القبول والرفض بضغطة زر)، لكن التحدي الفعلي الذي تحتاجه هو: كيف يكتب العميل او مقدم...

السلام عليكم أستاذ عبد الحكيم أنا فاهم فكرة المشروع كويس والمطلوب هو ربط الموقع الإلكتروني بالواتساب بحيث يقدر العميل ومقدم الخدمة يديروا الطلبات بالكامل من خلا...

السلام عليكم, نقطة مهمة في الفكرة: أول رسالة بالطلب لمقدم الخدمة بتبدأ من الموقع, فعلى الربط الرسمي مع Meta (Cloud API) لازم تكون قالب رسالة معتمد. القالب ممكن ...

Youssef S.

الفكرة إن مقدم الخدمة يدير الطلب كله من واتساب من غير ما يفتح لوحة التحكم وده بيتعمل بشكل آمن عن طريق WhatsApp Cloud API الرسمي من Meta بأزرار تفاعلية (قبول / ر...

السلام عليكم معك سعود مهندس برمجيات بشتغل Laravel بشكل يومي على أنظمة فيها طلبات وworkflows موافقات وصلاحيات متعددة فهمت المطلوب كويس وخطتي كالتالي ١- ربط الموق...

Abdelrahman N.

السلام عليكم، أنا Senior Backend Engineer بخبرة أكثر من 6 سنوات في PHP وLaravel، وبنيت سابقا موديول إشعارات متكامل (SMS، Push، بريد، داخل النظام) ضمن منصة تعمل ...

أستاذ عبد الحكيم، الكود الحالي محتاج استكمال عشان دورة الطلب تشتغل بالكامل من خلال الواتساب من غير الحاجة لفتح لوحة الأدمن. هقدر أنفذ المطلوب باستخدام Laravel، ...

السلام عليكم ورحمة الله وبركاته، اطلعت على تفاصيل مشروعكم، وفهمت المطلوب بشكل واضح. يمكنني تنفيذ نظام متكامل لإدارة الطلبات باستخدام Laravel وPHP، بحيث تتم جميع...

اهلا ا/عبد الحكيم تواصل معي بعملك ويبهوك مع كل طلب يتضاف في الموقع يرسل نسخة الى رقم واتس مقدم الخدمة ويستطيع مقدم الخدمة القبول او الرفض او التعديل علي الطلب و...

السلام عليكم، فهمت إنك تبي تنفذ إجراءات الطلب (مثل تأكيده أو تغيير حالته) مباشرة من رسالة الواتساب، بدون ما تدخل لوحة تحكم الموقع كل مرة. أقدر أربط رسائل الطلبا...

Ebrahim G.

السلام عليكم ورحمة الله وبركاته أستاذ عبد الحكيم، قرأت تفاصيل مشروعك بالكامل وراجعت الكود المرفق في وصف المشروع بدقة. فكرة إدارة دورة حياة الطلب بالكامل عبر الو...

السلام عليكم أستاذ عبد الحكيم فهمت تفاصيل مشروعك وفهمت إن الهدف هو تسهيل إدارة الطلبات بحيث يقدر مقدم الخدمة والعميل ينفذوا الإجراءات المطلوبة من خلال الرسائل ب...

السلام عليكم ورحمة الله وبركاته. فهمت المطلوب بوضوح: تحويل رسائل واتساب إلى وسيلة لتنفيذ إجراءات الطلب، مع تحديث حالته في موقع Laravel وإبلاغ الطرف الآخر، دون ا...

Alina E.

السلام عليكم فهمت الفكرة: الطلب يوصل لمقدم الخدمة على واتساب بأزرار، وكل ضغطة تحدث الطلب في الموقع مباشرة بدون فتح الأدمن. التنفيذ في Laravel: 1. ربط واتساب الر...

فهمت الفكرة انك تحتاج لعمل ازرار تفاعلية من الواتساب بشكل مباشر تصل رسالة لمقدم الخدمة و على حسب الزر الذي حدده يتم الإجراء في النظام مباشرة بإمكاني تنفيذ المطل...

Melad F.

السلام عليكم أستاذ عبد الحكيم، أنفذ لك الدورة كاملة داخل Laravel: عند وصول الطلب من الموقع تصل لمقدم الخدمة رسالة واتساب بأزرار القبول والرفض والتعديل، وبعد الق...

السلام عليكم، فهمت المطلوب: الطلب اللي يجي من الموقع يوصل لمقدم الخدمة على الواتساب، ويقدر يقبل أو يرفض أو يعدل من الرسالة نفسها بدون ما يفتح لوحة الإدارة، ونفس...

قبولك لهذا العرض يعتبر اتفاقاً بينك وبين المستقل وسيبقى موقع مستقل وسيطاً بينكما حتى تسليم المشروع. تأكد من اختيارك للعرض المناسب باتّباع النصائح التالية:

  • راجع صفحة حساب المستقل الذي اخترته واطّلع على أعماله السابقة
  • احرص دائمًا على إبقاء التواصل مع المستقل داخل الموقع وذلك لضمان حقوقك
  • لا تتردد من التواصل معنا ان احتجت لأي مساعدة، نحن نحب مساعدتك!

قيمة العرض

$0

رسوم بدء المشروع

$0

المجموع الكلي

$0

المستقل غير متاح حالياً لاستلام مشاريع جديدة. يمكنك إرسال رسالة له لتحديث إعدادات حسابه وتفعيل خيار "متاح للتوظيف"، ثم إعادة المحاولة بعد ذلك، أو اختيار عرض مستقل آخر.