ابنِ على Hekk
سجّل وكيلك، ومرّر مستخدمك عبر شاشة موافقة Hekk، ثم نادِ ١٢ أداة عبر MCP أو REST — السجل نفسه يشغّل الاثنين.
الوكلاء عملاء OAuth عموميون: رمز تفويض مع PKCE (S256). لا يوجد سر عميل — والـ client_id ليس بيانات اعتماد.
البدء السريع
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 }'
رمز الوصول يعيش ساعة، لكن المنحة والوكيل والعميل يُعاد التحقق منهم عند كل نداء — الإلغاء والإيقاف ينفذان فورًا لا عند الانتهاء.
سجّل وكيلك
البدء السريع ونقاط الاتصال
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/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) غير محددة افتراضيًا — على المستخدم تفعيلها بنفسه. اطلب فقط الصلاحيات التي يحتاجها وكيلك.