مزامنة الأشخاص من واجهة API خاصة بك
وجّه Polzy إلى نقطة نهاية HTTPS تسرد أشخاصك فيقرأها وفق جدول زمني — ويستطيع نظامك دفع تغييرات موقّعة لحظة حدوثها.
في هذه الصفحة
يربط مصدر Custom API نظام Polzy بنظام خاص بك — أداة موارد بشرية داخلية، أو نظام CRM، أو قاعدة بيانات خلف واجهة API. يعمل بطريقتين، ويمكنك استخدامهما معًا:
- السحب (pull). يقرأ Polzy نقطة نهاية HTTPS تُعيد أشخاصك بصيغة JSON، وفق جدول زمني تختاره.
- الدفع (push). يرسل نظامك شخصًا واحدًا إلى Polzy لحظة تغيّره، موقّعًا بسرّ مشترك بينكما، فيطبّقه Polzy فورًا.
في الحالتين، يحوّل ربط الحقول نفسه سجلاتك إلى أشخاص في Polzy.
مزامنة الأشخاص متاحة في خطة Team وما فوقها، ولا يستطيع ربط مصدر إلا مسؤولو مساحة العمل. ويتطلب الدفع أيضًا صفحة التكاملات، المتاحة في خطة Business، لنسخ العنوان الذي يرسل إليه نظامك.
قبل أن تبدأ
تحتاج إلى:
- أن تكون مسؤولًا في مساحة عمل Polzy، على خطة Team أو أعلى، مع تفعيل مزامنة الأشخاص من الإعدادات ← عام ← ما تقوم به مساحة العمل هذه.
- نقطة نهاية على الإنترنت العام، تُقدَّم عبر HTTPS، تُعيد قائمة JSON بالأشخاص — ومطوّر يستطيع تعديلها. لا يستدعي Polzy العناوين الخاصة أو الداخلية.
- معرّف
idفريد لكل شخص. يستخدمه Polzy للتعرّف على الأشخاص من مزامنة إلى أخرى. - أن تكون الحقول التي تريد تجميع النتائج حسبها مضافة في Polzy.
تتزامن مساحة العمل من مصدر واحد في كل مرة. إذا كان هناك مصدر آخر مربوط، فافصله أولًا. وإذا كانت مؤسستك تزوّد الأشخاص عبر SCIM، فلا يمكن ربط أي مصدر إطلاقًا — راجع SCIM.
ما تُعيده نقطة النهاية
يُعيد طلب GET إلى نقطة النهاية الأشخاصَ، كقائمة في أعلى الاستجابة أو في مسار داخلها:
{
"data": {
"users": [
{
"id": "4821",
"email": "anouk@acme.com",
"first_name": "Anouk",
"last_name": "Jansen",
"phone": "+31612345678",
"is_active": true,
"department": "Sales",
"manager_email": "rahul@acme.com"
}
]
},
"meta": { "next_cursor": "eyJwYWdlIjoyfQ" }
}
هنا تكون قيمة مسار البيانات (JSON) هي data.users؛ أما إذا كانت القائمة في أعلى الاستجابة، فاتركه فارغًا. ويمكن للمسارات أن تدخل في القوائم أيضًا، مثل results[0].people.
لكل طلب 30 ثانية للاستجابة. إذا كانت نقطة النهاية تقسّم النتائج إلى صفحات، فأخبر Polzy بالطريقة:
- عبر رابط أو مؤشّر. ضع الحقل الذي يحمله في حقل الصفحة التالية، مثل
meta.next_cursor. يُستدعى العنوان الكامل كما هو، أما المؤشّر فيُضاف إلى عنوان نقطة النهاية بالشكل?cursor=…، أو بالاسم الموجود في معامل الصفحة. يتوقف Polzy حين يكون الحقل فارغًا. - عبر رقم الصفحة. اترك حقل الصفحة التالية فارغًا وضع اسم المعامل في معامل الصفحة، مثل
page. يطلب Polzy الصفحة 2 ثم 3 وهكذا، ويتوقف عند أول صفحة فارغة.
يقرأ Polzy 500 صفحة على الأكثر في كل مزامنة.
ربط واجهتك في Polzy
- افتح جهات الاتصال ← المزامنة والحقول.
- ضمن المصادر المتاحة، ابحث عن Custom API واختر ربط. تُفتح لوحة من ثلاث خطوات: الاتصال وإعدادات المزامنة وربط الحقول.
- أدخل رابط URL لنقطة نهاية API، ومسار البيانات (JSON) وحقول تقسيم الصفحات إن احتجت إليها.
- اختر نوع المصادقة واملأ ما يطلبه: Bearer Token؛ أو اسم ترويسة API Key وقيمة API Key؛ أو اسم المستخدم وكلمة المرور لـ المصادقة الأساسية؛ أو لا شيء مع بدون. أضف أي ترويسة أخرى تحتاجها نقطة النهاية ضمن ترويسات مخصصة.
- للدفع، أدخل سلسلة عشوائية طويلة في سرّ توقيع الويب هوك، وأعطِ السلسلة نفسها لمطوّرك. وإلا فاتركه فارغًا.
- اختر اختبار الاتصال. تعني رسالة Successfully connected to API. Found N users. أن Polzy استطاع قراءة نقطة النهاية.
- اختر التالي، وراجع إعدادات المزامنة، ثم اختر التالي مرة أخرى، واربط الحقول (أدناه)، ثم اختر ربط.
تُخزَّن الرموز وكلمات المرور وسرّ التوقيع وقيمة كل ترويسة مخصصة مشفّرةً، ولا تُستخدم إلا لاستدعاء نقطة النهاية.
إعدادات المزامنة
| الإعداد | ماذا يفعل | الافتراضي |
|---|---|---|
| تكرار المزامنة | عدد مرات قراءة Polzy لنقطة النهاية: كل 30 دقيقة، أو كل ساعة، أو كل 4 ساعات، أو يوميًا. | كل ساعة |
| تعطيل المستخدمين المحذوفين | من جلبه Polzy من واجهتك ولم يعد يظهر فيها يُعطَّل في المزامنة التالية. | مفعّل |
| إرسال رسائل دعوة عبر البريد الإلكتروني | يتلقى الأعضاء الجدد الذين لديهم بريد إلكتروني دعوة لتسجيل الدخول إلى Polzy. ولا تتلقاها جهات الاتصال أبدًا. | مفعّل |
| الدور الافتراضي | الدور الذي يحصل عليه الأعضاء الجدد: مُشاهد أو محرّر أو مسؤول. ينطبق فقط على من تنشئهم المزامنة. | مُشاهد |
| حفظ البيانات الخام | يحتفظ بنسخة من كل سجل كما أرسلته واجهتك بجانب الشخص في Polzy. أبقه معطّلًا ما لم تكن تتحقق من مشكلة في الربط: فهو يخزّن بيانات شخصية أكثر مما تحتاج. | معطّل |
يتبع وصول أشخاصك كأعضاء أو كجهات اتصال جمهورَ مساحة عملك: أعضاء في مساحة عمل للموظفين، يستطيعون تسجيل الدخول ويشغلون مقعدًا؛ وجهات اتصال في مساحة عمل للعملاء أو مستخدمي المنتج أو ضيوف الفعاليات، يكتفون بالإجابة.
ربط الحقول
يقرأ الربط الافتراضي email وfirst_name وlast_name وphone وis_active. أما الباقي فتربطه بنفسك: فعّل تخطيط الحقول المخصص واكتب لكل حقل المسار في سجلاتك الذي يملؤه — department وmanager_email وplan وprofile.country. تقترح القائمة أسماء شائعة، وتُكتب المسارات بالأسلوب نفسه المستخدم في مسار البيانات. لكل صف أيضًا قيمة في إذا كان فارغًا، استخدم، تُكتب حين لا يحتوي السجل شيئًا لذلك الحقل؛ أما القيمة التي ترسلها واجهتك فلا تُستبدل أبدًا.
أمور تجدر معرفتها:
- أمثلة حقيقية. بعد الربط، اختر الإعدادات في المزامنة والحقول وافتح ربط الحقول من جديد: تشمل الاقتراحات حينها كل مسار في خمسة سجلات حقيقية، لكل منها مثال.
- حالة النشاط. القيمة false أو 0 أو no أو inactive أو terminated أو leave أو disabled أو suspended أو archived تعطّل الشخص؛ وأي قيمة أخرى، أو عدم وجود قيمة، يُبقيه نشطًا.
- المديرون. اربط المدير بحقل يحمل البريد الإلكتروني للمدير أو رقمه الوظيفي أو معرّفه
idفي واجهتك. يُنشأ الربط حين يكون المدير موجودًا في Polzy أيضًا. يحتاج المديرون إلى تفعيل التسلسل الإداري في مساحة العمل. - لا تُملأ إلا حقول مساحة عملك. أضف حقلًا عبر إضافة حقل في المزامنة والحقول قبل ربطه. ولمقارنة النتائج حسبه، اجعله حقلًا من نوع قائمة وفعّل المجموعات.
المعاينة وتشغيل المزامنة الأولى
- في المزامنة والحقول، اختر معاينة مزامنة ضمن سجل المزامنة. يحسب Polzy ما ستضيفه المزامنة وتحدّثه وتعطّله دون أن يغيّر شيئًا، ويفتح السجل حيث تظهر النتيجة بوصف معاينة.
- راجع المعاينة، وصحّح الربط من الإعدادات عند الحاجة، ثم اختر مزامنة الآن.
يُطابَق الأشخاص بمعرّفهم id، ثم بالبريد الإلكتروني، فمن أضفته يدويًا من قبل يُحدَّث بدلًا من أن يُضاف مرتين.
دفع التغييرات لحظة حدوثها
يرسل الدفع شخصًا واحدًا في كل مرة إلى Polzy، موقّعًا، كلما تغيّر. وتستمر المزامنات المجدولة إلى جانبه وتلتقط ما فاته — لذا ما زال Polzy يحتاج إلى نقطة النهاية أعلاه، حتى لو كانت تُعيد قائمة فارغة.
- افتح في Polzy التكاملات، ثم Custom API، وانسخ العنوان الظاهر تحت الاستقبال. هذا العنوان مخصص لاتصالك وينتهي بـ
/api. - تأكد من أن السرّ نفسه محفوظ في سرّ توقيع الويب هوك ضمن الإعدادات وفي نظامك.
- من نظامك، أرسل طلب
POSTإلى ذلك العنوان، مع الشخص بصيغة JSON وثلاث ترويسات:
| الترويسة | القيمة |
|---|---|
X-Polzy-Timestamp | وقت Unix الحالي بالثواني. |
X-Polzy-Signature | قيمة HMAC-SHA256 الست عشرية للطابع الزمني ونقطة والجسم بالضبط: <timestamp>.<body>، محسوبة بالسرّ. |
X-Polzy-Event-Id | معرّف لهذا التغيير، يبقى نفسه إذا أعدت إرساله. |
الجسم هو الشخص، بأسماء الحقول نفسها التي تُعيدها نقطة النهاية، فيُطبَّق الربط نفسه. ويمكن أيضًا تغليفه بالشكل { "user": { … } } أو { "employee": { … } }. يجب أن يحمل المعرّف id والحقول التي تغيّرت — فالجسم الذي يحمل id وحده يُقبَل لكنه لا يغيّر شيئًا. لتعطيل شخص، أرسله مع "is_active": false، أو مع ما يقرأه ربطك لـ حالة النشاط.
في Node.js:
import crypto from 'node:crypto';
const body = JSON.stringify({
id: '4821',
email: 'anouk@acme.com',
first_name: 'Anouk',
last_name: 'Jansen',
department: 'Operations',
is_active: true,
});
const timestamp = Math.floor(Date.now() / 1000).toString();
const signature = crypto
.createHmac('sha256', process.env.POLZY_SIGNING_SECRET)
.update(`${timestamp}.${body}`)
.digest('hex');
await fetch(process.env.POLZY_RECEIVING_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Polzy-Timestamp': timestamp,
'X-Polzy-Signature': signature,
'X-Polzy-Event-Id': 'person-4821-2026-10-31T09:12:00Z',
},
body,
});
في Python:
import hashlib, hmac, json, os, time, requests
body = json.dumps({"id": "4821", "email": "anouk@acme.com", "department": "Operations", "is_active": True})
timestamp = str(int(time.time()))
signature = hmac.new(
os.environ["POLZY_SIGNING_SECRET"].encode(),
f"{timestamp}.{body}".encode(),
hashlib.sha256,
).hexdigest()
requests.post(
os.environ["POLZY_RECEIVING_URL"],
data=body,
headers={
"Content-Type": "application/json",
"X-Polzy-Timestamp": timestamp,
"X-Polzy-Signature": signature,
"X-Polzy-Event-Id": "person-4821-2026-10-31T09:12:00Z",
},
)
وقّع البايتات التي ترسلها بالضبط: حوّل الجسم إلى نص مرة واحدة وأرسل السلسلة نفسها. وهذا ما يجيب به Polzy:
| الإجابة | المعنى |
|---|---|
201 مع { "received": true, "events": 1 } | مقبول. يظهر التغيير في السجل الكامل كتشغيل موسوم بـ ويب هوك. |
201 مع { "received": true, "duplicate": true } | عولج هذا الـ X-Polzy-Event-Id من قبل؛ ولم يُنفَّذ شيء مرتين. |
401 مع { "error": "Invalid webhook signature", "statusCode": 401 } | لا يوجد سرّ محفوظ في Polzy، أو التوقيع غير مطابق، أو يبعد الطابع الزمني أكثر من خمس دقائق عن الآن. |
429 | أكثر من 1,200 استدعاء في الدقيقة من عنوان واحد. انتظر مدة Retry-After ثم أعد الإرسال. |
إذا كانت مساحة عملك متوقفة مؤقتًا لتجاوزها خطتها، تُؤكَّد الاستدعاءات ولا يُطبَّق شيء.
استدعاءات موقّعة دون طابع زمني
كان الإصدار الأول من الدفع يوقّع الجسم وحده، دون X-Polzy-Timestamp. ما زالت هذه الاستدعاءات مقبولة حاليًا، وما دام نظامك يرسلها، تعرض الإعدادات ← واجهة البرمجة ← الويب هوك تحذيرًا بالتاريخ الذي ستُرفض بدءًا منه. ومن ذلك التاريخ، يجيب Polzy عنها بـ 401 وCalls without X-Polzy-Timestamp are refused since متبوعة بذلك التاريخ. انتقل إلى التوقيع الموضّح أعلاه قبل ذلك — راجع الويب هوك.
استكشاف الأخطاء وإصلاحها
| ما تراه | السبب | ما تفعله |
|---|---|---|
| A valid https API URL is required | العنوان لا يبدأ بـ https://. | قدّم نقطة النهاية عبر HTTPS. |
| API response is not an array. Got: object. Check your Data Path configuration. | القائمة داخل الاستجابة، أو يشير مسار البيانات إلى المكان الخطأ. | اضبط مسار البيانات (JSON) على مسار القائمة، مثل data.users. |
| Authentication failed. Check your credentials. | أجابت نقطة النهاية بـ 401. | تحقّق من نوع المصادقة ومن الرمز أو المفتاح أو كلمة المرور. |
| Access forbidden. Check API permissions. | أجابت نقطة النهاية بـ 403. | امنح بيانات الاعتماد التي يستخدمها Polzy صلاحية الوصول إلى القائمة. |
| API endpoint not found. Check the URL. | أجابت نقطة النهاية بـ 404. | تحقّق من العنوان. |
| Connection refused. Check if the API URL is correct and accessible. | لم يُجب شيء على ذلك العنوان. | تأكد من إمكانية الوصول إلى نقطة النهاية من الإنترنت. |
| يظهر الجميع مرتين، أو لا يُعطَّل أحد | سجلاتك لا تحتوي id في المستوى الأعلى، أو يتغيّر بين المزامنات. | امنح كل سجل id ثابتًا. |
| تُرفض التغييرات المدفوعة مع Invalid webhook signature | السرّ مختلف، أو تغيّر الجسم بعد التوقيع، أو ساعة الخادم غير مضبوطة. | قارن السرّين، ووقّع السلسلة التي ترسلها بالضبط، واضبط ساعتك. |
| لم يتم استيراد N شخص: لا توجد مقاعد متبقية في الخطة. | يشغل الأعضاء مقاعد، والخطة ممتلئة. | حرّر مقاعد أو غيّر الخطة، ثم اختر مزامنة الآن. |
معلومات مفيدة
- الحدود. المزامنة التي تتجاوز مقاعدك أو جهات اتصالك تستورد من يتسع لهم، وتتوقف عندهم، وتُبلغ المسؤولين — راجع الاستخدام والحدود.
- شخص واحد في كل دفعة. أرسل استدعاءً منفصلًا لكل شخص تغيّر.
- قطع الاتصال أو الإزالة. من الإعدادات، يوقف قطع الاتصال المزامنة ويحتفظ بالإعدادات والسجل لتعيد الربط لاحقًا، بينما تحذف إزالة الاتصال. في الحالتين يبقى الأشخاص الذين تمت مزامنتهم في Polzy ولا يعودون يُحدَّثون، وتُرفض التغييرات المدفوعة.
- بقية واجهة API. لقراءة النتائج أو إنشاء الإجراءات من نظامك، استخدم مفتاح API ومرجع API.
مقالات ذات صلة
يمكن للأعضاء المسجّلين سؤال Polzy أو مراسلة الفريق من صفحة الدعم. تعتمد سرعة ردّنا على خطتك.