Ich sehe immer Slack. Ich sehe nicht viel E-Mail oder Rückstand. Und vergessen Sie die im Backlog zugewiesenen Probleme. .. Okay, kontaktieren Sie uns jeden Morgen für Backlog-Probleme, die nicht Slack-fähig sind. Ich frage mich, ob ich die Liste der relevanten Probleme mit der Backlog-API aus Google Apps Script abrufen und an Slack senden kann.
Die Liste der Probleme im Backlog finden Sie unter [Liste der offiziellen Probleme abrufen](https://developer.nulab.com/ja/docs/backlog/api/2/get-issue-list/#%E8%AA%B2% E9% A1% 8C% E4% B8% 80% E8% A6% A7% E3% 81% AE% E5% 8F% 96% E5% BE% 97) Da es auf der Seite ist, versuchen Sie es mit GAS als Referenz zu erhalten Ich werde.
Hoppla, vorher bekommen wir den Backlog-API-Schlüssel. Klicken Sie in dem Menü, in dem Sie auf Ihr Symbol in der oberen rechten Ecke der Backlog-Seite geklickt haben, auf ** Personalisierung ** und rufen Sie es von ** API ** im linken Menü ab. Nachdem Sie den API-Schlüssel erhalten haben, drücken Sie sofort die API von GAS, um die Liste der Probleme abzurufen.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp'; //Von Ihnen verwendete Backlog-Domain
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx'; //API-Schlüssel von Backlog erhalten
const endpoint = '/api/v2/issues'; //URL unter Erhalten der offiziellen Problemliste
const url = baseUrl + endpoint + '?apiKey=' + apiKey; //Machen Sie es zur URL, um nachzufragen
const response = UrlFetchApp.fetch(url); //HTTP-Anfrage mit Abrufmethode senden
const json = JSON.parse(response.getContentText()); //Textdaten extrahieren
Logger.log(json); //Ausgabe zum Protokollieren
}
Es wurde in verschiedenen Protokollen ausgegeben. In diesem Fall ist die Anzahl der Protokolle für jedes Problem zu groß, um angezeigt zu werden. Daher wird nur die Problem-ID für jedes Problem angezeigt.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp'; //Von Ihnen verwendete Backlog-Domain
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx'; //API-Schlüssel von Backlog erhalten
const endpoint = '/api/v2/issues'; //URL unter Erhalten der offiziellen Problemliste
const url = baseUrl + endpoint + '?apiKey=' + apiKey; //Machen Sie es zur URL, um nachzufragen
const response = UrlFetchApp.fetch(url); //HTTP-Anfrage mit Abrufmethode senden
const json = JSON.parse(response.getContentText()); //Textdaten extrahieren
for (let i in json) { //Drehen Sie die Schleife so oft wie die Anzahl der Aufgaben
Logger.log(json[i]['issueKey']); //Ausgabeproblem-ID zum Protokollieren
}
}
Es gibt keine zusätzlichen Protokolle und es ist einfacher zu sehen, aber da es für das gesamte Backlog erfasst wird, gibt es eine Mischung aus zusätzlichen Problemen. Filtern Sie daher unter den folgenden Bedingungen und erfassen Sie nur die erforderlichen Probleme.
Es scheint, dass die Benutzer-ID der verantwortlichen Person erforderlich ist, um die verantwortliche Person einzugrenzen, aber es scheint, dass die Ausgabe der Benutzer-ID der verantwortlichen Person mit GAS nicht funktioniert ... Da es keine Hilfe dafür gibt, lesen Sie So ermitteln Sie die Benutzer-ID (numerischer Wert) mithilfe der API im Backlog und klicken Sie in Python auf die Backlog-API, um die Benutzer-ID abzurufen. Machen. Bei dieser Methode geben Sie ein Problem an und erhalten die Benutzer-ID der Person, die für dieses Problem verantwortlich ist. Sie erhalten also die Problem-ID, um das Problem anzugeben. Das heißt, es ist einfach, es ist am Ende der URL (xxxx-xx), wenn Sie das Problem öffnen. Insbesondere wird der Teil am Ende der Ausgabe-URL fett gedruckt. (Xx hinten ist eine Zahl) xxxxx.backlog.jp/view/xxxx-xx Sobald Sie die Problem-ID kennen, rufen Sie die Benutzer-ID der verantwortlichen Person in Python ab.
import requests
baseUrl = 'https://xxxxx.backlog.jp'; #Von Ihnen verwendete Backlog-Domain
apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx'; #API-Schlüssel von Backlog erhalten
ticket_id = 'xxxx-xx' #Problem-ID
url = base_url + ticket_id #Machen Sie es zur URL, um nachzufragen
json = requests.get(url, {'apiKey': apiKey}).json() #Textdaten extrahieren
print(json['assignee']['id']) #Geben Sie die Benutzer-ID der Person aus, die für das Erfassungsergebnis verantwortlich ist
Nachdem wir die Benutzer-ID der verantwortlichen Person kennen, werden wir sie nach der für GAS verantwortlichen Person eingrenzen. Fügen Sie dem Parameter der abzufragenden URL wie unten gezeigt "& assigneeId [] = Benutzer-ID der verantwortlichen Person" hinzu.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp';
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx';
const endpoint = '/api/v2/issues';
const url = baseUrl + endpoint + '?apiKey=' + apiKey + '&assigneeId[]=' + xxxxxxx; //Machen Sie es zur URL, um nachzufragen
//(Unten weggelassen. Wie oben.)
}
Als nächstes eingrenzen Sie nach Typ (Aufgabe, Fehler, Anfrage ..).
Der Typ wird durch issueTypeId
eingegrenzt.
Das Überprüfen der issueTypeId ist ebenfalls einfach. Klicken Sie auf der Registerkarte ** Typ ** von ** Projekteinstellungen ** im linken Menü von Backlog auf den Typ, den Sie überprüfen möchten.
Es wird ** issueType.id ** in der URL der Bearbeitungsseite des Typs sein, der durch Klicken angezeigt wird.
Nachdem wir die issueTypeId kennen, werden wir sie durch GAS eingrenzen.
Dadurch wird den Parametern der Abfrage-URL "issueTypeId [] = issueType.id" hinzugefügt.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp';
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx';
const endpoint = '/api/v2/issues';
const url = baseUrl + endpoint + '?apiKey=' + apiKey + '&assigneeId[]=' + xxxxxxx + '&issueTypeId[]=' + xxxxxxx; //Machen Sie es zur URL, um nachzufragen
//(Unten weggelassen. Wie oben.)
}
Eingrenzen Sie schließlich nach Ausgabestatus (nicht unterstützt, in Bearbeitung, verarbeitet, abgeschlossen). Der Status wird durch "statusId" eingegrenzt. Die statusId kann mit der API überprüft werden, aber ich denke, es ist unten behoben.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp';
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx';
const endpoint = '/api/v2/issues';
const url = baseUrl + endpoint + '?apiKey=' + apiKey + '&assigneeId[]=' + xxxxxxx + '&issueTypeId[]=' + xxxxxxx + '&statusId[]=' + 1; //Machen Sie es zur URL, um nachzufragen
//(Unten weggelassen. Wie oben.)
}
Nachdem Sie die benötigten Informationen in der Backlog-API haben, können Sie sie an Slack senden.
Stellen Sie zunächst die Webhooks ein, die zum Senden von Slack erforderlich sind. Früher habe ich Incoming Webhooks mit der benutzerdefinierten Integration von Slack erstellt, aber jetzt scheint es so, als würde ich eine Slack-App erstellen und Incoming Webhooks als Funktion festlegen, also werde ich es so machen. (Referenz: Slack Custom Integration ist veraltet und [Slacks eingehender Webhook war neu, daher habe ich ihn zusammengefasst](https: // qiita. com / kshibata101 / items / 0e13c420080a993c5d16)) Speziell
hat diesem Kanal eine Integration hinzugefügt: * App-Namen festlegen *
Kopieren Sie nach dem Einrichten eingehender Webhooks die URL des Webhooks. Stellen Sie diese URL in GAS ein, um sie zu einem Slack-Ziel zu machen. Der Anzeigename und das Bild der Slack-App, wenn Slack von eingehenden Webhooks benachrichtigt wird, können unter ** Anzeigeinformationen ** von ** Grundinformationen ** im linken Menü festgelegt werden. Um die Slack-App zu löschen, gehen Sie zu ** Grundlegende Informationen **, ** App löschen **.
Fügen Sie die erhaltene Webhook-URL in ** postUrl ** ein und schreiben Sie wie folgt.
function sendSlack() {
const postUrl = 'Erhaltene Webhook-URL';
const json = {
'text': 'Nachricht, die Sie an Slack senden möchten'
};
const payload = JSON.stringify(json);
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': payload
};
UrlFetchApp.fetch(postUrl, options);
}
Da es ein Versprechen ist, werde ich die Erklärung weglassen.
Ich verwende das Tabellenkalkulations-GAS, also habe ich versucht, die Tabellenkalkulation selbst zu verwenden. Ich habe es möglich gemacht, wie folgt in der Tabelle festzulegen. Ich werde mich auf diejenigen beschränken, die in der Tabelle markiert sind.
//Holen Sie sich Einstellungen aus der Tabelle
function getConfig() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange(1, 1, 5, 2);
const values = range.getValues();
//Statuseinstellungen abrufen
let statusId = '';
for (let i in [...Array(4).keys()]) {
let row = Number(i) + 1;
if (true == values[row][0]) {
statusId += '&statusId[]=' + row;
}
}
return statusId;
}
Es sieht so aus, wenn alle kombiniert werden.
const baseUrl = 'https://xxxxx.backlog.jp';
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx';
function myFunction() {
const statusId = getConfig();
issues(statusId)
}
//Holen Sie sich eine Liste der Probleme
function issues(statusId) {
//Holen Sie sich eine Liste der Probleme von Backlog
const endpoint = '/api/v2/issues';
const url = baseUrl + endpoint + '?apiKey=' + apiKey + statusId + '&issueTypeId[]=' + xxxxxx + '&assigneeId[]=' + xxxxxx;
const resp = UrlFetchApp.fetch(url);
const json = JSON.parse(resp.getContentText());
//Extrahieren Sie die erforderlichen Informationen (Problem-ID, Problem-Betreff, Problem-URL) aus der von Backlog erhaltenen Problemliste
let message = '';
for (let i in json) {
const issueKey = json[i]['issueKey']; //Problem-ID
const summary = json[i]['summary']; //Thema ausstellen
message += issueKey + ' ' + summary + '\n' + baseUrl + '/view/' + issueKey;
//Wenn es mehrere Probleme gibt, fügen Sie für jede Schleife einen Zeilenumbruch ein
if (json[i] != json[json.length - 1]) {
message += '\n';
}
}
//Übergeben Sie den Inhalt (Nachricht), den Sie mit Slack senden möchten
sendSlack(message);
}
//An Slack senden
function sendSlack(message) {
//Testen Sie die Webhook-URL
const postUrl = 'Erhaltene Webhook-URL';
const json = {
'text': message
};
const payload = JSON.stringify(json);
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': payload
};
UrlFetchApp.fetch(postUrl, options);
}
//Holen Sie sich Einstellungen aus der Tabelle
function getConfig() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange(1, 1, 5, 2);
const values = range.getValues();
//Statuseinstellungen abrufen
let statusId = '';
for (let i in [...Array(4).keys()]) {
let row = Number(i) + 1;
if (true == values[row][0]) {
statusId += '&statusId[]=' + row;
}
}
return statusId;
}
Wenn Sie dies so einstellen, dass es jeden Morgen um 9 Uhr mit einem Auslöser beginnt, wird Slack jeden Morgen die folgende Benachrichtigung erhalten.
We're hiring! Wir entwickeln einen KI-Chatbot. Wenn Sie interessiert sind, können Sie uns gerne über die Wantedly-Seite kontaktieren!
[Liste der Probleme abrufen (offiziell)](https://developer.nulab.com/ja/docs/backlog/api/2/get-issue-list/#%E8%AA%B2%E9%A1%8C% E4% B8% 80% E8% A6% A7% E3% 81% AE% E5% 8F% 96% E5% BE% 97) [Erfassung von Probleminformationen (offiziell)](https://developer.nulab.com/ja/docs/backlog/api/2/get-issue/#%E8%AA%B2%E9%A1%8C%E6% 83% 85% E5% A0% B1% E3% 81% AE% E5% 8F% 96% E5% BE% 97) Slack Custom Integration veraltet Slacks eingehender Webhook war neu, daher habe ich ihn zusammengefasst So ermitteln Sie die Benutzer-ID (numerischer Wert) mithilfe der API im Backlog Hinzufügen von Problemen mit der Backlog-API mithilfe von Python
Recommended Posts