Skip to content

ვებჰუკები

OpenPR იყენებს ვებჰუკებს გარე სისტემების რეალურ დროში შეტყობინებისთვის მდგომარეობის ცვლილებების შესახებ. ყოველი ვებჰუკის მიწოდება ხელმოწერილია HMAC-SHA256-ით, ჩაწერილია webhook_deliveries ცხრილში აუდიტისთვის და მოიცავს მდიდარ კონტექსტუალურ მონაცემებს ქვედა ავტომატიზაციისთვის.

როგორ მუშაობენ ვებჰუკები

Section titled “როგორ მუშაობენ ვებჰუკები”
  1. ხდება მდგომარეობის ცვლილება (ამოცანა შეიქმნა, სპრინტი დაიწყო, წინადადება წარდგენილია და ა.შ.)
  2. OpenPR ამოწმებს webhooks ცხრილს სამუშაო სივრცეში აქტიური ვებჰუკებისთვის, რომლებიც ამ მოვლენის ტიპზე არიან გამოწერილი
  3. ყოველი შესაბამისი ვებჰუკისთვის იქმნება პეილოადი ერთეულის სრული მონაცემებით
  4. პეილოადი ხელმოწერილია ვებჰუკის საიდუმლო გასაღებით HMAC-SHA256-ის გამოყენებით
  5. HTTP POST იგზავნება ვებჰუკის URL-ზე ხელმოწერის ჰედერებით
  6. მიწოდების შედეგი (სტატუსი, სხეული, ხანგრძლივობა) ჩაიწერება webhook_deliveries-ში

მოვლენების ტიპები

Section titled “მოვლენების ტიპები”

OpenPR ასხივებს 30 მოვლენის ტიპს, ორგანიზებულს შვიდ კატეგორიად.

ამოცანების მოვლენები (5)

Section titled “ამოცანების მოვლენები (5)”
მოვლენაროდის ისვრის
issue.createdახალი ამოცანა შეიქმნა
issue.updatedამოცანის ველები შეიცვალა (მოიცავს changes სხვაობას)
issue.assignedამოცანის მინიჭებული პირი შეიცვალა (მოიცავს ძველ/ახალ მინიჭებულის ID-ებს)
issue.state_changedამოცანის მდგომარეობა შეიცვალა (მოიცავს ძველ/ახალ მდგომარეობას)
issue.deletedამოცანა წაიშალა

კომენტარების მოვლენები (3)

Section titled “კომენტარების მოვლენები (3)”
მოვლენაროდის ისვრის
comment.createdამოცანაზე კომენტარი დაემატა (მოიცავს mentions მასივს)
comment.updatedკომენტარი დარედაქტირდა
comment.deletedკომენტარი წაიშალა

ლეიბლების მოვლენები (2)

Section titled “ლეიბლების მოვლენები (2)”
მოვლენაროდის ისვრის
label.addedლეიბლი მიმაგრდა ამოცანაზე
label.removedლეიბლი ამოიშალა ამოცანიდან

სპრინტის მოვლენები (2)

Section titled “სპრინტის მოვლენები (2)”
მოვლენაროდის ისვრის
sprint.startedსპრინტის სტატუსი შეიცვალა აქტიურზე
sprint.completedსპრინტი მონიშნულია როგორც დასრულებული

პროექტებისა და წევრების მოვლენები (5)

Section titled “პროექტებისა და წევრების მოვლენები (5)”
მოვლენაროდის ისვრის
project.createdახალი პროექტი შეიქმნა
project.updatedპროექტის ველები შეიცვალა
project.deletedპროექტი წაიშალა
member.addedმომხმარებელი დაემატა სამუშაო სივრცეში
member.removedმომხმარებელი ამოიშალა სამუშაო სივრციდან

მმართველობის მოვლენები (9)

Section titled “მმართველობის მოვლენები (9)”
მოვლენაროდის ისვრის
proposal.createdახალი წინადადება შეიქმნა
proposal.updatedწინადადების ველები შეიცვალა
proposal.deletedწინადადება წაიშალა
proposal.submittedწინადადება წარდგენილია განსახილველად
proposal.voting_startedკენჭისყრა გაიხსნა წინადადებაზე
proposal.archivedწინადადება არქივირებულია
proposal.vote_castხმა მიცემულია წინადადებაზე
veto.exercisedვეტოს მფლობელმა გამოიყენა ვეტოს უფლება
veto.withdrawnვეტო გაუქმდა

ესკალაციისა და აპელაციის მოვლენები (2)

Section titled “ესკალაციისა და აპელაციის მოვლენები (2)”
მოვლენაროდის ისვრის
escalation.startedესკალაციის პროცესი დაიწყო
appeal.createdაპელაცია შეტანილია გადაწყვეტილების წინააღმდეგ

კონფიგურაციის მოვლენები (1)

Section titled “კონფიგურაციის მოვლენები (1)”
მოვლენაროდის ისვრის
governance_config.updatedმმართველობის კონფიგურაცია შეიცვალა

ხელოვნური ინტელექტის ამოცანების მოვლენები (2)

Section titled “ხელოვნური ინტელექტის ამოცანების მოვლენები (2)”
მოვლენაროდის ისვრის
ai.task_completedხელოვნური ინტელექტის ამოცანა წარმატებით დასრულდა
ai.task_failedხელოვნური ინტელექტის ამოცანა ჩავარდა ხელახალი ცდების ამოწურვის შემდეგ

ვებჰუკის კონფიგურაცია

Section titled “ვებჰუკის კონფიგურაცია”

ვებჰუკები კონფიგურირებულია სამუშაო სივრცის მიხედვით API-ის საშუალებით. ყოველი ვებჰუკი მიუთითებს:

ველიტიპიაღწერა
urlstringHTTPS ბოლო წერტილი მოვლენების მისაღებად
secretstringსაზიარო საიდუმლო HMAC-SHA256 ხელმოწერისთვის
eventsJSONBგამოწერილი მოვლენების ტიპების მასივი
activebooleanვებჰუკის ჩართვა ან გამორთვა
bot_user_idUUID (არჩევითი)თუ დაყენებულია, ჩართავს ბოტის კონტექსტის გამდიდრებას ხელოვნური ინტელექტის ამოცანების გაშვებისთვის

როდესაც bot_user_id დაყენებულია და მოვლენა ეხება ამ ბოტზე მინიჭებულ ამოცანას, პეილოადი მოიცავს bot_context ობიექტს აგენტის გაშვების ინფორმაციით.

პეილოადის სტრუქტურა

Section titled “პეილოადის სტრუქტურა”

ყოველი ვებჰუკის მიწოდება მოიცავს ამ HTTP ჰედერებს:

ჰედერიმნიშვნელობა
Content-Typeapplication/json
User-AgentOpenPR-Webhook/1.0
X-Webhook-Signaturesha256=<hex-კოდირებული HMAC>
X-Webhook-Eventმოვლენის ტიპი (მაგ., issue.created)
X-Webhook-Deliveryმიწოდების უნიკალური UUID

პეილოადის სხეული

Section titled “პეილოადის სხეული”
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"event": "issue.created",
"timestamp": "2026-03-18T10:30:00.000Z",
"workspace": {
"id": "workspace-uuid",
"name": "My Workspace"
},
"project": {
"id": "project-uuid",
"name": "Backend API",
"key": "IM01"
},
"actor": {
"id": "user-uuid",
"name": "Admin",
"email": "admin@example.com",
"entity_type": "human"
},
"data": {
"issue": {
"id": "issue-uuid",
"key": "IM01-A1B2C3D4",
"title": "Fix authentication flow",
"description": "The login endpoint returns 500...",
"state": "todo",
"priority": "high",
"assignee_ids": ["bot-uuid"],
"label_ids": ["label-uuid"],
"sprint_id": "sprint-uuid",
"created_at": "2026-03-18T10:30:00.000Z",
"updated_at": "2026-03-18T10:30:00.000Z"
}
},
"bot_context": {
"is_bot_task": true,
"bot_id": "bot-uuid",
"bot_name": "Claude Agent",
"bot_agent_type": "claude-code",
"trigger_reason": "created",
"webhook_id": "webhook-uuid"
}
}

ბოტის კონტექსტი

Section titled “ბოტის კონტექსტი”

bot_context ველი არსებობს მხოლოდ მაშინ, როდესაც:

  1. ვებჰუკს აქვს bot_user_id კონფიგურირებული, და
  2. ამოცანა მინიჭებულია ამ ბოტ-მომხმარებელზე, ან
  3. ბოტი @მოხსენიებულია კომენტარში

trigger_reason ველი მიუთითებს, რატომ გააქტიურდა ბოტი:

მიზეზიროდის
createdამოცანა შეიქმნა ბოტით როგორც მინიჭებული პირი
assignedამოცანა მინიჭებულია ან განახლებულია ბოტით როგორც მინიჭებული პირი
status_changedამოცანის მდგომარეობა შეიცვალა
mentionedბოტი @მოხსენიებულია კომენტარში
completedხელოვნური ინტელექტის ამოცანა დასრულდა
failedხელოვნური ინტელექტის ამოცანა ჩავარდა

მოვლენის სპეციფიკური მონაცემები

Section titled “მოვლენის სპეციფიკური მონაცემები”

issue.updated, issue.assigned და issue.state_changed მოვლენებისთვის data ობიექტი მოიცავს changes ველს, რომელიც აჩვენებს რა შეიცვალა:

{
"data": {
"issue": { "..." : "..." },
"changes": {
"state": {
"old": "todo",
"new": "in_progress"
}
}
}
}

comment.created მოვლენებისთვის data მოიცავს mentions მასივს მომხმარებლის UUID-ებით:

{
"data": {
"comment": { "..." : "..." },
"issue": { "..." : "..." },
"mentions": ["user-uuid-1", "user-uuid-2"]
}
}

ხელმოწერის ვერიფიკაცია

Section titled “ხელმოწერის ვერიფიკაცია”

ვებჰუკის მიწოდების დასადასტურებლად, გამოთვალეთ მოთხოვნის სხეულის HMAC-SHA256 თქვენი ვებჰუკის საიდუმლოს გამოყენებით და შეადარეთ X-Webhook-Signature ჰედერში მოცემულ ხელმოწერას.

import hmac
import hashlib
def verify_webhook(secret: str, body: bytes, signature_header: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
const crypto = require("crypto");
function verifyWebhook(secret, body, signatureHeader) {
const expected =
"sha256=" +
crypto.createHmac("sha256", secret).update(body).digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signatureHeader)
);
}

მიწოდების ჩანაწერები

Section titled “მიწოდების ჩანაწერები”

ყოველი ვებჰუკის მიწოდება შენახულია webhook_deliveries ცხრილში:

  • მიწოდების UUID
  • ვებჰუკის ID
  • მოვლენის ტიპი
  • სრული პეილოადი (JSONB)
  • მოთხოვნის ჰედერები
  • პასუხის სტატუს კოდი
  • პასუხის სხეული
  • შეცდომის შეტყობინება (თუ მიწოდება ჩავარდა)
  • ხანგრძლივობა მილიწამებში
  • წარმატების ფლაგი
  • დროის ნიშანი

ვებჰუკის last_triggered_at დროის ნიშანი განახლდება ყოველი მიწოდების ცდის შემდეგ.

მიწოდების ქცევა

Section titled “მიწოდების ქცევა”
  • ტაიმაუტი: 10 წამი თითოეულ მიწოდების ცდაზე
  • ავტომატური ხელახალი ცდა არ ხდება: ჩავარდნილი მიწოდებები ჩაიწერება, მაგრამ ხელახლა არ ცდება (ხელოვნური ინტელექტის ამოცანების სისტემას აქვს საკუთარი ხელახალი ცდის მექანიზმი)
  • ასინქრონული გაშვება: ვებჰუკები გაეშვება ფონურ Tokio ამოცანაში და არ ბლოკავენ API-ის პასუხს
  • საუკეთესო მცდელობის პრინციპი: თუ პეილოადის კონსტრუქცია ჩავარდება, შეცდომა ჩაიწერება და ვებჰუკი გამოტოვდება