

Slack: ユーザ名取得
この工程は、Slack ID から Slack ユーザ名やメールアドレスを取得します。
Basic Configs
- 工程名
- メモ
Configs for this Auto Step
- conf_Token
- C1: Bot トークンを設定した認証設定 *
- conf_SlackUserId
- C2: Slack ユーザ ID *
- conf_UserName
- C3: ユーザ名を保存するデータ項目
- conf_Quser
- C4: メールアドレス もしくは Questetra ユーザを保存するデータ項目
Notes
- この自動工程を使用するには、開始: Slack: メッセージ受信時 の Notes 部に記載の手順にしたがって、Slack アプリを作成・インストールしてください
- 作成した Slack アプリの設定ページで OAuth & Permissions を開くと表示される Bot User OAuth Token が、C1 に設定する Bot トークンです
- この自動工程には、以下のスコープが必要です。使用する Slack Bot に以下のスコープがなければ、OAuth & Premissions の Bot Token Scopes に追加してください
- users:read
- users:read.email
- 保存されるユーザ名は、表示名ではなく氏名です
Capture

See Also
Script (click to open)
- 次のスクリプトが記述されている XML ファイルをダウンロードできます
- slack-username-get.xml (C) Questetra, Inc. (MIT License)
- Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます
function main() {
const auth = configs.getObject('conf_Token');
const slackUserId = retrieveSlackUserId();
const userNameDef = configs.getObject('conf_UserName');
const quserDef = configs.getObject('conf_Quser');
if (userNameDef === null && quserDef === null) {
throw 'No data item to save the result is set.';
}
const { userName, emailAddress } = getUserInfo(auth, slackUserId);
if (userNameDef !== null) {
engine.setData(userNameDef, userName);
}
if (quserDef !== null) {
setEmailAddress(quserDef, emailAddress);
}
}
/**
* Slack のユーザ ID を config から読み出す
* @return {String} slackUserId ユーザ ID
*/
function retrieveSlackUserId(){
const slackUserId = engine.findData(configs.getObject('conf_SlackUserId'));
if (slackUserId === null) {
throw 'Slack User ID is blank.';
}
return slackUserId;
}
/**
* Slack のユーザ ID からユーザ情報を取得する
* users.info https://api.slack.com/methods/users.info
* @param {AuthSettingWrapper} auth
* @param {String} slackUserId
* @return {Object} userInfo
* @return {String} userInfo.userName ユーザ名
* @return {String} userInfo.emailAddress メールアドレス
*/
function getUserInfo(auth, slackUserId) {
const url = 'https://slack.com/api/users.info';
const response = httpClient.begin()
.authSetting(auth)
.queryParam('user', slackUserId)
.get(url);
const status = response.getStatusCode();
const responseTxt = response.getResponseAsString();
let responseJson;
try {
responseJson = JSON.parse(responseTxt);
} catch (e) {
engine.log('Failed to parse response as json.');
engine.log(responseTxt);
throw `Failed to get user info. status: ${status}`;
}
if (responseJson.ok !== true) {
engine.log(`status: ${status}`);
engine.log(responseTxt);
throw `Response is not ok. error: ${responseJson.error}`;
}
const userName = responseJson.user.profile.real_name;
const emailAddress = responseJson.user.profile.email;
return { userName, emailAddress };
}
/**
* データ項目にメールアドレスをセットする
* @param {DataDefinitionView} dataDef
* @param {String} emailAddress
*/
function setEmailAddress(dataDef, emailAddress) {
if (emailAddress === undefined) { // スコープが不足していてメールアドレスを取得できなかった場合
throw 'Failed to get Email Address. Scope users:read.email is required.';
}
// 文字型データ項目の場合
if (dataDef.matchDataType('STRING_TEXTFIELD')) {
engine.setData(dataDef, emailAddress);
return;
}
// ユーザ型の場合
const quser = quserDao.findByEmail(emailAddress); // メールアドレスでユーザを検索
if (quser === null) {
throw `Questetra User not found. email: ${emailAddress}`;
}
engine.setData(dataDef, quser);
}





