"Slack"・・・Slash でも Crash でも Blackでもないよ。利用者サポート向上化・円滑化への仕組みの構築。・・・【中の人だけど非公式:おうちソクたび開発日誌】
大好きな Gun's のギタリストは "Slash"。"ロンドンから呼んでる" のは、"The Clash" 。最近亡くなって寂しい "Peter Green" の名曲は "Black Magic Woman" だよね。全く関係ない話だけど、「おうちソクたび」で大活躍しているのは、 "Slack" っていうツールだ。簡単に言えばチャットツール。他にもいろいろあるけど、その強力な "使える" 魅力は、様々な連携機能だよね。
ご利用者の方とのやりとりは、LINEを基本に構築してて、当然管理画面でサポートしてんだけど、"Slack" に連携させて、より強力に素早く対応をできる環境を創る、努力をしてんだ。(してる・・・doing)、まだ、完全に頷けるところには到達していないけど。努力してます。
「連携」はとても簡単。ネット中に情報はあふれてるけど、簡単に紹介しておこう・・・一応 技術話題(扱おうとしている)ブログだし。
さて、今日は何の曲聴きながら、書こうかな。
私が中の人である、素晴らしいWEBサービス「おうちソクたび」を紹介しながら、より良きWEBサービスへの格闘の記録を吐露。
中の人ですが、非公式開発ブログです。執筆の責任は全て私。念のため
Guns N' Roses - Sweet Child O' Mine
やっぱこれだね。
個人的には、詩の内容、よりは 曲や構成が
バシバシ好みですー。
「Slack」には、お世話になってるなぁ・・・
よく思うんだけど、"オープンソース" の世界って、ほぼ "恩恵" しか受けてないよね。"Google" もそうなんだけど、この "Slack" も無償プランレベルでも相当なツールとして働いてくれて。ものを創る技術者の端くれとして、いつも「ほんと凄いよな」って思っている。もちろん、チャットツールは他にもたくさんあって(私は4種類ぐらいは常時使ってる)、ぜ~んぶ、基本無償。(いくつか有料プラン使ってるけど、毎月ルノアールのコーヒー代2杯くらいだ)。この驚きと多少の謎については今度詳しく書きたいんだけど・・・今日のお題は違うね。
もっと、直球でゆこうぜ。
いかに、利用者の「困った、疑問、ご依頼」を素早く察知するか・・・
「おうちソクたび」のサポートは 熱いよ。LINEから届くメッセージをリアルタイムに感知、できるだけ速い対応するためには、この「SLACK」と 「LINE botへの着信」の連携は必須だった。しかも、連携はたいして難しくないんだ、これが。ここでお披露目するほどのことか、と思われる方も多いことだろう。
だから、ここでは概念的なところを、少し実際のコード交えて紹介して お役に立てる方が少しでもいれば、よしとしよう。
Slackにメッセージを送る方法はいくつかって、いままでよく使われていた簡単な方法は「Incoming Webhook」という Slackで用意してくれてるアプリを使う方法。
これはほんとお手軽。
※色々見たけど、この記事がとてもシンプルでわかり易かったな。スバラシと思います。
PHPでslackにメッセージを送ってみる
でもねぇ。「おうちソクたび」のサポートではもっとやりたい事、利用者サポートを向上させるための機能が必要で、それするには、直接APIをたたき(アクセスして利用することね)たかったのでした。
で、API に用意されている "postMessage" という関数を使って色々対応することにしたよ。
SLack側
#1 左上の
#2 右上の [ビルド] から
(ここで、英語版に変わっちゃうのは私だけ? でも no problem)
#3 [Create New App] をクリックしよう
#4 アプリに名前つけて
(Beatlesに会えるアプリ・・・創れれば世界を制覇できるな)
#5 作成後画面
#6 スコープの設定(及ぶ範囲、ね)
左メニューの「QAuth & Permissions」から
・「Scope」のところで
#6-2 "chat;write" と "user:write" を 追加してセット。
#6-3 一番上の 「Install App to Workspace」でどこに送るかをセット
#7 APIにアクセスするための トークンが発行される
これだけさ。(ここで生成された各Key、トークン を保存しておこう)
システム側
※PHPでもpythonでもいいのだけど、今日は PHPで。
/* Slack送信用の class を用意して */ class SlackComponent { /* key および URL などの情報をセット */ private $apiKey = 'xoxb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; private $apiKey_bot = 'xoxb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; private $slackApiUrl = 'https://slack.com/api/chat.postMessage'; private $timeout = 3; public function sendAttach( array $attachments=null, ・・・・・, # ここにはユーザーサポートするための色々なオプションあるけど見せられなーい ) { } private function httpPost($url, $data) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); ・・・・・, # このオプションも見せられなーい、ご容赦 curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($curl, CURLOPT_HEADER, true); $response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); //リクエスト実行後 $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size); curl_close($curl); $body = json_decode($body, true); return $body; } }
こんな感じで たたき創って・・・
※こういう時に curl っていいよねー。
$payload = array( 'channel' => '(チャンネル名を指定)', # ※チャンネルIDの方がいいらしい 'username' => '(表示されるアプリ名)', # apiで変えられるんだよね 'token' => $this->apiKey, # 先にセットしている値 'icon_url' => '(表示されるアイコン)', # これも変更自在 ・・・・・ほかにもいろいろ );
こんな感じで用意して・・・
return $this->httpPost( $this->slackApiUrl, $payload );
★実際は
・ログ出力の関数
・バリデーション
・try else
なんかでエラートラップ必要だけど。
でもとにかく簡単だから、Slack使ってるなら試すべきだね。
★ちょっとした TIPS
API利用してメッセージ送る際、自在にメンション送ることも可能なのだけど
@(Slack名前) # 通常 <!here> # @here 使いたいとき <!subteam^(グループのID)|(グループの名前)> # グループに送りたいとき
だよ。
今回 大幅にプランが増えて、サポートの仲間も大変だぁ
問い合わせもたくさんいただいている。
今まで以上に 「Slack」さんにはお世話になるなぁ。
「おうちソクたび」配達後の 現地とのLIVE セッションも盛り上がっているはずだよ。
では、今日はこの辺で。Peter Green 聴かなきゃ。
またね。