namiowelcomeの日記

ギターとバンドと映画と小説と私。たまにプログラム。

"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」には、お世話になってるなぁ・・・

f:id:namiowelcome:20200907010344p:plain

 よく思うんだけど、"オープンソース" の世界って、ほぼ "恩恵" しか受けてないよね。"Google" もそうなんだけど、この "Slack" も無償プランレベルでも相当なツールとして働いてくれて。ものを創る技術者の端くれとして、いつも「ほんと凄いよな」って思っている。もちろん、チャットツールは他にもたくさんあって(私は4種類ぐらいは常時使ってる)、ぜ~んぶ、基本無償。(いくつか有料プラン使ってるけど、毎月ルノアールのコーヒー代2杯くらいだ)。この驚きと多少の謎については今度詳しく書きたいんだけど・・・今日のお題は違うね。

 もっと、直球でゆこうぜ。

いかに、利用者の「困った、疑問、ご依頼」を素早く察知するか・・・

 「おうちソクたび」のサポートは 熱いよ。LINEから届くメッセージをリアルタイムに感知、できるだけ速い対応するためには、この「SLACK」と 「LINE botへの着信」の連携は必須だった。しかも、連携はたいして難しくないんだ、これが。ここでお披露目するほどのことか、と思われる方も多いことだろう。

 だから、ここでは概念的なところを、少し実際のコード交えて紹介して お役に立てる方が少しでもいれば、よしとしよう。

 

 Slackにメッセージを送る方法はいくつかって、いままでよく使われていた簡単な方法は「Incoming Webhook」という Slackで用意してくれてるアプリを使う方法。

これはほんとお手軽。

※色々見たけど、この記事がとてもシンプルでわかり易かったな。スバラシと思います。
PHPでslackにメッセージを送ってみる

 

 でもねぇ。「おうちソクたび」のサポートではもっとやりたい事、利用者サポートを向上させるための機能が必要で、それするには、直接APIをたたき(アクセスして利用することね)たかったのでした。

 

 で、API に用意されている "postMessage" という関数を使って色々対応することにしたよ。

 

SLack側

#1 左上の

f:id:namiowelcome:20200907011937p:plain

 

#2 右上の [ビルド] から

f:id:namiowelcome:20200907012625p:plain

(ここで、英語版に変わっちゃうのは私だけ? でも no problem)

 

#3 [Create New App] をクリックしよう

f:id:namiowelcome:20200907012833p:plain


#4 アプリに名前つけて

f:id:namiowelcome:20200907013143p:plain

(Beatlesに会えるアプリ・・・創れれば世界を制覇できるな)

 

#5 作成後画面

f:id:namiowelcome:20200907013631p:plain

#6 スコープの設定(及ぶ範囲、ね)

  左メニューの「QAuth & Permissions」から

f:id:namiowelcome:20200907023322p:plain

 ・「Scope」のところで

#6-2  "chat;write" と "user:write" を 追加してセット。

f:id:namiowelcome:20200907023749p:plain

 #6-3 一番上の 「Install App to Workspace」でどこに送るかをセット

f:id:namiowelcome:20200907024213p:plain

#7 APIにアクセスするための トークンが発行される 

これだけさ。(ここで生成された各Key、トークン を保存しておこう)

 

システム側

※PHPでもpythonでもいいのだけど、今日は PHPで。 

#21 送信用の class をつくる
 ※実際は利用するシステムのフレームワークなどの 創り方に沿うと思うけれど、一般的な書き方で。
/* 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 っていいよねー。

 #21-2 メインの api アクセスする情報生成部分
$payload = array(
	'channel' => '(チャンネル名を指定)', # ※チャンネルIDの方がいいらしい
	'username' => '(表示されるアプリ名)', # apiで変えられるんだよね
	'token' => $this->apiKey, # 先にセットしている値
	'icon_url' => '(表示されるアイコン)', # これも変更自在
	・・・・・ほかにもいろいろ
);

こんな感じで用意して・・・

 
 #21-3 送信用の関数をたたく
return $this->httpPost(
	$this->slackApiUrl,
	$payload
);

 

★実際は

 ・ログ出力の関数

 ・バリデーション

 ・try else

 なんかでエラートラップ必要だけど。

 

でもとにかく簡単だから、Slack使ってるなら試すべきだね。

 

★ちょっとした TIPS

 API利用してメッセージ送る際、自在にメンション送ることも可能なのだけど

@(Slack名前) # 通常
<!here> # @here 使いたいとき
<!subteam^(グループのID)|(グループの名前)> # グループに送りたいとき

 だよ。

 

 

今回 大幅にプランが増えて、サポートの仲間も大変だぁ

f:id:namiowelcome:20200907033925p:plain

 問い合わせもたくさんいただいている。

 今まで以上に 「Slack」さんにはお世話になるなぁ。

 

 「おうちソクたび」配達後の 現地とのLIVE セッションも盛り上がっているはずだよ。

 

では、今日はこの辺で。Peter Green 聴かなきゃ。

またね。