ابنِ على Hekk
سجّل وكيلك، ومرّر مستخدمك عبر شاشة موافقة Hekk، ثم نادِ ١٢ أداة عبر MCP أو REST — السجل نفسه يشغّل الاثنين.
الوكلاء عملاء OAuth عموميون: رمز تفويض مع PKCE (S256). لا يوجد سر عميل — والـ client_id ليس بيانات اعتماد.
الربط السهل (مسار المستهلك)
المساعدون الشخصيون لا يحتاجون تسجيلاً ولا OAuth: أرسل بيانات العميل نفسه، فترسل له حِك رمزاً لمرة واحدة، وتمريره يمنحك رمز وصول Bearer مرتبطاً بتفويض قابل للإلغاء. استخدم OAuth أدناه عندما تطلق منتجاً يحتاج هوية عميل خاصة وروابط إعادة توجيه.
المصافحة كاملة
# 1. Start — Hekk sends the customer a one-time code (SMS or email)
curl -X POST https://hekkapp.com/api/agent/v1/connect/start \
-H "Content-Type: application/json" \
-d '{
"name": "Fatima Ahmed",
"phone": "3xxxxxxx",
"email": "[email protected]",
"need": "AC repair at home, tomorrow morning",
"budget": 25,
"agent_name": "Claude",
"locale": "ar"
}'
# → { "connect_id": "…", "channel": "sms", "expires_in_seconds": 900 }
# 2. Verify — relay the code the customer read back to you
curl -X POST https://hekkapp.com/api/agent/v1/connect/verify \
-H "Content-Type: application/json" \
-d '{ "connect_id": "<connect_id>", "code": "123456" }'
# → { "access_token": "hga_…", "refresh_token": "hgr_…", "grant": { … }, "customer": { … } }التفويضات الصادرة بهذا المسار تتبع مُعرّف العميل المشترك personal-assistant (استخدمه لتجديد الرمز). الميزانية المذكورة تصبح سقف المهمة وسقف الثلاثين يوماً معاً؛ وبدون ميزانية ينتظر كل حجز أو دفعة موافقة العميل عبر البريد.
البدء السريع
1. سجّل وكيلك أدناه — تحصل على client_id فورًا.
2. أرسل مستخدمك إلى عنوان التفويض (يسجّل الدخول ويحدد الصلاحيات والحدود):
https://hekkapp.com/en/agents/connect?response_type=code&client_id=<client_id>&redirect_uri=<redirect_uri>&scope=discover%20book&state=<state>&code_challenge=<S256_challenge>&code_challenge_method=S2563. استبدل الرمز بالرموز (وصول ساعة، تحديث ٣٠ يومًا متجدد):
curl -X POST https://hekkapp.com/api/agent/v1/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "authorization_code", "code": "<code>", "redirect_uri": "<redirect_uri>", "client_id": "<client_id>", "code_verifier": "<pkce_verifier>" }'curl -X POST https://hekkapp.com/api/agent/v1/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "refresh_token", "refresh_token": "<refresh_token>", "client_id": "<client_id>" }'4. نادِ الأدوات عبر MCP أو REST — أدوات الإنفاق تتطلب Idempotency-Key عبر REST:
{ "mcpServers": { "hekk": { "url": "https://hekkapp.com/agents/mcp" } } }curl -X POST https://hekkapp.com/api/agent/v1/tools/create_booking \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: <unique-key>" \ -d '{ "providerId": "<providerId>", "serviceId": "<serviceId>", "address": "Building 12, Road 3419, Manama", "acceptedPrice": 25.000 }'
رمز الوصول يعيش ساعة، لكن المنحة والوكيل والعميل يُعاد التحقق منهم عند كل نداء — الإلغاء والإيقاف ينفذان فورًا لا عند الانتهاء.
سجّل وكيلك
البدء السريع ونقاط الاتصال
الربط السهل — البدء
https://hekkapp.com/api/agent/v1/connect/startالربط السهل — التحقق
https://hekkapp.com/api/agent/v1/connect/verifyMCP (بث HTTP)
https://hekkapp.com/agents/mcpقاعدة REST API
https://hekkapp.com/api/agent/v1التفويض (الموافقة)
https://hekkapp.com/en/agents/connectالرمز
https://hekkapp.com/api/agent/v1/oauth/tokenمورد OAuth المحمي
https://hekkapp.com/.well-known/oauth-protected-resourceخادم تفويض OAuth
https://hekkapp.com/.well-known/oauth-authorization-serverاكتشاف MCP
https://hekkapp.com/.well-known/mcpllms.txt
https://hekkapp.com/llms.txtالصلاحيات
discoverالاستكشاف والتسعير
تصفّح الفئات ومقدّمي الخدمات وطلب الأسعار — قراءة فقط.
discover_servicesrequest_quoteget_bookinglist_bookingsmessageمراسلة مقدّمي الخدمات
إرسال وقراءة رسائل التنسيق مع مقدّم الخدمة.
send_messageget_messagesbookإنشاء وإلغاء الحجوزات
حجز الخدمات وإلغاؤها ضمن الحدود.
create_bookingcancel_bookingcompleteتأكيد الإنجاز
تحديد المهمة كمكتملة نيابةً عنك.
confirm_completionpayالدفع
تسوية الدفع لمهمة ضمن الحدود.
payreviewترك التقييمات
إرسال تقييمك وكلماتك بعد المهمة (لا يجوز تلفيقها).
submit_reviewمرجع الأدوات
discover_services
scope: discoverتصفّح الفئات والخدمات ومقدّمي الخدمات المرتّبين — قراءة فقط.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| category | string | — | category slug; omit to list all categories |
| query | string | — | substring match on provider name |
| minRating | number 0–5 | — | |
| maxStartingPrice | BHD | — | |
| limit | int 1–50 | — | default 20 |
{ "categories": [{ "slug": "plumbing", "nameEn": "Plumbing", "nameAr": "السباكة" }] }request_quote
scope: discoverاحصل على سعر «يبدأ من» لخدمة من مقدّم أو أكثر.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| serviceId | cuid | ✓ | |
| providerIds | cuid[] 1–10 | — | omit = every provider offering the service |
| description | string ≤2000 | — |
{ "quotes": [{ "providerId": "…", "providerName": "…", "startingPrice": 15.000, "currency": "BHD" }] }create_booking
scope: bookيتطلب Idempotency-Key (REST)قد يعيد pending_human_approvalأنشئ حجزًا. يخضع للحدود؛ 409 إن تجاوز السعر الحي acceptedPrice؛ قد يتوقف لموافقة بشرية.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| providerId | cuid | ✓ | |
| serviceId | cuid | ✓ | |
| address | string 5–300 | ✓ | |
| latitude | number | — | |
| longitude | number | — | |
| scheduledAt | ISO date | — | |
| notes | string ≤2000 | — | |
| acceptedPrice | BHD | ✓ | 409 if the live price exceeds this |
{ "bookingId": "…", "status": "PENDING", "price": 25.000 }get_booking
scope: discoverبيانات شخصية مقيّدةحالة حجز واحد وتفاصيله. هاتف مقدّم الخدمة يظهر بعد القبول فقط.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ |
{ "status": "ACCEPTED", "price": 25.000, "provider": { "name": "…", "phone": "+973…" } }list_bookings
scope: discoverاعرض حجوزات العميل مع تصفية اختيارية بالحالة.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| status | BookingStatus | — | |
| limit | int 1–100 | — | default 50 |
{ "bookings": [{ "bookingId": "…", "status": "COMPLETED", "hasReview": false }] }send_message
scope: messageأرسل رسالة تنسيق لمقدّم الخدمة المكلّف (موسومة عبر وكيل).
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ | |
| body | string 1–2000 | ✓ |
{ "messageId": "…", "at": "2026-01-01T10:00:00.000Z" }get_messages
scope: messageاقرأ المحادثة مع مقدّم الخدمة المكلّف.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ | |
| limit | int 1–200 | — | default 50 |
{ "messages": [{ "from": "PROVIDER", "body": "On my way", "viaAgent": false }] }confirm_completion
scope: completeعلّم المهمة مكتملة نيابةً عن العميل.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ |
{ "bookingId": "…", "status": "COMPLETED" }pay
scope: payيتطلب Idempotency-Key (REST)قد يعيد pending_human_approvalسوِّ الدفع ضمن الحدود — اعتماد فقط عند الإطلاق، لا خصم عبر الإنترنت.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ | |
| amount | BHD | ✓ |
{ "paymentId": "…", "status": "AUTHORIZED", "method": "CASH" }submit_review
scope: reviewيتطلب humanAttestedأرسل تقييم العميل وكلماته منسوبة عبر وكيل. لا تلفيق أبدًا.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ | |
| rating | int 1–5 | ✓ | |
| comment | string ≤2000 | — | |
| humanAttested | literal true | ✓ | attests these are the human's own words |
{ "reviewId": "…", "attribution": "via_agent" }cancel_booking
scope: bookألغِ حجزًا وفق سياسة الإلغاء.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| bookingId | cuid | ✓ | |
| reason | string ≤500 | — |
{ "bookingId": "…", "status": "CANCELLED" }get_audit_log
أي منحةاقرأ كل ما فعله هذا الوكيل لهذا العميل.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| limit | int 1–200 | — | default 50 |
{ "actions": [{ "tool": "create_booking", "result": "ok", "amount": 25.000 }] }get_approval
أي منحةاستعلم عن حالة موافقة بشرية معلّقة: موافَق عليها أو مرفوضة أو منتهية أو ما زالت معلّقة — مع معرّف الطلب المرتبط بعد الموافقة.
| المعامل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
| approvalId | string | ✓ | from a pending_human_approval response |
{ "approvalId": "…", "status": "APPROVED", "tool": "create_booking", "bookingId": "…", "expiresAt": "…" }الضوابط والأخطاء والحدود
بوابات الإنفاق
تمر create_booking وpay بثلاث بوابات على الخادم: سقف المهمة، وسقف ٣٠ يومًا متحركًا (يحتسب حجوزات هذه المنحة غير الملغاة فقط)، وبوابة أول حجز مع مقدّم جديد. الحد الفارغ يعني بوابة دائمًا — لا إنفاقًا مفتوحًا.
عقد pending_human_approval
النداء المُقيّد ينجح بحالة pending_human_approval مع رابط تأكيد صالح ٣٠ دقيقة. يوافق العميل بالبريد أو من حسابه؛ وعند الموافقة تعيد المنصة تنفيذ طلبك الأصلي.
{
"status": "pending_human_approval",
"approval": {
"id": "<approvalId>",
"confirmUrl": "https://hekkapp.com/en/agents/approvals/<token>",
"expiresAt": "2026-01-01T12:30:00.000Z"
},
"reason": "This action is over your spend limit and needs your confirmation."
}
// Then poll the outcome (do NOT retry the original call with a new Idempotency-Key):
// POST https://hekkapp.com/api/agent/v1/tools/get_approval { "approvalId": "<approvalId>" }
// → { "status": "PENDING" | "APPROVED" | "DECLINED" | "EXPIRED", "bookingId": "…" }أظهر confirmUrl لمستخدمك دائمًا — تسليم البريد جهدٌ غير مضمون.
أعمار الرموز
- رمز الوصول — ساعة واحدة (hga_…)
- رمز التحديث — ٣٠ يومًا، يتجدد مع كل استخدام (hgr_…)
- رمز التفويض — ٥ دقائق، استخدام واحد (hac_…)
- رابط تأكيد الموافقة — ٣٠ دقيقة (apr_…)
رموز الأخطاء
| code | HTTP | المعنى |
|---|---|---|
| invalid_token | 401 | رمز وصول مفقود أو غير معروف. |
| token_expired | 401 | انتهت صلاحية رمز الوصول — جدّده. |
| grant_revoked | 403 | ألغى المستخدم التفويض (أو انتهت مدته). أوقف الطلبات واطلب موافقة جديدة. |
| agent_suspended | 403 | الوكيل موقوف على مستوى المنصة. |
| insufficient_scope | 403 | التفويض لا يشمل الصلاحية المطلوبة لهذه الأداة. |
| cap_exceeded | 403 | تجاوزٌ لحد الإنفاق ولا يمكن اعتماده مباشرة. |
| pending_human_approval | 200 | ليست خطأً — الإجراء متوقف بانتظار رابط تأكيد من العميل البشري (يتضمن الرد approvalId وconfirmUrl). اعرض الرابط وانتظر؛ لا تُعد المحاولة بمفتاح Idempotency جديد. |
| not_found | 404 | معرّف مورد غير معروف لهذا التفويض. |
| conflict | 409 | تعارض في الحالة — مثل تجاوز السعر الحالي للسعر المقبول. |
| disabled | 409 | هذه الإمكانية معطّلة على مستوى المنصة. |
| rate_limited | 429 | تجاوز 120 طلبًا في الدقيقة لهذا التفويض — خفّف الوتيرة. |
| validation | 400 | فشل التحقق من بنية الطلب (التفاصيل مرفقة). |
| internal | 500 | خطأ غير متوقع في الخادم — يمكن إعادة المحاولة مرة واحدة ثم الإبلاغ. |
حدود المعدل
١٢٠ طلبًا في الدقيقة لكل منحة عبر REST. التجاوز يعيد rate_limited.
Idempotency-Key وحد المعدل يسريان على REST فقط حاليًا — فضّل REST لإعادة محاولات أدوات الإنفاق.
تغيير (يوليو 2026): عندما يطلب الوكيل صلاحية كاملة (بدون معامل scope)، تعرض شاشة الموافقة صلاحيات الإنفاق (book, complete, pay, review) غير محددة افتراضيًا — على المستخدم تفعيلها بنفسه. اطلب فقط الصلاحيات التي يحتاجها وكيلك.