ویب ہکس
ویب ہک کنکشنز کے ساتھ Zealy کی صلاحیتوں کو بہتر بنائیں۔
بذریعہ louis, Fredrika, benjamin

اس صفحے پر
Zealy ویب ہک نو میں سے کسی کمیونٹی ایونٹ کے واقع ہونے پر آپ کے منتخب کردہ URL پر HTTP POST بھیجتا ہے، جن میں ممبر کا شامل ہونا، کوئسٹ کلیم کا کامیاب یا ناکام ہونا، اسپرنٹ کا آغاز، اور صارف کا بین ہونا شامل ہیں۔ ہر پے لوڈ میں ایونٹ آئی ڈی، قسم، ڈیٹا، ملی سیکنڈ ٹائم اسٹیمپ، اور وہ سیکرٹ ہوتا ہے جو درخواست کے اصلی ہونے کا ثبوت دیتا ہے۔
بنیادی باتیں
Zealy فراہم کرتا ہے ویب ہکس جو آپ کو ڈیٹا بننے یا اپ ڈیٹ ہونے پر HTTP پش نوٹیفکیشنز وصول کرنے کی اجازت دیتے ہیں۔ اس سے آپ Zealy کے اوپر انٹیگریشنز بنا سکتے ہیں۔ آپ CI بلڈز ٹرگر کر سکتے ہیں، کوئسٹ ڈیٹا پر حسابات کر سکتے ہیں، یا مخصوص شرائط پر پیغامات بھیج سکتے ہیں – جو آپ چاہیں۔
اپنے ویب ہکس سیٹ اپ کرنے کے لیے براہ کرم Settings > Integrations > Zapier & Webhooks پر جائیں۔
ویب ہک کیسے کام کرتا ہے؟
ویب ہک پش دراصل ایک HTTP POST درخواست ہے، جو آپ کے منتخب کردہ URL پر بھیجی جاتی ہے۔ ڈیٹا اپ ڈیٹ ہونے پر پش خود بخود ٹرگر ہوتی ہے۔ پے لوڈ میں کون سا ڈیٹا شامل ہوتا ہے کی مثال کے لیے دیکھیں ویب ہک پے لوڈ.
آپ کا ویب ہک کنزیومر ایک سادہ HTTP اینڈ پوائنٹ ہے۔ اسے درج ذیل شرائط پوری کرنی ہوں گی:
- یہ عوامی طور پر قابل رسائی HTTPS، غیر لوکل ہوسٹ URL پر دستیاب ہو
- یہ Zealy ویب ہک پش (HTTP POST درخواست) کا جواب
HTTP 200("OK") کے ساتھ دے
اگر ڈیلیوری ناکام ہو (یعنی سرور دستیاب نہ ہو، جواب میں 5 سیکنڈ سے زیادہ وقت لگے، جواب کا باڈی 5000 بائٹس سے بڑا ہو یا غیر-200 HTTP اسٹیٹس کوڈ کے ساتھ جواب دے)، تو پش 15 بار دوبارہ بھیجی جائے گی۔ یہاں ایکسپونینشل بیک آف تاخیر استعمال ہوتی ہے: کوشش تقریباً 10 منٹ بعد، پھر 30 منٹ بعد، اور اسی طرح دوبارہ کی جائے گی۔ اگر ویب ہک URL غیر جوابدہ رہے تو Zealy ویب ہک کو غیر فعال کر سکتا ہے، اور اسے دوبارہ دستی طور پر فعال کرنا ہوگا۔
اس بات کو یقینی بنانے کے لیے کہ ویب ہک POST واقعی Zealy نے بنایا ہے، ہم ایک بے ترتیب سیکرٹ بناتے ہیں جو درخواست کے باڈی میں secret فیلڈ کے ساتھ منسلک ہوگا۔
ویب ہکس کے بارے میں مزید معلومات کے لیے، کئی اچھے ذرائع ہیں:
- RequestBin: Webhooks – The Definitive Guide
- requestbin.com ویب ہکس کی جانچ کے لیے ایک بہترین ٹول ہے
- GitHub Developer Guide: Webhooks
میں اسے کس لیے استعمال کر سکتا ہوں؟
- Zapier کے ساتھ انٹیگریٹ کریں
- حسب ضرورت انعامات کو خودکار بنائیں
- جائزے کے منتظر کوئسٹس کی Telegram پر اطلاع دیں
اور بہت کچھ!
Zealy ویب ہکس کے ساتھ آغاز
- شناخت کریں کہ آپ کون سے ایونٹس کی نگرانی کرنا چاہتے ہیں۔
- ایونٹ ڈیٹا POST درخواستوں کو وصول کرنے کے لیے ویب ہک اینڈ پوائنٹ فنکشن تیار کریں۔
- Settings > Integrations > Zapier & Webhooks میں Webhooks Dashboard کا استعمال کرتے ہوئے اپنا اینڈ پوائنٹ Zealy میں رجسٹر کریں۔
- اپنے ویب ہک اینڈ پوائنٹ کو محفوظ بنائیں۔
ایک سادہ ویب ہک کنزیومر بنانا
آپ Netlify Functions جیسی چیز استعمال کرنے پر غور کر سکتے ہیں، جو سادہ HTTP(S) اینڈ پوائنٹس تعینات کرنے کا ایک آسان طریقہ فراہم کرتا ہے: https://www.netlify.com/blog/2018/09/13/how-to-run-express.js-apps-with-netlify-functions/.
// server.js
//
// Use this sample code to handle webhook events in your integration.
//
// 1) Paste this code into a new file (server.js)
//
// 2) Install dependencies
// npm install express
//
// 3) Run the server on http://localhost:4242
// node server.js
// The library needs to be configured with your account's secret key.
// Ensure the key is kept out of any version control system you might be using.
const express = require('express');
const app = express();
// This is your Zealy webhook secret for testing your endpoint locally.
const endpointSecret = '5888a6800dbac634e52d8504f097e064';
app.post('/webhook', express.raw({ type: 'application/json' }), (request, response) => {
const payload = req.body;
// Does createdAt make more sense than time?
const { id, type, data, time, secret } = payload;
if (secret === endpointSecret) {
// Do something neat with the data received!
}
// Return a 200 response to acknowledge receipt of the event
response.send();
});
app.listen(4242, () => console.log('Running on port 4242'));سیٹنگز میں کنفیگر کرنا
Settings > Integrations > Webhooks میں ویب ہک اور اس کے زیر نگرانی ایونٹس سیٹ اپ کریں۔
ویب ہک پے لوڈ
ویب ہک HTTP پے لوڈ میں اس کے HTTP ہیڈرز اور اس کے درخواست باڈی دونوں میں معلومات شامل ہوں گی۔
پے لوڈ درج ذیل HTTP ہیڈرز کے ساتھ بھیجا جائے گا:
User-Agent: Zealy-Webhook
Content-Type: application/json; charset=utf-8
{
id: string // unique ID for this event (UUID v4)
type: "JOINED_COMMUNITY" | "LEFT_COMMUNITY" | "QUEST_SUCCEEDED" | "QUEST_CLAIMED" | "QUEST_FAILED" | "QUEST_CLAIM_STATUS_UPDATED" | "SPRINT_STARTED" | "SPRINT_ENDED" | "USER_BANNED", // event type
data: EventData, // event data, see below
time: number, // timestamp, in milliseconds
secret: string, // secret generated when you created your webhook, used for checking origin
}فی ایونٹ EventData فیلڈ:
// JOINED_COMMUNITY
type JoinedCommunityEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
};
// LEFT_COMMUNITY
type LeftCommunityEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
};
// QUEST_SUCCEEDED
type QuestSucceededEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
quest: WebhookQuestPayload;
taskInputs?: Array<{
taskId: string, // task ID (uuid v4)
taskType: 'number' | 'date' | 'api' | 'text' | 'discord' | 'url' | 'telegram' | 'quiz' | 'invites' | 'visitLink' | 'file' | 'poll' | 'opinion' | 'twitterFollow' | 'twitterSpace' | 'tweetReact' | 'tweet',
input: WebhookQuestTaskInputPayload,
}>;
status: 'success';
};
// QUEST_CLAIMED
type QuestClaimedEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
quest: WebhookQuestPayload;
taskInputs?: Array<{
taskId: string, // task ID (uuid v4)
taskType: 'number' | 'date' | 'api' | 'text' | 'discord' | 'url' | 'telegram' | 'quiz' | 'invites' | 'visitLink' | 'file' | 'poll' | 'opinion' | 'twitterFollow' | 'twitterSpace' | 'tweetReact' | 'tweet',
input: WebhookQuestTaskInputPayload,
}>;
};
// QUEST_FAILED
type QuestFailedEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
quest: WebhookQuestPayload;
taskInputs?: Array<{
taskId: string, // task ID (uuid v4)
taskType: 'number' | 'date' | 'api' | 'text' | 'discord' | 'url' | 'telegram' | 'quiz' | 'invites' | 'visitLink' | 'file' | 'poll' | 'opinion' | 'twitterFollow' | 'twitterSpace' | 'tweetReact' | 'tweet',
input: WebhookQuestTaskInputPayload,
}>;
};
// QUEST_CLAIM_STATUS_UPDATED
type QuestClaimStatusUpdatedEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
quest: WebhookQuestPayload;
taskInputs?: Array<{
taskId: string, // task ID (uuid v4)
taskType: 'number' | 'date' | 'api' | 'text' | 'discord' | 'url' | 'telegram' | 'quiz' | 'invites' | 'visitLink' | 'file' | 'poll' | 'opinion' | 'twitterFollow' | 'twitterSpace' | 'tweetReact' | 'tweet',
input: WebhookQuestTaskInputPayload,
}>;
status: 'success' | 'pending' | 'failed';
};
// SPRINT_STARTED
type SprintStartedEventData = {
community: WebhookCommunityPayload;
sprint: WebhookSprintPayload;
};
// SPRINT_ENDED
type SprintEndedEventData = {
community: WebhookCommunityPayload;
sprint: WebhookSprintPayload;
};
// USER_BANNED
type UserBannedEventData = {
community: WebhookCommunityPayload;
user: WebhookUserPayload;
};عام ہستیاں:
type WebhookCommunityPayload = {
id: string; // community ID (uuid V4)
name: string; // community name
subdomain: string; // community subdomain
blockchain: string;
discord: string | null; // discord URI of the community, e.g., https://discord.gg/zealy
twitter: string | null; // twitter handle of the community, e.g., zealy_io
website: string | null; // website URI of the community
};type WebhookUserPayload = {
id: string; // user ID (uuid V4)
name: string | null; // user display name
twitter: {
id: string; // user twitter ID
username: string | null; // user twitter handle
} | null;
discord: {
id: string; // user discord ID
handle: string | null; // user discord handle
} | null;
email: string | null; // user email
addresses: Dict<string>; // key/value dictionary for wallets
verifiedAddresses: Dict<string>; // key/value dictionary for all users verified wallets
};type WebhookQuestPayload = {
id: string; // quest ID (uuid V4)
name: string; // quest display name
categoryId: string; // category ID (uuid V4)
categoryName: string | null; // category display name
xp: number | null; // XP reward
published: boolean | null; // true if quest is published, false otherwise
autoValidate: boolean | null;
tasks: TaskPayload[];
lastReviewerId: string; // user ID (uuid V4)
};type WebhookQuestTaskInputPayload =
| { } // for task type 'visitLink', 'invites', 'discord', 'telegram', 'twitterFollow', 'twitterSpace'
| { value: string } // for task type 'text', 'date', 'url', 'opinion'
| { value: number } // for task type 'number'
| { values: string[] } // for task type 'poll', 'quiz'
| { fileUrls: string[] } // for task type 'fileUrls'
| { tweetId?: string } // for task type 'tweetReact', 'tweet'
| { requestId: string, statusCode: number } // for task type 'api'type WebhookSprintPayload = {
id: string; // sprint ID (uuid V4)
startingAt: ISOString; // sprint starting date - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
endingAt: ISOString; // sprint ending date
};ویب ہکس کو محفوظ بنانا
ویب ہک بنانے سے ایک بے ترتیب سیکرٹ بنے گا جسے آپ تصدیق کے لیے استعمال کر سکتے ہیں کہ درخواست Zealy ویب ہکس سے آ رہی ہے۔ ویب ہک انسپکٹ پینل کے اوپر دائیں جانب سیکرٹ کاپی کریں اور تصدیق کریں کہ POST درخواست کے باڈی میں سیٹ سیکرٹ وہی ہے۔
اگر سیکرٹ لیک ہو جائے، تو آپ اسی صفحے سے اسے دوبارہ جنریٹ کر سکتے ہیں۔

ویب ہکس کی جانچ
ویب ہک کے انسپکٹ پینل سے آپ دستی طور پر ٹیسٹ ایونٹ ٹرگر کر سکتے ہیں۔ اوپر دائیں جانب بٹن پر کلک کریں اور ‘Send test event’ منتخب کریں۔ آپ زیر نگرانی ایونٹ اقسام میں سے ایک ایونٹ کی قسم منتخب کر سکیں گے۔ موک ڈیٹا کے ساتھ ایک ایونٹ ٹرگر ہوگا اور اسٹیٹس دکھایا جائے گا۔
ڈی بگنگ
اگر آپ Webhooks صفحے سے ویب ہک پر کلک کریں تو آپ ویب ہک کے ذریعے ٹرگر ہونے والے تمام ماضی کے ایونٹس کے لاگز دیکھ سکتے ہیں۔ اسٹیٹس کے مطابق فلٹر کر کے آپ لاگز کا استعمال کر سکتے ہیں تاکہ معلوم ہو سکے کہ کچھ غلط کیوں ہوا۔ ہر ایونٹ کے لیے، آپ موصول ہونے والا ایرر پیغام اور بھیجی گئی درخواست دیکھ سکتے ہیں۔
آپ اس صفحے سے کوئی بھی ایونٹ دوبارہ بھیج بھی سکتے ہیں۔
