Je vois toujours Slack. Je ne vois pas beaucoup d'e-mails ou d'arriérés. Et oubliez les problèmes attribués dans Backlog. .. Très bien, entrons en contact avec les problèmes de backlog qui ne sont pas compatibles avec Slack tous les matins. Je me demande si je peux extraire la liste des problèmes pertinents de Google Apps Script avec l'API de Backlog et la transmettre à Slack.
Pour obtenir la liste des problèmes dans Backlog, procédez comme suit: [Obtenir la liste des problèmes officiels](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) Comme il est répertorié sur la page, essayez de l'obtenir avec GAS pour référence. Je vais.
Oups, avant cela, nous aurons la clé d'API Backlog. Cliquez sur ** Personnalisation ** dans le menu où vous avez cliqué sur votre icône dans le coin supérieur droit de la page Backlog, et récupérez-la depuis ** API ** dans le menu de gauche. Après avoir obtenu la clé API, appuyez immédiatement sur l'API de GAS pour obtenir la liste des problèmes.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp'; //Domaine de backlog que vous utilisez
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx'; //Clé API obtenue à partir du Backlog
const endpoint = '/api/v2/issues'; //URL répertoriée dans Obtention de la liste officielle des problèmes
const url = baseUrl + endpoint + '?apiKey=' + apiKey; //Faites-en l'URL pour demander
const response = UrlFetchApp.fetch(url); //Envoyer une requête HTTP avec la méthode fetch
const json = JSON.parse(response.getContentText()); //Extraire des données textuelles
Logger.log(json); //Sortie vers journal
}
Il a été produit dans divers journaux. Si tel est le cas, la quantité de journaux pour chaque problème est trop grande à voir, nous n'afficherons donc temporairement que l'ID de problème pour chaque problème.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp'; //Domaine de backlog que vous utilisez
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx'; //Clé API obtenue à partir du Backlog
const endpoint = '/api/v2/issues'; //URL répertoriée dans Obtention de la liste officielle des problèmes
const url = baseUrl + endpoint + '?apiKey=' + apiKey; //Faites-en l'URL pour demander
const response = UrlFetchApp.fetch(url); //Envoyer une requête HTTP avec la méthode fetch
const json = JSON.parse(response.getContentText()); //Extraire des données textuelles
for (let i in json) { //Tournez la boucle autant de fois que le nombre de tâches
Logger.log(json[i]['issueKey']); //ID du problème de sortie dans le journal
}
}
Il n'y a pas de journaux supplémentaires et il est plus facile à voir, mais comme il est acquis pour l'ensemble du Backlog, les problèmes supplémentaires sont mitigés. Par conséquent, filtrez dans les conditions suivantes et n'acquérez que les problèmes requis.
Il semble que l'ID utilisateur de la personne responsable soit nécessaire pour restreindre la personne responsable, mais il semble que cela ne fonctionne pas pour sortir l'ID utilisateur de la personne responsable de GAS ... Comme il n'y a aucune aide pour cela, reportez-vous à Comment trouver l'ID utilisateur (valeur numérique) à l'aide de l'API dans Backlog et appuyez sur l'API Backlog de Python pour obtenir l'ID utilisateur Faire. Dans cette méthode, vous spécifiez un problème et obtenez l'ID utilisateur de la personne en charge de ce problème, de sorte que vous obtenez l'ID du problème pour spécifier le problème. Cela dit, c'est facile, c'est à la fin de l'URL (xxxx-xx) lorsque vous ouvrez le numéro. Plus précisément, ce sera la partie en gras à la fin de l'URL du problème. (Xx à l'arrière est un nombre) xxxxx.backlog.jp/view/xxxx-xx Une fois que vous connaissez l'ID du problème, obtenez l'ID utilisateur de la personne en charge dans Python.
import requests
baseUrl = 'https://xxxxx.backlog.jp'; #Domaine de backlog que vous utilisez
apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx'; #Clé API obtenue à partir du Backlog
ticket_id = 'xxxx-xx' #ID du problème
url = base_url + ticket_id #Faites-en l'URL pour demander
json = requests.get(url, {'apiKey': apiKey}).json() #Extraire des données textuelles
print(json['assignee']['id']) #Sortie de l'ID utilisateur de la personne en charge du résultat d'acquisition
Maintenant que nous connaissons l'ID utilisateur de la personne responsable, nous allons affiner par personne responsable de GAS.
Ajoutez & assigneeId [] = ID utilisateur de la personne responsable
au paramètre de l'URL de la demande comme indiqué ci-dessous.
function myFunction() {
const baseUrl = 'https://xxxxx.backlog.jp';
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx';
const endpoint = '/api/v2/issues';
const url = baseUrl + endpoint + '?apiKey=' + apiKey + '&assigneeId[]=' + xxxxxxx; //Faites-en l'URL pour demander
//(Omis ci-dessous. Idem que ci-dessus.)
}
Ensuite, affinez par type (tâche, bug, requête ..).
Le type est réduit par ʻissueTypeId. La vérification de issueTypeId est également facile, cliquez sur le type que vous souhaitez vérifier dans l'onglet ** Type ** de ** Paramètres du projet ** dans le menu de gauche de Backlog. Ce sera ** issueType.id ** dans l'URL de la page d'édition du type affiché en cliquant. Maintenant que nous connaissons le issueTypeId, nous allons le réduire par GAS. Cela ajoute ʻissueTypeId [] = issueType.id
aux paramètres de l'URL de la requête.
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; //Faites-en l'URL pour demander
//(Omis ci-dessous. Idem que ci-dessus.)
}
Enfin, affinez le statut du problème (non pris en charge, en cours, traité, terminé).
Le statut est réduit par statusId
.
Le statusId peut être vérifié à l'aide de l'API, mais je pense qu'il est corrigé ci-dessous.
statusId [] = x
aux paramètres de l'URL de la requête.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; //Faites-en l'URL pour demander
//(Omis ci-dessous. Idem que ci-dessus.)
}
Maintenant que nous avons les informations dont nous avons besoin dans l'API Backlog, nous pouvons les envoyer à Slack.
Tout d'abord, définissez les Webhooks requis pour l'envoi de Slack. J'avais l'habitude de créer des Webhooks entrants avec l'intégration personnalisée de Slack, mais maintenant il semble que je vais créer une application Slack et définir les Webhooks entrants en tant que fonction, donc je vais le faire de cette façon. (Référence: L'intégration personnalisée Slack est obsolète et [Le webhook entrant de slack était nouveau, donc je l'ai résumé](https: // qiita. com / kshibata101 / items / 0e13c420080a993c5d16)) En particulier
a ajouté une intégration à ce canal: * Définir le nom de l'application *
Après avoir configuré les Webhooks entrants, copiez l'URL du Webhook. Définissez cette URL dans GAS pour en faire une destination Slack. Le nom d'affichage et l'image de l'application Slack lorsque Slack est notifié par les Webhooks entrants peuvent être définis dans ** Afficher les informations ** de ** Informations de base ** dans le menu de gauche. Pour supprimer l'application Slack, accédez à ** Informations de base **, ** Supprimer l'application **.
Collez l'URL du Webhook obtenue dans ** postUrl ** et écrivez comme suit.
function sendSlack() {
const postUrl = 'URL Webhook obtenue';
const json = {
'text': 'Message que vous souhaitez envoyer à Slack'
};
const payload = JSON.stringify(json);
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': payload
};
UrlFetchApp.fetch(postUrl, options);
}
Puisqu'il s'agit d'une promesse, j'omettrai l'explication.
J'utilise la feuille de calcul GAS, j'ai donc essayé d'utiliser la feuille de calcul elle-même. Les paramètres suivants peuvent être définis dans la feuille de calcul. Je vais affiner par ceux vérifiés sur la feuille de calcul.
//Obtenir les paramètres de la feuille de calcul
function getConfig() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange(1, 1, 5, 2);
const values = range.getValues();
//Obtenir les paramètres d'état
let statusId = '';
for (let i in [...Array(4).keys()]) {
let row = Number(i) + 1;
if (true == values[row][0]) {
statusId += '&statusId[]=' + row;
}
}
return statusId;
}
Cela ressemble à ça quand tout est combiné.
const baseUrl = 'https://xxxxx.backlog.jp';
const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxx';
function myFunction() {
const statusId = getConfig();
issues(statusId)
}
//Obtenez une liste de problèmes
function issues(statusId) {
//Obtenir une liste des problèmes de 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());
//Extraire les informations nécessaires (ID du problème, sujet du problème, URL du problème) de la liste des problèmes obtenue à partir du Backlog
let message = '';
for (let i in json) {
const issueKey = json[i]['issueKey']; //ID du problème
const summary = json[i]['summary']; //Sujet du problème
message += issueKey + ' ' + summary + '\n' + baseUrl + '/view/' + issueKey;
//S'il y a plusieurs problèmes, insérez un saut de ligne pour chaque boucle
if (json[i] != json[json.length - 1]) {
message += '\n';
}
}
//Transmettez le contenu (message) que vous souhaitez envoyer avec Slack
sendSlack(message);
}
//Envoyer à Slack
function sendSlack(message) {
//Tester l'URL du webhook
const postUrl = 'URL Webhook obtenue';
const json = {
'text': message
};
const payload = JSON.stringify(json);
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': payload
};
UrlFetchApp.fetch(postUrl, options);
}
//Obtenir les paramètres de la feuille de calcul
function getConfig() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange(1, 1, 5, 2);
const values = range.getValues();
//Obtenir les paramètres d'état
let statusId = '';
for (let i in [...Array(4).keys()]) {
let row = Number(i) + 1;
if (true == values[row][0]) {
statusId += '&statusId[]=' + row;
}
}
return statusId;
}
Si vous définissez cette option pour qu'elle commence à 9 h tous les matins avec un déclencheur, la notification suivante sera envoyée à Slack chaque matin.
We're hiring! Nous développons un chatbot IA. Si vous êtes intéressé, n'hésitez pas à nous contacter depuis la page Wantedly!
[Obtention d'une liste de problèmes (officielle)](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) [Acquisition des informations sur le problème (officielle)](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) Intégration personnalisée Slack obsolète Le webhook entrant de Slack était nouveau, je l'ai donc résumé Comment trouver l'ID de l'utilisateur (valeur numérique) à l'aide de l'API dans Backlog Ajout de problèmes avec l'API Backlog à l'aide de Python
Recommended Posts