المطوّرون

ابنِ على إنجاز

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

البداية

من التطبيق إلى أول طلب في ثلاث خطوات

1

افتح «المطوّرون»

في «إنجاز الأعمال»: تبويب الأعمال ← «المطوّرون». أدوات المطوّرين لصاحب الحساب وحده، لا للموظفين.

2

أنشئ بوتًا أو مفتاحًا

بوت باسم مستخدم ينتهي بـ bot ورمز <botId>:<secret>، أو مفتاح واجهة الأعمال ebk_… بالصلاحيات التي تختارها. يظهر الرمز مرة واحدة فقط.

3

استدعِ الواجهة

طلبات HTTPS بسيطة بـ JSON إلى خادم إنجاز. أسماء الحقول بصيغة camelCase، وتُقبل snake_case أيضًا.

واجهة البوتات

بوت يتكلم مع الناس في المحادثات والمجموعات

البوت حساب خاص بلا رقم هاتف يملكه شخص أو نشاط، ويتكلم عبر رمزه فقط. يجده الناس باسم المستخدم ويضغطون «ابدأ».

  • كل أنواع الرسائل: نص وصور وملفات واستطلاعات وموقع وبطاقات منتجات
  • أزرار تحت الرسالة، ولوحة ردود جاهزة، وأوامر تظهر عند كتابة /
  • استقبال التحديثات بالسحب الطويل getUpdates أو عبر webhook
  • تطبيقات مصغّرة: صفحة ويب تُفتح داخل التطبيق ببيانات موقّعة
  • بوتات مضمّنة تُستدعى بـ @اسم_البوت في أي محادثة
  • «ردود دون برمجة»: قواعد بسيطة تجيب فورًا ولو بلا خادم
  • ربط البوت بحساب النشاط ليردّ على العملاء باسمه
# أرسل رسالة بأزرار من بوت
TOKEN='<botId>:<secret>'
curl -s "https://www.engaz.net/bot/$TOKEN/sendMessage" \
  -H 'content-type: application/json' -d '{
  "conversationId": "CONV_ID",
  "text": "اختر الحجم",
  "replyMarkup": {"inlineKeyboard": [[
    {"text": "صغير", "callbackData": "size:s"},
    {"text": "كبير", "callbackData": "size:l"}
  ]]}}'

# الردّ على ضغطة الزر
curl -s "https://www.engaz.net/bot/$TOKEN/answerCallbackQuery" \
  -H 'content-type: application/json' \
  -d '{"callbackQueryId": "CQ_ID", "text": "تم اختيار الكبير"}'

كل إجابة بالشكل { "ok": true, "result": … } أو { "ok": false, "error": "…", "message": "…" }.

واجهة الأعمال البرمجية

اربط حساب نشاطك بنظامك

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

الصلاحيةتسمح بـ
messages:sendإرسال رسالة في محادثة مع عميل
messages:readالمحادثات ورسائلها وتعليمها كمقروءة
customers:readقائمة العملاء
verifyإرسال رموز التحقق والتحقق منها
callsطلب إذن الاتصال، وبدء المكالمات ومتابعتها
# Base: https://www.engaz.net/biz-api/v1   Authorization: Bearer ebk_…
KEY='ebk_…'
curl -s "https://www.engaz.net/biz-api/v1/messages" \
  -H "authorization: Bearer $KEY" \
  -H 'content-type: application/json' -d '{
  "phone": "+201001234567",
  "text": "طلبك في الطريق 🚚",
  "replyMarkup": {"inlineKeyboard": [[
    {"text": "تتبّع الطلب", "url": "https://example.com/t/42"}
  ]]}}'

تُرسل الرسائل في المحادثات القائمة فقط: يجب أن يراسل العميل نشاطك أولًا.

Webhooks

يصلك كل حدث لحظة وقوعه

أضف رابط https واختر الأحداث. كل حدث طلب POST موقّع، يُعاد عند الفشل بعد 5 ثوانٍ ثم 30 ثانية ثم دقيقتين ثم 10 ثم 30 دقيقة.

  • message.received وmessage.reply وmessage.sent
  • button.pressed حين يضغط عميل زرًا في رسالة من الواجهة
  • member.joined وmember.left في مجموعات نشاطك
  • call.ringing وcall.answered وcall.ended وcall.missed
  • زر «حدث تجريبي» في التطبيق لتجربة الربط مع أدوات الأتمتة
// Node.js: تحقّق من التوقيع قبل قبول الحدث
import { createHmac, timingSafeEqual } from 'node:crypto';

const ts = req.headers['x-engaz-timestamp'];
const want = 'sha256=' + createHmac('sha256', SECRET)
  .update(`${ts}.${rawBody}`).digest('hex');
const got = String(req.headers['x-engaz-signature'] ?? '');
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
if (!fresh || want.length !== got.length ||
    !timingSafeEqual(Buffer.from(want), Buffer.from(got))) {
  return res.status(401).end();
}
res.status(200).end(); // ردّ بـ 2xx خلال 10 ثوانٍ

«الدخول بإنجاز» ورموز التحقق

«الدخول بإنجاز»

أضف زرّ دخول إلى موقعك أو تطبيقك: OAuth 2.0 بتدفّق رمز التفويض مع PKCE (S256) إلزاميًا. يوافق المستخدم من تطبيق إنجاز، وتحصل على اسمه وصورته، ورقمه إن سمح.

  • سجّل موقعك في «المطوّرون» ← «تطبيقات الدخول»
  • /oauth/authorize ثم /oauth/token ثم /oauth/userinfo
  • البيانات الوصفية: /.well-known/oauth-authorization-server

رموز التحقق

أرسل رمزًا لمرة واحدة إلى حساب عميلك على إنجاز بدل رسالة SMS. يصل في محادثته مع نشاطك كبطاقة فيها زر نسخ، وتتحقق منه بطلب واحد.

curl -s "https://www.engaz.net/biz-api/v1/verify/send" \
  -H "authorization: Bearer $KEY" \
  -H 'content-type: application/json' \
  -d '{"phone":"+201001234567","ttlSeconds":120}'

curl -s "https://www.engaz.net/biz-api/v1/verify/check" \
  -H "authorization: Bearer $KEY" \
  -H 'content-type: application/json' \
  -d '{"requestId":"REQ_ID","code":"482913"}'
الحدود والأمان

قواعد واضحة تحمي الجميع

البندالحدّ أو القاعدة
رسائل البوت30 رسالة في الثانية لكل بوت، و60 في الدقيقة لكل محادثة فردية، و20 في الدقيقة لكل مجموعة
واجهة الأعمال120 طلبًا في الدقيقة لكل مفتاح، و30 رسالة في الدقيقة لكل نشاط
رموز التحقق5 رموز في الساعة لكل رقم من النشاط نفسه، و200 في الساعة لكل نشاط، و5 محاولات خاطئة لكل رمز
المكالماتبعد موافقة العميل على «السماح بالاتصال» فقط، و20 مكالمة جديدة في الدقيقة لكل نشاط
الرموز والمفاتيحتظهر مرة واحدة، ويُحفظ منها بصمتها فقط، وتستطيع إنشاء رمز جديد في أي وقت
Webhooksروابط https لعناوين عامة فقط، بتوقيع HMAC-SHA256 وطابع زمني
الصور في البطاقاتمن ملفات مرفوعة إلى إنجاز فقط، فلا يُحمّل هاتف المستخدم روابط من مواقع أخرى

تحتاج المرجع الكامل أو مساعدة في الربط؟

نرسل لك مرجع الواجهات كاملًا بكل الطرق والحقول والأحداث.

راسل فريق المطوّرين