ServiceDesk Plus ve Jira Entegrasyonu Nasıl Yapılır? | Teknik Rehber

SDP & Jira Entegrasyon Dökümanı: Teknik Kurulum Klavuzu

ServiceDesk Plus → Jira Cloud

Entegrasyon Kurulum Rehberi

Versiyon1.0
PlatformSDP On-Premise + Jira Cloud
Hedef KitleSistem Yöneticileri / IT
DurumTamamlandı

1Genel Bakış ve Mimari

Bu entegrasyon, SDP On-Premise üzerindeki ticketların Jira Cloud'da otomatik olarak issue oluşturmasını sağlar. Teknisyen, SDP ticket detay sayfasındaki butona bastığında süreç başlar ve Jira'da yeni bir issue oluşturulur.

1.1 Entegrasyon Akışı

🖱 Buton Tıklama
📜 Page Script
⚙️ Callback Function
🔗 SDP API
🚀 Jira REST API
✅ Issue Oluşturuldu
1

Buton Tetikleme

Teknisyen SDP ticket sayfasındaki "Create JIRA Ticket" butonuna basar.

2

Page Script

SDP Page Script, URL'den ticket ID'sini alır ve Callback Function'ı POST isteği ile çağırır.

3

Callback Function

Deluge script, SDP API'den ticket detaylarını çeker (subject, description, item, tarih vb.).

4

Jira API Çağrısı

Callback function, toplanan verilerle Jira REST API'ye POST isteği gönderir.

5

Sonuç

Jira'da issue oluşturulur. Teknisyene başarı/hata mesajı gösterilir.

1.2 Kurulum Öncesi Gereken Bilgiler

BilgiAçıklamaÖrnek
SDP Sunucu URL (lokal)SDP'nin iç ağ adresihttps://itsm.firma.local
SDP Teknisyen URLTeknisyenlerin giriş yaptığı URLhttps://itsm.firma.com.tr
SDP Auth TokenSDP API için kimlik doğrulamaXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Jira DomainAtlassian instance adresifirma.atlassian.net
Jira Servis Hesabı EmailAPI işlemleri için kullanılacak hesapsdp-service@firma.com
Jira API TokenAtlassian API erişim anahtarıATATT3xFfGF0...
Jira Proje KeyHedef Jira projesi koduPROJE_KEY
Jira Issue Type IDOluşturulacak issue tipi10XXX

2Network / Firewall Kurulumu

SDP sunucusundan Jira Cloud'a erişim için firewall kuralı gereklidir. Bu adım atlanırsa Deluge script'ten Jira'ya bağlantı kurulamaz.

2.1 Gerekli Firewall Kuralı

KaynakHedefPortProtokolYön
SDP Sunucusu*.atlassian.net443HTTPS/TCPOutbound
SDP SunucusuJIRA_DOMAIN.atlassian.net443HTTPS/TCPOutbound

2.2 Bağlantı Testi — CMD (Sunucu Üzerinde)

curl -v https://JIRA_DOMAIN.atlassian.net
SonuçAnlamYapılacak İş
✅ HTML/JSON yanıtıBağlantı başarılıDevam edin
❌ ConnectTimeoutExceptionFirewall engelliyorIT'ye firewall kuralı açtırın
⚠️ SSL hatasıSertifika sorunuSSL ayarlarını kontrol edin

2.3 Deluge'dan Bağlantı Testi

SDP Admin > Automation > Custom Functions altında aşağıdaki test scriptini çalıştırın:

testUrl = "https://JIRA_DOMAIN.atlassian.net";
response = invokeurl
[
url: testUrl
type: GET
];
info response.toString();
return response.toString();
⚠️ Dikkat Eğer bu testten HTML login sayfası dönüyorsa bağlantı var demektir ancak Authorization header gönderilemiyordur. Sonraki adımlarda bu durumun üstesinden gelinecektir.

3Jira Hazırlık Adımları

3.1 Jira API Token Oluşturma

1

Atlassian Security Sayfası

https://id.atlassian.com/manage-profile/security/api-tokens adresine gidin.

2

Token Oluştur

"Create API Token" butonuna tıklayın. Token'a anlamlı bir isim verin (örn: SDP Integration).

3

Kopyala ve Sakla

Oluşturulan token'ı kopyalayın. Bu token bir daha gösterilmez!

⚠️ Önemli API Token kişiseldir. Her müşteri için ayrı bir servis hesabı oluşturup o hesaba ait token kullanmanız önerilir. Böylece birden fazla kullanıcı aynı token'ı paylaşabilir.

3.2 Base64 Authorization String Oluşturma

Jira REST API, Basic Auth için email ve API token'ın birleşik Base64 kodunu kullanır.

Windows CMD ile:

echo -n "email@firma.com:API_TOKEN" | base64

Online araç ile:

https://www.base64encode.org adresine gidin. email@firma.com:API_TOKEN formatında girin ve "Encode" butonuna basın.

ℹ️ Kullanım Elde ettiğiniz string, Deluge script'teki Authorization header'ına Basic öneki ile eklenir:
headers.put("Authorization", "Basic BASE64_STRING");

3.3 Jira Field ID'lerini Bulma

Proje ID Bulma:

curl --request GET \
--url "https://JIRA_DOMAIN.atlassian.net/rest/api/3/project/search" \
--user "email@firma.com:API_TOKEN" \
--header "Accept: application/json"

Issue Type ID Bulma:

curl --request GET \
--url "https://JIRA_DOMAIN.atlassian.net/rest/api/3/issuetype/project?projectId=PROJE_ID" \
--user "email@firma.com:API_TOKEN" \
--header "Accept: application/json"

Custom Field ID'leri Bulma:

curl --request GET \
--url "https://JIRA_DOMAIN.atlassian.net/rest/api/3/field" \
--user "email@firma.com:API_TOKEN" \
--header "Accept: application/json"

Response'da alan adlarını arayarak ilgili "id" değerlerini bulunuz. Örnek:

Alan AdıField ID FormatıTip
Ticket No Alanıcustomfield_XXXXXNumber
İşlem Kodu / Fiori / Raporcustomfield_XXXXXText
Talep Kanalıcustomfield_XXXXXDropdown
Sorumlu Modüllercustomfield_XXXXXMultiselect
İş Birimicustomfield_XXXXXGroup picker
Hata Tespit Tarihicustomfield_XXXXXDate (yyyy-MM-dd)
⚠️ Her Jira instance'ında field ID'leri farklıdır! Her müşteri ortamında API'den mutlaka kontrol edin.

3.4 Postman ile Test

Method: POST  |  URL: https://JIRA_DOMAIN.atlassian.net/rest/api/3/issue
Authorization: Basic Auth  |  Username: email  |  Password: api_token

{
"fields": {
"project": { "key": "PROJE_KEY" },
"issuetype": { "id": "ISSUE_TYPE_ID" },
"summary": "Test Ticket",
"description": {
"type": "doc", "version": 1,
"content": [{
"type": "paragraph",
"content": [{ "type": "text", "text": "Test açıklama" }]
}]
},
"customfield_XXXXX": "deger"
}
}
✅ Beklenen Sonuç Status 201 Created ve {"id":"XXXXX","key":"PROJE-XXX","self":"..."} response'u.

4SDP Callback Custom Function

Callback Function, Jira API'ye POST isteğini gönderecek Deluge scriptini barındıran yapıdır. Page Script bu fonksiyonu URL üzerinden çağırarak tetikler.

4.1 Callback Function Oluşturma

Admin > General Settings > Automation > Callback Functions > New

AlanGirilecek DeğerAçıklama
Function NameCreate Jira IssueFonksiyona verilecek isim
Return TypeMapDropdown'dan Map seçin
API Namecreate_jira_issueYalnızca harf, rakam ve alt çizgi
Publish✅ İşaretliCheckbox işaretlenmeli!
Parameters - Namerequest_idParametre adı
Parameters - TypestringParametre tipi
⚠️ Publish zorunludur! Publish işaretlenmezse Page Script'ten çağrıldığında 404 hatası alınır.

4.2 Deluge Script

ℹ️ Büyük harfle yazılmış tüm alanlar müşteri ortamına göre değiştirilmelidir.
// ============================================
// SDP -> Jira Cloud Entegrasyonu
// Callback Custom Function
// ============================================

// 1. SDP API'den ticket bilgilerini çek
sdpUrl = "https://SDP_LOKAL_URL/api/v3/requests/" + request_id;
sdpHeaders = {
"authtoken": "SDP_AUTH_TOKEN",
"PORTALID": "1"
};
sdpResponse = invokeurl
[
url: sdpUrl
type: GET
headers: sdpHeaders
];
requestObj = sdpResponse.get("request");

// 2. Item - Modül Mapping
// Müşteri ortamına göre güncelleyiniz
modulMap = Map();
modulMap.put("SDP_ITEM_ADI_1", "JIRA_MODUL_DEGERI_1");
modulMap.put("SDP_ITEM_ADI_2", "JIRA_MODUL_DEGERI_2");
// Diğer item'ları buraya ekleyiniz...

sdpItem = requestObj.get("item").get("name");
sdpModul = modulMap.get(sdpItem);
if(sdpModul == null || sdpModul == "")
{
sdpModul = "VARSAYILAN_MODUL";
}

// 3. SDP alanlarını al
sdpSubject = requestObj.get("subject");

// Description HTML'den temizle
sdpDescriptionRaw = requestObj.get("description");
sdpDescription = sdpDescriptionRaw
.replaceAll("<[^>]*>", "")
.replaceAll("&nbsp;", " ")
.replaceAll("&amp;", "&")
.replaceAll("&lt;", "<")
.replaceAll("&gt;", ">");

sdpTicketID = requestObj.get("id");

// Tarihi Jira formatına (yyyy-MM-dd) dönüştür
sdpDetectDateRaw = requestObj.get("created_time").get("display_value");
sdpDetectDate = sdpDetectDateRaw
.toDate("MMM dd, yyyy hh:mm a")
.toString("yyyy-MM-dd");

// 4. Jira API'ye POST gönder
jiraUrl = "https://JIRA_DOMAIN.atlassian.net/rest/api/3/issue";
headers = Map();
headers.put("Authorization", "Basic BASE64_STRING");
headers.put("Content-Type", "application/json");

body = "{\"fields\":{" +
"\"project\":{\"key\":\"PROJE_KEY\"}," +
"\"issuetype\":{\"id\":\"ISSUE_TYPE_ID\"}," +
"\"summary\":\"" + sdpSubject + "\"," +
"\"description\":{\"type\":\"doc\",\"version\":1," +
"\"content\":[{\"type\":\"paragraph\"," +
"\"content\":[{\"type\":\"text\"," +
"\"text\":\"" + sdpDescription + "\"}]}]}," +
"\"customfield_TICKET_NO_ID\":" + sdpTicketID + "," +
"\"customfield_ISLEM_KODU_ID\":\"-\"," +
"\"customfield_MODUL_ID\":[{\"value\":\"" + sdpModul + "\"}]," +
"\"customfield_IS_BIRIMI_ID\":[{\"name\":\"IS_BIRIMI_DEGERI\"}]," +
"\"customfield_TARIH_ID\":\"" + sdpDetectDate + "\"" +
"}}";

response = invokeurl
[
url: jiraUrl
type: POST
parameters: body
headers: headers
content-type: "application/json"
];

// 5. Sonucu döndür
returnObj = Collection();
if(response.get("key") != null)
{
returnObj.insert("result":"success");
returnObj.insert("message":"Jira issue olusturuldu: " + response.get("key"));
}
else
{
returnObj.insert("result":"failure");
returnObj.insert("message":"Hata: " + response.toString());
}
return returnObj;

4.3 Değişken Referans Tablosu

DeğişkenAçıklamaNasıl Bulunur
SDP_LOKAL_URLSDP'nin iç ağ adresiSDP sunucu yapılandırması
SDP_AUTH_TOKENSDP API kimlik doğrulama tokeniSDP Admin > API Token
JIRA_DOMAINJira subdomain'iJira URL'sinden
BASE64_STRINGemail:token base64 karşılığıBölüm 3.2
PROJE_KEYJira proje koduJira proje ayarları
ISSUE_TYPE_IDIssue tipi sayısal ID'siJira API /issuetype endpoint
customfield_TICKET_NO_IDTicket no alanının ID'siJira API /field endpoint
customfield_MODUL_IDSorumlu modül alanının ID'siJira API /field endpoint
customfield_IS_BIRIMI_IDİş birimi alanının ID'siJira API /field endpoint
customfield_TARIH_IDTarih alanının ID'siJira API /field endpoint
IS_BIRIMI_DEGERIJira'daki grup adıJira grup ayarları
VARSAYILAN_MODULMapping eşleşemezse kullanılacakMüşteriye göre belirlenir

5SDP Page Script — Buton Kurulumu

Page Script, SDP ticket detay sayfasına "Create JIRA Ticket" butonu ekler. Teknisyen butona bastığında Callback Function tetiklenir.

5.1 Page Script Oluşturma

Admin > General Settings > Page Scripts > New

AlanDeğer
Rule NameCreate Jira Button
Apply forTechnicians
PageRequest Details Page
ConditionGerek yoksa boş bırakılabilir

5.2 Page Script Kodu

ℹ️ Büyük harfle yazılmış değerler müşteri ortamına göre güncellenmelidir.
// ============================================
// SDP -> Jira Cloud | Page Script
// Request Details Page - Create Jira Button
// ============================================

$CS.addButton("edit", "Create JIRA Ticket", function(){

// Ticket ID'yi URL'den al
var woID = window.location.href.match(/woID=(\d+)/);
var requestId = woID ? woID[1] : null;

if(!requestId){
alert("Request ID alinamadi!");
return;
}

// Callback Function URL
// NOT: Teknisyenlerin erişim URL'si ile aynı domain olmalıdır (CORS)
var callbackUrl = "https://SDP_TEKNISYEN_URL/AppIntegrations" +
"?serviceName=callbackFunctions" +
"&api_name=create_jira_issue" +
"&auth_token=CALLBACK_AUTH_TOKEN" +
"&PORTALID=1";

// Arguments encode et ve POST ile gönder
var bodyData = "arguments=" +
encodeURIComponent('{"request_id":"' + requestId + '"}');

var promise = fetch(callbackUrl, {
method: "POST",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
body: bodyData
});

promise.then(function(response){
return response.text();
}).then(function(text){
try {
var result = JSON.parse(text);
var output = result.output;
if(output && output.result === "success"){
alert("Jira ticket basariyla olusturuldu!\n" + output.message);
} else {
alert("Jira ticket olusturulamadi!\n" +
(output ? output.message : text));
}
} catch(e){
alert("Sunucu yaniti: " + text);
}
}).catch(function(err){
alert("Baglanti hatasi: " + err);
});

}, {
"class": "btn btn-default btn-xs ml10",
"style": "background-color: #e57373; color: white; border-color: #e57373;"
});

5.3 Callback Auth Token Bulma

1

Callback Functions Sayfası

Admin > General Settings > Automation > Callback Functions gidin.

2

Fonksiyonu Açın

"create_jira_issue" fonksiyonunu açın.

3

URL'yi Kopyalayın

"URL to execute this Custom Function" alanındaki URL'yi kopyalayın.

4

Token'ı Alın

URL'deki auth_token=... parametresini kopyalayın ve Page Script'e yapıştırın.

⚠️ CORS Hatası — "Failed to fetch" Page Script URL'sindeki domain ile teknisyenlerin giriş yaptığı domain AYNI olmalıdır.
Örnek: Teknisyenler https://itsm.firma.com.tr üzerinden giriyorsa, callbackUrl'de de aynı domain kullanılmalıdır.

6Sorun Giderme

Hata MesajıNedenÇözüm
ConnectTimeoutExceptionFirewall engelliyorBölüm 2'deki firewall kuralını uygulayın
401 UnauthorizedAPI token hatalıToken'ı yenileyin, Base64'ü yeniden oluşturun
400 Bad RequestJSON parse hatası / özel karakterreplaceAll satırlarını kontrol edin
404 Not FoundCallback publish edilmemişPublish checkbox'ını işaretleyin
Failed to fetchCORS hatası - farklı domainPage Script URL'sini teknisyen URL'si ile aynı yapın
415 Unsupported Media TypeContent-Type yanlışcontent-type: "application/json" ekleyin
undefined mesajresponse.output path hatasıresult.output.message kullanın
Modül boş geliyorItem mapping eksikmodulMap'e yeni item-modül çifti ekleyin
Tarih format hatasıTarih parse edilemiyortoDate format string'ini SDP'den gelen formata göre güncelleyin

6.1 Authentication Test (Deluge)

testUrl = "https://JIRA_DOMAIN.atlassian.net/rest/api/3/myself";
headers = Map();
headers.put("Authorization", "Basic BASE64_STRING");
response = invokeurl
[
url: testUrl
type: GET
headers: headers
];
info response.toString();
return response.toString();
✅ Beklenen sonuç: accountId ve emailAddress içeren JSON yanıtı.

7Yeni Müşteri Kurulum Kontrol Listesi

Her yeni müşteri kurulumunda aşağıdaki adımları sırayla tamamlayın.

📋 Hazırlık

  • Müşteri Jira Cloud URL'si ve proje key'i alındı
  • Jira servis hesabı oluşturuldu (örn: sdp-service@firma.com)
  • Jira API token oluşturuldu ve güvenle saklandı
  • Base64 authorization string üretildi
  • SDP sunucu URL'leri belirlendi (lokal + teknisyen URL'si)
  • SDP API auth token alındı

🌐 Network

  • SDP sunucusunda CMD'den Jira'ya curl testi yapıldı
  • Firewall kuralı oluşturuldu (gerekiyorsa)
  • Deluge'dan bağlantı testi yapıldı

🔑 Jira Alan Mapping

  • Jira proje key'i doğrulandı
  • Issue type ID API'den alındı
  • Tüm custom field ID'leri API'den alındı
  • Postman ile test POST isteği gönderildi ve issue oluşturuldu
  • Item → Modül mapping tablosu hazırlandı

⚙️ SDP Callback Function

  • Callback Function oluşturuldu
  • API Name: create_jira_issue olarak ayarlandı
  • Publish checkbox işaretlendi
  • request_id parametresi eklendi
  • Script kopyalandı ve tüm değişkenler güncellendi
  • Script test edildi ve Jira'da issue oluşturuldu
  • Callback URL kopyalandı

🖱️ SDP Page Script

  • Page Script oluşturuldu (Request Details Page)
  • SDP_TEKNISYEN_URL güncellendi
  • CALLBACK_AUTH_TOKEN güncellendi
  • "Create JIRA Ticket" butonu görünüyor
  • Butona basılınca Jira ticket oluşturuluyor
  • Başarı/hata mesajı doğru gösteriliyor

✅ Son Test

  • Gerçek bir SDP ticket'i ile end-to-end test yapıldı
  • Jira'da oluşturulan issue'nun tüm alanları kontrol edildi
  • Farklı item tiplerinde modül mapping test edildi
  • Hata durumunda mesaj kontrol edildi
SDP → Jira Cloud Entegrasyon Kurulum Rehberi  |  v1.0  |  Dahili Kullanım

    • Related Articles

    • Servicedesk Plus - OPManager entegrasyon problemi

      Merhaba, OpManager ile Servicedesk Plus yazılımının entegrasyonunda yaşanılan sorunlar için hazırlanmış fix adımları aşağıdadır. 1. Stop OpManager service. 2. Download the patch from below link. ...
    • Servicedesk Plus Integration with SCCM (Only Servers)

      Servicedesk Plus Integration with SCCM Please follow the below steps to exclude the workstations and to view only the servers. STEPS : 1) Delete all the already configured SCCM configurations. 2) If failed_*.xml files are present inside the directory ...
    • ServiceDesk Plus İster Listesi

      Wotech Bilgi Teknolojileri ManageEngine Servicedesk Plus Kurulum Öncesi Hazırlıklar (Müşteriden Beklentiler) A) Dokümanın Amacı: Yazılımın implementasyonu sırasında müşteriden beklenen isterlerin müşteriye ilelmesi amacı ile oluşturulmuştur. B) ...
    • Service Desk Plus Update Adımları

      Service Desk Plus Update Adımları Update işlemleri için aşağıdaki adımları uygulayarak gerçekleştirebilirsiniz. Ayrıca işlemlere başlamadan önce uygulamanın bulunduğu sunucunun snapshot veya clone almanızı ve eğer uygulamada Mssql kullanılıyorsa ...
    • ServiceDesk Plus & AssetExplorer ile Barkod Tabanlı Varlık Yönetimi

      ServiceDesk Plus & AssetExplorer ile Barkod Tabanlı Varlık Yönetimi ManageEngine ServiceDesk Plus ve ManageEngine AssetExplorer ürünleri içerisinde yer alan barkod yönetimi özelliği sayesinde, varlıkların hızlı, doğru ve izlenebilir şekilde ...