第543話:Google Group 連携で、ラクラクML管理(1)

2017年7月10日

メールでの情報共有

メーリングリストは便利です。

組織内の「情報共有」に使ったり、お客様への「情報通知」に使ったりと、多くの企業で日常的に活用されています。しかし、その「メンテナンス作業」がオロソカになってしまうケースは少なくありません。
  • メールが届くべきではないヒトに届いている(情報漏洩?)
  • メールが届くべきヒトに届いていない(新入悲劇あるある?)
そんな状況が、世界中で発生していることでしょう。

購読メンバーの自動追加

以下の業務プロセス定義は「資料請求対応フロー」です。

このワークフローはお客様の「Web申込」によって開始されます。そして、その申込案件が自動工程『メルマガ追加』に到達すれば、自動的に「お客様のメールアドレス」がメーリングリスト(Google Group)に追加される仕組みとなっています。

この様な処理の「無人化」は、G Suite 管理者が管理画面にアクセスして手動でデータコピーする手間を無くすだけでなく、設定ミスやタイムロスによるトラブルを未然に防ぐことにも寄与します。また手動設定では困難だった「アドレス追加の履歴記録」をも実現します。

[資料請求対応]

[資料請求対応:「1.資料を送付」画面]

自動工程の挙動

この自動工程は「サービス工程」と呼ばれ、設定だけでワークフロー工程を無人化することが可能です。(サーバーサイド処理)

※この例では「標準のサービス工程」ではなく「アドオンされたサービス工程」が使用されています。あらかじめ定義ファイル(Addon-XML)をインポートしておく必要があります。

自動工程(上図で言えば「メルマガ追加」)に案件が到達すれば、定義ファイルに従った処理が行われます。この例であれば、お客様が入力した「メールアドレス」が『Google Group』(厳密には『Admin SDK Directory API』)にPOST送信(OAuth2リクエスト)され、自動的に「メンバー」として追加されます。

<定義ファイルのソース>
<?xml version="1.0" encoding="UTF-8"?><service-task-definition> 

<label>Google Group member add</label> 
<label locale="ja">Google Group メンバー追加</label> 

<summary>1. Get Secret: https://console.developers.google.com/apis/dashboard 
2. Manage Domain: https://admin.google.com/ManageOauthClients 
3. Config [OAuth 2.0 Setting] 
</summary> 

<help-page-url>https://www.questetra.com/tour/m4/m415/addon-googlegroup-member-add</help-page-url> 
<help-page-url locale="ja">https://www.questetra.com/ja/tour/m4/m415/addon-googlegroup-member-add</help-page-url> 

<configs> 
  <config name="conf_OAuth2" required="true" form-type="TEXTFIELD"> 
    <label>A: Set OAuth2 Config Name (at [OAuth 2.0 Setting])</label> 
    <label locale="ja">A: OAuth2通信許可設定名 (←[OAuth 2.0 設定])</label> 
  </config> 
  <config name="conf_DataIdB" required="true" form-type="SELECT" select-data-type="STRING_TEXTFIELD|SELECT_CHECKBOX"> 
    <label>B: Select STRING/CHECKBOX for Group Address (Non-existent Error)</label> 
    <label locale="ja">B: Groupアドレスが格納されている文字列型データorチェックボックス型データを選択してください(存在しない場合、エラー)</label> 
  </config> 
  <config name="conf_DataIdC" required="true" form-type="SELECT" select-data-type="STRING_TEXTFIELD"> 
    <label>C: Select STRING DATA for Email to Add</label> 
    <label locale="ja">C: 追加するメールアドレスが格納されている文字列型データを選択してください</label> 
  </config> 
  <config name="conf_DataIdX" required="false" form-type="SELECT" select-data-type="STRING_TEXTAREA"> 
    <label>X: Select STRING DATA for Access Log (update)</label> 
    <label locale="ja">X: 通信ログが格納される文字列型データを選択してください (更新)</label> 
  </config> 
</configs> 


<script><![CDATA[ 
// Google Group member add via Admin SDK Directory API (ver. 20170703) 
// (c) 2017, Questetra, Inc. (the MIT License) 

//// == 工程コンフィグの参照 / Config Retrieving == 
var oauth2  = configs.get( "conf_OAuth2" ) + ""; 
var dataIdB = configs.get( "conf_DataIdB" ); // (returns key) 
var dataIdC = configs.get( "conf_DataIdC" ); // (returns key) 
var dataIdX = configs.get( "conf_DataIdX" ); // (returns key) 

//// == ワークフローデータの参照 / Data Retrieving == 
var targetGroups = []; 
var dataDefB = engine.findDataDefinitionByNumber( dataIdB ); 
if( dataDefB.matchDataType("SELECT_CHECKBOX") ){ 
  var selectedGroups = data.get( dataIdB ); 
  for( var i = 0; i < selectedGroups.size(); i++ ){ // java.util.ArrayList 
    var pushGroup = selectedGroups.get(i).getValue() + ""; 
    targetGroups.push( pushGroup ); 
  } 
}else{ 
  var pushGroup = data.get( dataIdB ) + ""; 
  targetGroups.push( pushGroup ); 
} 
var memberEmail = data.get( dataIdC ) + ""; 

//// == 演算 / Calculating == 
var accessLog = ""; 
var token = httpClient.getOAuth2Token( oauth2 ); 

for( var i = 0; i < targetGroups.length; i++  ){ // javascript array 
  var uri = "https://www.googleapis.com/admin/directory/v1/groups/" + targetGroups[i] + "/members"; 
  var requestObj = {}; 
  requestObj.email = memberEmail; 
  requestObj.role = "MEMBER"; 
  var response = httpClient.begin() 
    .bearer( token ) 
    .body( JSON.stringify( requestObj ), "application/json" ) 
    .post( uri ); 
  accessLog += "---POST request--- " + response.getStatusCode() + "\n"; 
  accessLog += response.getResponseAsString() + "\n"; 
} 

//// == ワークフローデータへの代入 / Data Updating == 
if( dataIdX !== "" ){ 
  retVal.put( dataIdX, accessLog ); 
} 
]]></script> 


<icon> 
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACuUlEQVRYR82X0VHbQBCGd8UT8BA6iFMBTgXxIwjP4A4SKoBUEFNBTAU4HTgz6PCjqCCkgpAOnBf5Sfdnfs3JcxKSLBmUyc34wZLu9t/d2+/2VFqMk5OTwd7e3gcRGfIHYKCqA38qgCdVfRKRR/7SNH1YLpf83zi06W0Yhp9E5FJVabjzAPCoqrMoir7VTa4UMB6PR9ba27KXnRW4CYxOEAQXd3d3cXmNZwLotare7mqsaR6AC2PM3P+mIMDl+lcfxvM10zR95++NgoCzs7MrEfnapwAR+RxF0Sy3URDQZ/hzg+U0FASMRqOjg4MDltObPqIA4E+SJIM4jleVEeBDV3qz1xZB40EQTMqVUFmGYRiy7imC8HnxAPAgIlfGGEKqMBpBdHp6OlFVluX5LioAfAcwv7+/X7QCEasAAIwxN/4E7o39/f2RIyKjc8T3eYSch3zE3D6SgOv1OvZz7dI7VdVVUxXwgy+O69MmhLaNCMUfHh6eA7iiAwCujTHTujLMBHiLrwAwfAtr7c82h4vzdKiqxwAYtUkeMb7rKqDK0YznALJwu1SMvA83Kaqa/BoC2ka/7rtGEjJ0P15qoWk+gPd+OVadhqz/yz5EALgxxvC82Yw6EL26iCrj2f6p89TRkFWxE4TydQkjEZlWUfCZAJKvDBD2CEEQcJeznLhH3m7J8W9XHYskSRY+jLgWWeCTsXwc0+NLALMkSW7KJMsNMzpBEGQ0zIe1dlXnpTtl2VuStNwHrUC0gZAxhmHsPFxv+dGH0a4cyKGTtdzW2sp2W1VJPkaGMPLhtBG/q4DO3tdN+L8F/IumtLEndCXH20xvPaG1dljbljNvfXbGWy8m+cZx5TPfBp22OxMA4TTp3BO6aPDwOG5rzP/OtWrz8nVs62FUNubhOLueiwiRWkCy83JzPbfWxm06qL/sgpkwsGVshgAAAABJRU5ErkJggg== 
</icon> 

</service-task-definition> 


管理者が留意すべき事

「サービス工程」は定義ファイル(Addon-XML)のインポートによって、簡単に利用可能です。

自社で必要な処理に見合う「サービス工程」が入手できない場合には、既存の定義ファイルをアレンジしたり、第三者によってアレンジされたものを使用することもあるでしょう。

※ 事実、クラウド API にリクエストを投げるようなサービス工程などは無数のパターンが考えらます。


しかし、たとえばこの例では『Admin SDK Directory API v1』(※)と呼ばれる、G Suite ドメイン全体の管理 API との通信が定義されています。操作スコープが「admin.directory.group.member」に限定されてはいますが、悪意を持ったプログラマは、公開メルマガのアドレスや情報収集目的のアドレスが自動追加されるようなコードに改編することも可能です。

「サービス工程」の定義ファイルは、信頼できる開発者によって作成されたものを使うようにしなければなりません。

※ システム環境設定と言えば「プロビジョニングAPI」が使われていました。G Suite (Google Apps) でも、2006年のサービス開始当初から2015年4月に廃止されるまで幅広く使われていました。


<事前のOAuth2.0 通信許可設定>
1. Google Developers Console 設定
ダッシュボード( https://console.developers.google.com/apis/dashboard )にアクセスし『Admin SDK Directory API』を有効にし、『クライアント ID』と『クライアント シークレット』を取得します。
  • アプリケーションの種類: ウェブアプリケーション
  • 承認済みのリダイレクト URI: https://s.questetra.net/oauth2callback

2. G Suite システム設定
ドメイン管理画面の『Advanced Settings > Authentication > Manage API client access』( https://admin.google.com/ManageOauthClients )にアクセスし、『クライアント ID』とその通信スコープについて許諾します。
  • Client ID: (Google Developers Console で取得したもの)
  • Scope: https://www.googleapis.com/auth/admin.directory.group.member

3. Questetra ワークフローアプリの通信設定
[OAuth 2.0 Setting]を設定し、リフレッシュトークンを取得します。
  • Name: 任意
  • Authorization Endpoint: URLhttps://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force (Google標準)
  • Token Endpoint URL: https://accounts.google.com/o/oauth2/token (Google標準)
  • Scope: https://www.googleapis.com/auth/admin.directory.group.member
  • Client ID: (Google Developers Console で取得したもの)
  • Consumer Secret: (Google Developers Console で取得したもの)

<モデリング動画(8倍速)>



<データ項目一覧画面>


[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫

[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿