ابنِ على 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. 1. سجّل وكيلك أدناه — تحصل على client_id فورًا.

  2. 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=S256
  3. 3. استبدل الرمز بالرموز (وصول ساعة، تحديث ٣٠ يومًا متجدد):

    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. 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/verify

MCP (بث 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/mcp

llms.txt

https://hekkapp.com/llms.txt

الصلاحيات

discover

الاستكشاف والتسعير

تصفّح الفئات ومقدّمي الخدمات وطلب الأسعار — قراءة فقط.

discover_servicesrequest_quoteget_bookinglist_bookings
message

مراسلة مقدّمي الخدمات

إرسال وقراءة رسائل التنسيق مع مقدّم الخدمة.

send_messageget_messages
book

إنشاء وإلغاء الحجوزات

حجز الخدمات وإلغاؤها ضمن الحدود.

create_bookingcancel_booking
complete

تأكيد الإنجاز

تحديد المهمة كمكتملة نيابةً عنك.

confirm_completion
pay

الدفع

تسوية الدفع لمهمة ضمن الحدود.

pay
review

ترك التقييمات

إرسال تقييمك وكلماتك بعد المهمة (لا يجوز تلفيقها).

submit_review

مرجع الأدوات

discover_services

scope: discover

تصفّح الفئات والخدمات ومقدّمي الخدمات المرتّبين — قراءة فقط.

المعاملالنوعمطلوبملاحظات
categorystringcategory slug; omit to list all categories
querystringsubstring match on provider name
minRatingnumber 0–5
maxStartingPriceBHD
limitint 1–50default 20
{ "categories": [{ "slug": "plumbing", "nameEn": "Plumbing", "nameAr": "السباكة" }] }

request_quote

scope: discover

احصل على سعر «يبدأ من» لخدمة من مقدّم أو أكثر.

المعاملالنوعمطلوبملاحظات
serviceIdcuid
providerIdscuid[] 1–10omit = every provider offering the service
descriptionstring ≤2000
{ "quotes": [{ "providerId": "…", "providerName": "…", "startingPrice": 15.000, "currency": "BHD" }] }

create_booking

scope: bookيتطلب Idempotency-Key ‏(REST)قد يعيد pending_human_approval

أنشئ حجزًا. يخضع للحدود؛ ‏409 إن تجاوز السعر الحي acceptedPrice؛ قد يتوقف لموافقة بشرية.

المعاملالنوعمطلوبملاحظات
providerIdcuid
serviceIdcuid
addressstring 5–300
latitudenumber
longitudenumber
scheduledAtISO date
notesstring ≤2000
acceptedPriceBHD409 if the live price exceeds this
{ "bookingId": "…", "status": "PENDING", "price": 25.000 }

get_booking

scope: discoverبيانات شخصية مقيّدة

حالة حجز واحد وتفاصيله. هاتف مقدّم الخدمة يظهر بعد القبول فقط.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
{ "status": "ACCEPTED", "price": 25.000, "provider": { "name": "…", "phone": "+973…" } }

list_bookings

scope: discover

اعرض حجوزات العميل مع تصفية اختيارية بالحالة.

المعاملالنوعمطلوبملاحظات
statusBookingStatus
limitint 1–100default 50
{ "bookings": [{ "bookingId": "…", "status": "COMPLETED", "hasReview": false }] }

send_message

scope: message

أرسل رسالة تنسيق لمقدّم الخدمة المكلّف (موسومة عبر وكيل).

المعاملالنوعمطلوبملاحظات
bookingIdcuid
bodystring 1–2000
{ "messageId": "…", "at": "2026-01-01T10:00:00.000Z" }

get_messages

scope: message

اقرأ المحادثة مع مقدّم الخدمة المكلّف.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
limitint 1–200default 50
{ "messages": [{ "from": "PROVIDER", "body": "On my way", "viaAgent": false }] }

confirm_completion

scope: complete

علّم المهمة مكتملة نيابةً عن العميل.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
{ "bookingId": "…", "status": "COMPLETED" }

pay

scope: payيتطلب Idempotency-Key ‏(REST)قد يعيد pending_human_approval

سوِّ الدفع ضمن الحدود — اعتماد فقط عند الإطلاق، لا خصم عبر الإنترنت.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
amountBHD
{ "paymentId": "…", "status": "AUTHORIZED", "method": "CASH" }

submit_review

scope: reviewيتطلب humanAttested

أرسل تقييم العميل وكلماته منسوبة عبر وكيل. لا تلفيق أبدًا.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
ratingint 1–5
commentstring ≤2000
humanAttestedliteral trueattests these are the human's own words
{ "reviewId": "…", "attribution": "via_agent" }

cancel_booking

scope: book

ألغِ حجزًا وفق سياسة الإلغاء.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
reasonstring ≤500
{ "bookingId": "…", "status": "CANCELLED" }

get_audit_log

أي منحة

اقرأ كل ما فعله هذا الوكيل لهذا العميل.

المعاملالنوعمطلوبملاحظات
limitint 1–200default 50
{ "actions": [{ "tool": "create_booking", "result": "ok", "amount": 25.000 }] }

get_approval

أي منحة

استعلم عن حالة موافقة بشرية معلّقة: موافَق عليها أو مرفوضة أو منتهية أو ما زالت معلّقة — مع معرّف الطلب المرتبط بعد الموافقة.

المعاملالنوعمطلوبملاحظات
approvalIdstringfrom 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_…)

رموز الأخطاء

codeHTTPالمعنى
invalid_token401رمز وصول مفقود أو غير معروف.
token_expired401انتهت صلاحية رمز الوصول — جدّده.
grant_revoked403ألغى المستخدم التفويض (أو انتهت مدته). أوقف الطلبات واطلب موافقة جديدة.
agent_suspended403الوكيل موقوف على مستوى المنصة.
insufficient_scope403التفويض لا يشمل الصلاحية المطلوبة لهذه الأداة.
cap_exceeded403تجاوزٌ لحد الإنفاق ولا يمكن اعتماده مباشرة.
pending_human_approval200ليست خطأً — الإجراء متوقف بانتظار رابط تأكيد من العميل البشري (يتضمن الرد approvalId وconfirmUrl). اعرض الرابط وانتظر؛ لا تُعد المحاولة بمفتاح Idempotency جديد.
not_found404معرّف مورد غير معروف لهذا التفويض.
conflict409تعارض في الحالة — مثل تجاوز السعر الحالي للسعر المقبول.
disabled409هذه الإمكانية معطّلة على مستوى المنصة.
rate_limited429تجاوز 120 طلبًا في الدقيقة لهذا التفويض — خفّف الوتيرة.
validation400فشل التحقق من بنية الطلب (التفاصيل مرفقة).
internal500خطأ غير متوقع في الخادم — يمكن إعادة المحاولة مرة واحدة ثم الإبلاغ.

حدود المعدل

١٢٠ طلبًا في الدقيقة لكل منحة عبر REST. التجاوز يعيد rate_limited.

Idempotency-Key وحد المعدل يسريان على REST فقط حاليًا — فضّل REST لإعادة محاولات أدوات الإنفاق.

تغيير (يوليو 2026): عندما يطلب الوكيل صلاحية كاملة (بدون معامل scope)، تعرض شاشة الموافقة صلاحيات الإنفاق (book, complete, pay, review) غير محددة افتراضيًا — على المستخدم تفعيلها بنفسه. اطلب فقط الصلاحيات التي يحتاجها وكيلك.

→ العودة إلى نظرة عامة على بوابة الوكلاء