49 lines
2.1 KiB
PHP
49 lines
2.1 KiB
PHP
<?php
|
|
// food/courier/call_customer.php — السائق يتصل بالزبون عبر قناة مقنّعة
|
|
// لا رقم هاتف يُعرض لأي طرف: نفتح جلسة WebRTC ونُشعر الزبون بمعرّف الجلسة فقط.
|
|
require_once __DIR__ . '/../connect_courier.php';
|
|
|
|
$orderId = filterRequest('order_id', 'int');
|
|
if (!$orderId) jsonError('order_id is required');
|
|
|
|
$order = foodAssertOrderOwnership($orderId, 'courier', $food_courier_id);
|
|
|
|
if (!foodOrderAllowsCall($order)) {
|
|
// بعد التسليم أو قبل الإسناد لا حاجة تشغيلية للاتصال — والقناة تُقفل
|
|
jsonError('Calling is only allowed while the delivery is active', 403);
|
|
}
|
|
|
|
if (foodCallQuotaExceeded($orderId, 'courier')) {
|
|
jsonError('Too many call attempts for this order', 429);
|
|
}
|
|
|
|
$session = foodCreateCallSession($orderId, $food_courier_id, (string)$order['passenger_id']);
|
|
if (!$session) jsonError('Call service unavailable', 502);
|
|
|
|
// إشعار صامت للزبون عبر موضوع FCM الخاص به — نفس القناة المستعملة في وحدة
|
|
// الطعام أصلاً (ممنوع Database::get('main') هنا لجلب توكن الجهاز).
|
|
// الاسم المعروض عام عمداً: هوية السائق الحقيقية لا تُكشف للزبون.
|
|
foodSendNotificationToPassenger(
|
|
(string)$order['passenger_id'],
|
|
'مكالمة واردة',
|
|
'سائق التوصيل يتصل بك',
|
|
[
|
|
// تطبيق الراكب يفرز الإشعارات بـ data['category'] — ونُبقي 'type'
|
|
// للتوافق مع بقية حمولات وحدة الطعام.
|
|
'category' => 'incoming_call',
|
|
'type' => 'incoming_call',
|
|
'session_id' => $session['session_id'],
|
|
'caller_name' => 'سائق التوصيل',
|
|
'caller_avatar' => '',
|
|
'ride_id' => 'food_' . $orderId,
|
|
'food_order_id' => (string)$orderId,
|
|
]
|
|
);
|
|
|
|
appLog("[FOOD][CALL] courier {$food_courier_id} → passenger (order {$orderId})", 'INFO');
|
|
|
|
jsonSuccess([
|
|
'session_id' => $session['session_id'],
|
|
'expires_in' => $session['expires_in'],
|
|
]);
|