Slack: ユーザ名取得

Slack: ユーザ名取得

Slack: Get User Name

この工程は、Slack ID から Slack ユーザ名やメールアドレスを取得します。

Basic Configs
工程名
メモ
Auto Step icon
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);
}

    

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む