はじめに
INTER-Mediatorは以前からメール送信は可能でしたが、Slackのメッセージ送信についても可能にしました。メールと同様に、データベースへの書き込み、更新、読み出しの後に、それらのデータを用いてのメッセージ送信が可能です。Slack側の仕組みは簡単で、Slack Appという設定を行い、ワークスペースにインストールするだけです。Slack Appは単にボットからの書き込みを許可する設定だけです。(設定のリファレンスは本ページの末尾にあります。)
Slackでメッセージを受け付けるようにする
Slackのメッセージングを行うには、ワークスペース単位にSlack Appのインストールを行います。ここで使うSlack Appは単なる設定です。Slack Appを設定すれば、認証用のトークンが発行されます。そして、メッセージを投入するときに、どのチャンネルなのかと、どんなメッセージなのかを指定します。つまり、Slack Appを作成後は、トークン、チャンネル、メッセージの3つの情報があれば、SlackのAPIコールが可能ということになります。以下、メッセージを受け付けるようにするまでのSlack側の設定を紹介します。
SlackのAPIのページに移動します。ログインしていない場合は、「sign in to your Slack account」の部分をクリックして、まずはログインをします。
ログインのページで、ワークスペースにログインをします。
SlackのAPIのページに移動すると、Create New Appボタンが見えています。このボタンをクリックします。
パネルが表示されます。ここで、App Nameを入力し、使用するワークスペースを選択します。App Nameはメッセージの送信者として、投稿したメッセージの中で見えるようになります。そして、Create Appをクリックします。
作成したSlack Appの編集画面に入ります。以後は、必要に応じて、保存を行ってください。まず、Add features and functionalityのところにある「Permissions」のボックスをクリックします。必要ならスクロールするなどして探してください。
移動したOauth & Permissionsのページで、Scopesのボックスを見つけます。そこにあるAdd an OAuth Scopeボタンをクリックします。
ドロップダウンの枠が出てくるので、ここで、「chat:write:bot」を選択します。
Scopsのリストに、「chat:write:bot」の項目が追加されました。
ページをスクロールして前の方に移動すると、Install App to Workspaceというボタンがあります。このボタンをクリックします。
OAuthでやりとりするメッセージの設定を行います。そのままAllowボタンをクリックするので構いませんが、必要ならば設定の変更を行います。
OAuth Access Tokenとして、認証トークンが得られました。本稿では、以後はアクセストークンの例は、「xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」と記載します。Copyボタンをクリックするとクリップボードに文字列がコピーされます。
設定したことがメールでも送信されています。
Slack側の設定は以上です。
INTER-Mediatorで開発する定義ファイルの設定
サンプルファイルでは、samples/Sample_chatにあるinclude_MySQL.phpファイルに設定例があります。まず、こちらは、定義ファイルの設定例です。
<?php
require_once(dirname(__FILE__) . '/../../INTER-Mediator.php');
IM_Entry(
array(
array(
'records' => 100000000,
'name' => 'chat',
'key' => 'id',
'sort' => array(
array('field' => 'postdt', 'direction' => 'desc'),
),
'default-values' => array(
array('field' => 'postdt', 'value' => date("Y-m-d H:i:s")),
),
'authentication' => array(
'all' => array( // load, update, new, delete
'target' => 'field-user',
'field' => 'user',
),
),
'messaging' => [
'driver' => 'slack',
'create' => [
'subject-constant' => 'message-posting-test',
'body' => 'message',
]
]
),
),
array(
'authentication' => array( ... ),
'slack' => array(
'token' => 'xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'channel => '',
),
),
array('db-class' => 'PDO'),
false
);
こちらは、params.phpファイルの例です。
$slackParameters = [
"token"=>'xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
"channel" => 'message-posting-test',
];
認証トークンとチャンネルは、params.phpファイル、あるいは定義ファイルの2つ目の引数であるオプション指定に記述が可能です。両方に定義があると、params.php側が優先されます。params.phpファイルでは、変数$slackParametersに配列を代入し、配列はキーがtokenとchannelの連想配列になるようにしておきます。定義ファイルのオプション領域では、slackキーに対する連想配列で、tokenキーとchannelキーでそれぞれの指定を行います。
そして、定義ファイルのコンテキストと定義に、messagingキーを記述することで、データベース処理に対するメッセージング処理の動作を記述できます。messagingキーの直下は、driver、create、update、readのいずれかのキーを記述しますが、driverは必ず指定して、値はslackにしてください。これを省略するとメール送信とみなします。create、update、readの1つは必ず指定することになると思われます。そのデータベース処理が行われた後に、Slackへメッセージが飛びます。ここで、それぞれの操作の配列に使えるキーは、subject、subject-constat、body、body-constantのいずれかになります。subjectの2つのキーは、チャンネルを示します。チャンネルは3箇所に指定できますが、優先順位はコンテキスト内のものが最優先となります。bodyの2つのキーはメッセージです。subject、bodyは、いずれもコンテキストに存在するフィールド名を1つだけ記述します。一定の文字列で良い場合は、body-constantに文字列を記述します。なお、body-constantではテンプレート処理も行い、その中の「@@フィールド名@@」の記述部分が、コンテキストで得られるデータベースのフィールドの値に置き換わります。なお、コンテキストで複数のレコードが得られる場合、それぞれのレコードに対してメッセージが送信されます。
メッセージが送られる様子は、こちらのビデオでご確認できます。
以下、設定可能な項目について、まとめておきます。
[第1引数, コンテキスト定義]
Slackメッセージ送信
キー | インデックス | 下位のキー | 値 |
---|---|---|---|
'messaging' | 'driver' | 'slack' と指定する | |
'read' | コンテキストに対してレコードの取り出しを行った後にメールを送信する。 | ||
'subject' | チャンネルが含まれるフィールド名 | ||
'subject-constant' | チャンネルを文字列で指定。文字列内に「@@フィールド名@@」の記述があれば、フィールドのレコードに置き換わる | ||
'body' | メッセージが含まれるフィールド名 | ||
'body-constant' | メッセージを文字列で指定。文字列内に「@@フィールド名@@」の記述があれば、フィールドのレコードに置き換わる | ||
'create' | コンテキストに対してレコード作成を行った後にメールを送信する。下位のキーはreadと同じ | ||
'update' | コンテキストに対してレコードの更新を行った後にメールを送信する。下位のキーはreadと同じ |
[第2引数, オプション設定]Slackメッセージング
配列指定 | 値 | params.phpで変数名 | |
---|---|---|---|
第1次元 | 第2次元 | ||
'slack' | 'token' | Slackの認証トークン | $slackParameters |
'channel' | メッセージを送信するサーバ 連想配列、キーは第2次元のキーワードと同一 |