HameSlack
SlackとWordPressを統合するためのパーフェクトなヘルパープラグインです。WordPressからSlackに通知を送ったり、Slackから投稿を作成したり、あなた次第でなんでもできます。
コアコンセプト
デフォルトだとこのプラグインは何もしません。ほんとです。Slackはたくさんのインテグレーション用APIを持っていますが、HameSlackはそのうち3つだけを使います。
- Incoming Webhook をSlackへの投稿に使います。
- Outgoing Webhook をSlackからのリクエスト取得につかいます。
- Custom Bot をSlackとやりとりするときに使います。
上の方にあるものがより簡単なものです。このプラグインはSlackとWordPressの接続を手助けしてくれるので、あなたはSlackでなにをするかだけに集中できます。
設定
必要なものはすべて管理画面で設定できます。設定 > HameSlack 設定
へ行き、認証情報を保存してください。
使い方
一番簡単なのは、Slackに投稿することです。このためのシンプルな方法があります。
<?php do_action( 'hameslack', $content, $attachments, $channel ) ?>
なぜdo_action
なのでしょう? というのは、WordPres環境において、プラグインを停止するとPHP関数が存在しないため、Fatal Errorを引き起こします。 do_action
はプラグインが突然停止しても何一つ影響を与えません。$attachments
は連想配列の配列で、画像やタイトル、色などを設定できます。詳しくはSlack ドキュメンテーション をごらんください。
よし、それではいつこれを実行すべきでしょうか?
ケース 1: レビューの要求
あなたはWordPressでニュースメディアを管理していると仮定しましょう。何人かの編集者とたくさんのライターがいます。あなたのワークフローでは、新米ライターはまだ信頼がおけないので、レビューなしに記事を公開することはできません。ニュースサイトにはよくあることです。新米ライターは記事を書き終えると、投稿ステータスを 「承認待ち」に変更します。これで編集者が管理画面に行き、投稿ステータスを「公開済み」に変更します。
このワークフローは編集者のレビューで止まってしまうことがあります。したがってSlackに通知を送るのはよいアイデアでしょう。Incoming Webhooks がこれを可能にしてくれます。
<?php // 投稿ステータスが変更したら通知を送る add_action( 'transition_post_status', function ( $new_status, $old_status, $post ) { if ( 'post' !== $post->post_type ) { // 投稿でなければ無視 return; } if ( ( 'pending' === $new_status ) && ( 'pending' !== $old_status ) ) { // 投稿が新たに「承認待ち」になったら $edit_link = admin_url( "post.php?post={$post->ID}&action=edit" ); $title = get_the_title( $post ); $content = "@channel new post is waiting review: {$title} {$edit_link}"; do_action( 'hameslack', $content ) ); } }, 10, 3 );
ケース 2: Slackから下書きを作る
もしあなたがSlackをコミュニケーションツールとして、WordPressをパブリッシングプラットフォームとして利用している場合、おそらくSlackでより長い時間を過ごしていることでしょう。しかし、Slack上における会話は「フロー」であり、時間が経つと見つけるのが困難になります。もし誰かがよいアイデアを投稿したら、それを下書きとして保存しましょう。
Outgoing Webhooks がこれを可能にします。
<?php // このフィルターはoutgoing webhookによって起動します。 add_filter( 'hameslack_rest_response', function ( $response, $request, $post ) { // 投稿スラッグによって、どのエンドポイントがヒットしたのか識別します。 switch ( $post->post_name ) { case 'save-draft': // テキストを分割し、1行目をタイトルにします。 $lines = explode( "", $request['text'] ); $title = array_shift( $lines ); $content = implode( "n", $lines ); $post_id = wp_insert_post( [ 'post_title' => $title, 'post_content' => $content, 'post_status' => 'draft', 'post_type' => 'post', ] ); // レスポンスを作成。これはボットとして投稿します。 $edit_link = admin_url( "post.php?post={$post_id}&action=edit" ); $response['text'] = "新しい下書きが作成されました: {$edit_link}"; break; } return $response; } );
定期的な通知があるなら、このワークフローはもっとよくなるでしょう(例・「あなたが下書きxxxを作成してから7日が経過しました。どうしますか?」)
ケース 3: 特定のキーワードを持つチャットを週次で保存する
あなたが音楽レビューサイトを運営していて、ツイートの週間まとめを作っていると仮定しましょう。あなたはネガティブなツイートをそこに含めたくないので、あなたのチームメンバーは”GT”というキーワードをつけてtwitterのURLをSlackに投稿するようにしています。そのため、あなたは「よいツイート」のリストを「GT」で探すことによって取得できるわけです。
ユーザーやメッセージ、チャットのリストを取得するには Bot がうまく働いてくれます。HameSlackはボットと統合できます。Slackでボットを登録し、APIトークンをWordPressの管理画面で入力してください。それで終わりです。
ボットはSlackのAPIを簡単に操作できます。このケースでは channels.histroy エンドポイントが必要です。このAPIにおけるchannelパラメーターはチャンネルID(例 CX92810)を意味し、チャンネル名(例 general)ではないことに注意してください。心配いりません、HameSlackはそのためのショートカットを用意しています。以下のコードをごらんください。
<?php // 週次のCronを登録する add_action( 'init', function () { if ( ! wp_next_scheduled( 'weekly_tweet_summary' ) ) { wp_schedule_event( current_time( 'timestamp', true ), 'weekly', 'weekly_tweet_summary' ); } } ); // Cronで行うアクションを登録 add_action( 'weekly_tweet_summary', function () { // APIを取得。 $latest = current_time( 'timestamp', true ); $oldest = $latest - 60 * 60 * 24 * 7; $messages = hameslack_channel_history( 'general', $latest, $oldest, [ 'count' => 100, ] ); if ( is_wp_error( $messages ) ) { // 失敗。 return; } // コンテンツを作成する $content = implode( "\n\n", array_filter( array_map( function ( $message ) { // $message is an object. $text = trim( $message->text ); if ( 0 !== strpos( $text, 'GT' ) ) { return false; } $text = trim( str_replace( 'GT', '', $text ) ); if ( 0 === strpos( $text, 'https://twitter.com' ) ) { return $text; } else { return false; } }, $messages ) ) ); // コンテンツができているかチェック if ( ! $content ) { return; } // 投稿して通知を出す $post_id = wp_insert_post( [ 'post_title' => sprintf( 'Twitterログ: %s', date_i18n( 'Y-m-d', $now ) ), 'post_content' => $content, 'post_type' => 'post', 'post_status' => 'draft', ] ); $edit_link = admin_url( "post.php?post={$post_id}&action=edit" ); hameslack_post( "twitterのログを作成しました: {$edit_link}" ); } );
ちょっと長いですか? でも、カスタマイズするといろんなことができますよ。
必要環境
PHP 5.4以上。