SmartStageのGmail連携方法をご案内します。
目次
Gmail連携とは
Gmail連携とは、受信用メールアドレスへ指定のフォーマットでタスク登録内容を送信することで、
ユーザーが「SmartStage」にログインすることなく問い合わせが行える機能です。
事前準備
・API トークンの発行
「SmartStage」 APIを呼び出すために、認証用の「API トークン」の発行が必要となります。
「API トークン」の発行については、以下の記事を参照してください。
・画面項目の追加
・項目「問い合わせ者 所属部署名」の追加
「サービスリクエスト」の項目「問い合わせ者 所属部署名」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
項目名に「問い合わせ者 所属部署名」、「項目の型」に「テキスト」を設定し、「保存」をクリックしてください。
・項目「問い合わせ者 氏名」の追加
「サービスリクエスト」の項目「問い合わせ者 氏名」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
「項目名」に「問い合わせ者 氏名」、「項目の型」に「テキスト」を設定し、「保存」をクリックしてください。
・項目「問い合わせ者 Email」の追加
「サービスリクエスト」の項目「問い合わせ者 Email」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
「項目名」に「問い合わせ者 Email」、「項目の型」に「テキスト」を設定し、「保存」をクリックしてください。
・項目「発行日(日付・時刻)」の追加
「サービスリクエスト」の項目「発行日(日付・時刻)」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
「項目名」に「発行日(日付・時刻)」、「項目の型」に「日付・時刻」を設定し、「保存」をクリックしてください。
・項目「対応希望日(日付・時刻)」の追加
「サービスリクエスト」の項目「対応希望日(日付・時刻)」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
「項目名」に「対応希望日(日付・時刻)」、「項目の型」に「日付・時刻」を設定し、「保存」をクリックしてください。
・項目「カテゴリ」の追加
「サービスリクエスト」の項目「カテゴリ」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
・「項目名」に「カテゴリ」、「項目の型」に「選択肢」を設定してください。
・選択肢に「ソフトウェア」「クラウドサービス」「ハードウェア」「ネットワーク」「その他」を追加します。
「選択肢名」に「ソフトウェア」を記入してください。
続けて、「+ボタン」をクリックし「クラウドサービス」を記入してください。
同じ要領で、「ハードウェア」、「ネットワーク」、「その他」を追加し、以下画像のように選択肢が追加されたことを確認し、「保存」をクリックしてください。
・項目「タイトル」の追加
「サービスリクエスト」の項目「タイトル」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
・「項目名」に「タイトル」、「項目の型」に「テキスト」を設定し、「保存」をクリックしてください。
・項目「問い合わせ内容」の追加
「サービスリクエスト」の項目「問い合わせ内容」を追加してください。
「SmartStage」の「管理者ページ」になってることを確認し、「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト(+ボタン)」の順にクリックしてください。
・「項目名」に「問い合わせ内容」、「項目の型」に「複数行テキスト」を設定し、「保存」をクリックしてください。
・項目リストの確認
以下の項目リストが計8つ追加されたことを確認してください。
「問い合わせ者 所属部署名」
「問い合わせ者 氏名」
「問い合わせ者 Email」
「発行日(日付・時刻)」
「対応希望日(日付・時刻)」
「カテゴリ」
「タイトル」
「問い合わせ内容」
・「ワークスペース ID」の取得
サンプルスクリプトの「ワークスペースID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「(右上にある歯車アイコン)」 > 「ワークスペース設定」 の順にクリックしてください。
「ワークスペースID」がお客様の「ワークスペースID」になります。
・「データストア ID」「サービスリクエスト」の取得
サンプルスクリプトの「データストアID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」 > 「サービスリクエスト」 >「 基本設定」 の順にクリックしてください。
「データストアID」が「サービスリクエスト」の「データストアID」になります。
・「新しいデータを登録する」「アクションID」の取得
サンプルスクリプトの「アクションID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」 > 「サービスリクエスト 管理」> 「項目設定」 の順にクリックしてください。
「アクションID」が「新しいデータを登録する」の「アクションID」になります。
・登録対象画面項目ID「問い合わせ者 所属部署名」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「問い合わせ者 所属部署名」の順にクリックしてください。「項目ID」が「問い合わせ者 所属部署名」の登録対象画面項目IDになります。
・登録対象画面項目ID「問い合わせ者 氏名」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「問い合わせ者 氏名」の順にクリックしてください。「項目ID」が「問い合わせ者 氏名」の登録対象画面項目IDになります。
・登録対象画面項目ID「問い合わせ者 Email」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「問い合わせ者 Email」の順にクリックしてください。「項目ID」が「問い合わせ者 Email」の登録対象画面項目IDになります。
・登録対象画面項目ID「発行日(日付・時刻)」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「発行日(日付・時刻)」の順にクリックしてください。「項目ID」が「発行日(日付・時刻)」の登録対象画面項目IDになります。
・登録対象画面項目ID「対応希望日(日付・時刻)」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「対応希望日(日付・時刻)」の順にクリックしてください。「項目ID」が「対応希望日(日付・時刻)」の登録対象画面項目IDになります。
・登録対象画面項目ID「カテゴリ」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「カテゴリ」の順にクリックしてください。「項目ID」が「カテゴリ」の登録対象画面項目IDになります。
・登録対象画面項目ID「タイトル」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「タイトル」の順にクリックしてください。「項目ID」が「タイトル」の登録対象画面項目IDになります。
・登録対象画面項目ID「問い合わせ内容」の取得
サンプルスクリプトの「登録対象画面項目ID」をお客様自身の値に置き換えるため、
「SmartStage」の管理メニューから ID を取得する必要があります。
「SmartStage」の「管理者ページ」になっていることを確認し、
「プロセス設定」>「サービスリクエスト」>「項目設定」>「項目リスト」の「問い合わせ内容」の順にクリックしてください。「項目ID」が「問い合わせ内容」の登録対象画面項目IDになります。
・Gmailアドレスの準備
スクリプトでは、新規案件の受付用のGmailアドレスが1つ必要です
任意のものを用意してください。
・ラベル設定
スクリプトでは、処理済みのメールを判別するためにラベルを使用するため、専用のラベルを作成します。
Gmailの左メニュー、ラベル横の「+ボタンを」クリックします。
ラベル名「ss_registered」を入力し、作成ボタンをクリックします。
サンプルスクリプトの配置
「Google Apps Script」にサンプルスクリプトを配置します。
・サンプルスクリプトの修正
お好みのテキストエディタに
をペーストしてください。ここではVSCodeを利用しています。
・「データストアID」「サービスリクエスト」の設定
サンプルスクリプト(config.js)の「データストアID」「サービスリクエスト」をお客様のものに更新します。
サンプルスクリプトの定数SS_TARGET_DATASTOREIDの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・「新しいデータを登録する」「アクションID」の設定
サンプルスクリプト(config.js)の「新しいデータを登録する」「アクションID」をお客様のものに更新します。
サンプルスクリプトの定数SS_TARGET_ACTIONIDの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目IDの設定
サンプルスクリプト(config.gs)の画面項目IDをお客様のものに更新します。
config.gs 内の19行目以降に、画面項目IDを設定します。
・登録対象画面項目ID「問い合わせ者 所属部署名」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「問い合わせ者 所属部署名」をお客様のものに更新します。
サンプルスクリプトの定数DEPARTMENTの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「問い合わせ者 氏名」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「問い合わせ者 氏名」をお客様のものに更新します。
サンプルスクリプトの定数NAMEの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「問い合わせ者 Email」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「問い合わせ者 Email」をお客様のものに更新します。
サンプルスクリプトの定数EMAIL_ADDRESSの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「発行日(日付・時刻)」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「発行日(日付・時刻)」をお客様のものに更新します。
サンプルスクリプトの定数ISSUE_DATEの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「対応希望日(日付・時刻)」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「対応希望日(日付・時刻)」をお客様のものに更新します。
サンプルスクリプトの定数ISSUE_DATEPREFERRED_DATEの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「カテゴリ」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「カテゴリ」をお客様のものに更新します。
サンプルスクリプトの定数CATEGORYの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「タイトル」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「タイトル」をお客様のものに更新します。
サンプルスクリプトの定数TITLEの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・登録対象画面項目ID「問い合わせ内容」の設定
サンプルスクリプト(config.js)の登録対象画面項目ID「問い合わせ内容」をお客様のものに更新します。
サンプルスクリプトの定数CONTENTの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・「受信用メールアドレス」の設定
サンプルスクリプト(config.js)の「差出人メールアドレス」をお客様のものに更新します。
サンプルスクリプトの定数MAIL_FROM_ADDRESSの値に、
こちらで準備したメールアドレスを設定してください。
<>は不要ですので削除してください。
・「ワークスペースID」の設定
サンプルスクリプト(main.js)の「ワークスペースID」をお客様のものに更新します。
サンプルスクリプトの定数workspaceIdの値に、
こちらで取得したIDを設定してください。
<>は不要ですので削除してください。
・サンプルスクリプトの設定
・スクリプト エディタの起動
Googleドライブ左上の「新規」メニュー >「その他 」> 「Google Apps Script 」の順にクリックしてください。
「無題のプロジェクト」と表示されている部分をクリックし、プロジェクトの名称を設定します。
「Gmail連携」等、任意の名前を設定し、「名前を変更」をクリックします。
プロジェクトの名前が変更されます。
左上のファイルの横にあるファイルを「+ボタン」をクリックし、「スクリプト」をクリックします。
「config」と入力します。
同様に「main」、「tools」を作成します。
3つのファイルを追加すると、以下のようになるでしょう。
・config.gsの貼り付け
「config.gs」の内容をすべて削除し、サンプルスクリプトの修正で設定したサンプルスクリプト(config.gs)をペーストし、セーブしてください。
セーブ→(ctrlキー+s)
・main.gsの貼り付け
「main.gs」の内容をすべて削除し、サンプルスクリプト(main.gs)をペーストしてセーブします。
セーブ→(ctrlキー+s)
・tools.gsの貼り付け
「tools.gs」の内容をすべて削除し、サンプルスクリプト(tools.gs)をペーストしてセーブします。
セーブ→(ctrlキー+s)
Gmailアクセス権限の設定
スクリプトがGmailへアクセスできるように権限を設定します。
「main.gs」を開き、画面上部の「実行」ボタンをクリックします。
画像のようなポップアップが表示されますので、「権限を確認」をクリックします。
アカウントの選択画面が表示されるので、受信用メールアドレスをもつユーザを選択します。
以下の画面が表示されますので、「詳細」をクリックします。
表示された詳細内の「Gmail連携(安全ではないページ)に移動」をクリックします。
認証画面が表示されますので、「許可」をクリックし完了です。
スクリプトプロパティの設定
「APIトークン」は秘匿性の高い情報のため、スクリプトプロパティで管理します。
スクリプトプロパティに「APIトークン」を追加します。
画面左のプロジェクトの設定アイコンをクリックし、「スクリプトプロパティを追加」をクリックします。
プロパティに「SS_API_TOKEN」、値にAPI トークンの発行で発行した値を設定し、
「スクリプトプロパティを保存」 をクリックし完了です。
トリガーの設定
サンプルスクリプトがフォーム送信で実行されるよう、Google Apps Scriptのトリガーを設定します。
スクリプトエディタの左側のトリガーアイコンをクリックします。
右下の「トリガーを追加ボタン」をクリックします。
実行する関数を選択で「mailapp」を、
時間ベースのトリガーのタイプを選択で「分ベースのタイマー」、
時間の間隔を選択で「5分おき」を選択し、「保存」をクリックします。
以下のようにトリガーが作成されます。
動作確認
実際にサンプルスクリプトを実行して、タスクが登録されるか確認しましょう。
・受信用メールアドレスに向け、以下のフォーマットで登録内容を入力し、メールを送信します。
件名:SmartStageタスク新規登録
本文:
*所属部署名*:<所属部署名>
*お名前*:<登録者名>
*問い合わせの内容*:<内容>
・「SmartStage SeviceDesk」の画面でタスクが増えていることを確認してください。
サンプルスクリプト(config.gs)
/**
* グローバル定数
* /
/* SmartStage登録先情報 */
const SS_API_ENDPOINT = "https://api.smart-stage.io/"; // リクエスト送信先URL
const SS_TARGET_DATASTOREID = "<データストアID>"; // 「データストアID」「サービスリクエスト」
const SS_TARGET_ACTIONID = "<アクションID>"; // 「新しいデータを登録する」「アクションID」
/* 検索対象メールの条件を設定 */
const MAIL_SUBJECT_KEYWORD = "SmartStageタスク新規登録"; // 検索対象 件名に含まれるキーワード
const GMAIL_LABEL_NAME = "ss_registered"; // gmail SmartStage登録済label名
const MAIL_FROM_ADDRESS = "<メールアドレス>"; // 差出人メールアドレス
const DAYS_LATER = 7; // 期限日の設定(依頼日から何日後か設定する) →デフォルトで7日後
/* 空メールへの返信メール本文 */
const RETURNMAIL_SUBJECT = `<SmartStage>タスクを登録しました`
const RETURNMAIL_BODYTEXT = `お問い合わせありがとうございます。\n` +
'アイテムID:'
/* 返信用メールアドレス */
const MAIL_REPLY_ADDRESS = "smartstage.0001@gmail.com";
/* 登録対象画面項目ID */
const DEPARTMENT = "<問い合わせ者 所属部署名>" // 問い合わせ者 所属部署
const NAME = "<問い合わせ者 氏名>" // 問い合わせ者 氏名
const EMAIL_ADDRESS = "<問い合わせ者 Email>" // 問い合わせ者 Email
const ISSUE_DATE = "<発行日(日付・時刻)>" // 発行日(日付・時刻)
const PREFERRED_DATE = "<対応希望日(日付・時刻)>" // 対応希望日(日付・時刻)
const CATEGORY = "<カテゴリ>" // カテゴリ
const TITLE = "<タイトル>" // タイトル
const CONTENT = "<問い合わせ内容>" // 問い合わせ内容
サンプルスクリプト(main.gs)
/**
* 指定条件でメールを検索し、該当するメールをSmartStageへ登録するスクリプト
*/
function mailapp() {
// Gmailにラベルを追加
GmailApp.createLabel(GMAIL_LABEL_NAME);
const labelSs = GmailApp.getUserLabelByName(GMAIL_LABEL_NAME);
/* メール取得処理_start */
const threads = GmailApp.search(`is:unread is:inbox subject:${MAIL_SUBJECT_KEYWORD} -label:${GMAIL_LABEL_NAME}`);
Logger.log("スレッドの数:" + threads.length)
if (threads.length) {
for (const thread of threads) {
const messages = thread.getMessages();
messages.forEach(function (message) { // messages配列の中身を1つずつ取りだしmessageに追加
if (message.isUnread()) {
const recievedPlainbody = message.getPlainBody();
Logger.log("メッセージの内容:" + recievedPlainbody);
const issueDate = new Date(); // 発行日
const preferredDate = new Date(); // 対応希望日(デフォルトで発行日+7日)
preferredDate.setDate(preferredDate.getDate() + DAYS_LATER);
// POSTするBODY設定用の変数を定義
let bodyData = {};
// 登録内容を設定
bodyData = {
"fields": {
[DEPARTMENT]: extractMailBody(recievedPlainbody, '*所属部署名*:'), // 問い合わせ者 所属部署(テキスト)
[NAME]: extractMailBody(recievedPlainbody, '*お名前*:'), // 問い合わせ者 氏名(テキスト)
[EMAIL_ADDRESS]: emailOf(message.getFrom()), // 問い合わせ者 Email(eMail)
[ISSUE_DATE]: Utilities.formatDate(issueDate, 'Asia/Tokyo', "yyyy-MM-dd'T'HH:mm:ss'+09:00'"), // 発行日(日付・時刻)
[PREFERRED_DATE]: Utilities.formatDate(preferredDate, 'Asia/Tokyo', "yyyy-MM-dd'T'HH:mm:ss'+09:00'"), // 対応希望日(日付・時刻) →デフォルトで7日後
[CATEGORY]: '7MvWIelPL3XUx7IsCvqAw', // カテゴリ
[TITLE]: 'メール問い合わせ', // タイトル
[CONTENT]: extractMailBody(recievedPlainbody, '*問い合わせの内容*:'), // 内容
}
,"workspaceId": "<ワークスペースID>" //「ワークスペースID」
}
// POSTするHEADERを設定
const headData = {
"authorization": "Bearer " + PropertiesService.getScriptProperties().getProperty("SS_API_TOKEN")
};
// POSTするためのOPTIONを設定
const options = {
"method": "post",
"headers": headData,
"payload": JSON.stringify(bodyData),
"contentType": "application/json",
"muteHttpExceptions": true
};
/* アイテム登録_start */
// POSTリクエスト実行(createAPI)
const createResult = UrlFetchApp.fetch(`${SS_API_ENDPOINT}/datastores/${SS_TARGET_DATASTOREID}/actions/${SS_TARGET_ACTIONID}/create?name=false`, options).getContentText('UTF-8');
// メールを既読にする
message.markRead();
// 登録完了メールを送信する
const sendMailSubject = `タスク登録受付完了`;
const sendMailBody = RETURNMAIL_BODYTEXT + createResult;
// メール送信
GmailApp.sendEmail(emailOf(message.getFrom()), sendMailSubject, sendMailBody);
/* アイテム登録_end */
}
// SmartStageへ登録済みのスレッドへラベル付与
thread.addLabel(labelSs);
});
};
}
}
サンプルスクリプト(tools.gs)
/**
* 修飾されているメールアドレス(<xxxxx>xxx@xxx.com)をメールアドレス(xxx@xxx.com)に変換する。
*/
function emailOf(s) {
const emailRe = new RegExp("[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*.)+[a-zA-Z]{2,}");
const m = s.match(emailRe);
if (m) { // m != null
return m[0];
}
return "";
}
function extractMailBody(text, keyword) {
let startIndex = text.indexOf(keyword);
if (startIndex === -1) {
return null;
}
startIndex += keyword.length;
let endIndex = text.indexOf("\n", startIndex);
if (endIndex === -1) {
return null;
}
const returnValue = text.substring(startIndex, endIndex).trim();
return returnValue;
}
コメント
0件のコメント
サインインしてコメントを残してください。