상담문의가 접수되면 Slack으로 알림 보내기(ft. PHP, cURL)
이전 포스팅에서 상담문의 글이 올라오면 이메일로 담당자에게 알림을 주는 기능을 만들었더랬습니다.
G메일 SMTP를 이용해서 메일 자동 발송하기 - php 환경
G메일 SMTP를 이용해서 메일 자동 발송하기 - php 환경
G메일 SMTP를 이용해서 메일 자동 발송하기 - php 환경 "상담 게시글이 올라오면, 담당자에게 자동으로 알림 메일이 가도록 해주세요!" 라는 요구사항을 만나고 이 글까지 오셨다면, 초보 개발자분
kincoding.com
그랬더니, 이번에는 마케팅 담당자가, Slack으로도 알림을 주는 기능이 있으면 더 좋겠다고 하다군요.
옛 말씀에 앉으면 눕고 싶고, 누우면 자고 싶다고 했던가요?^^
뭐 그까이꺼 대~충 한번 해보기로 합니다.
1. 서버환경에서 cURL이 사용가능한 상태인지 확인할 필요가 있습니다.
저의 경우 제가 만든 사이트도 아니고, 카페24 웹호스팅을 받고 있는 웹사이트라서 일단 info.php 파일을 만들어서 브라우저에서 호출을 해보았습니다.
info.php 파일의 내용입니다. 확인을 위해서 임시로 만들었고, 확인 이후에는 보안을 위해서 서버에서 삭제해주는 것이 좋겠습니다.
<?php
phpinfo();
?>
cURL을 사용할 수 없는 상태라면, cUrl 익스텐션 설치가 필요할텐데, 다행히 저는 사용가능한 상태였습니다. 재수!
아래는 phpinfo(); 함수를 실행하면 브라우저에 보여지게 되는 여러 정보들 중에 curl에 관한 부분입니다.
2. Slack 에서 Incoming Webhook 생성하기
Incoming Webhook은 외부 서비스가 Slack 채널로 메시지를 보낼 수 있도록 해주는 기능입니다.
Slack에서 Webhook을 생성하면 고유한 URL이 발급되는데, 이 URL이 PHP 코드가 메시지를 보낼 "주소"가 됩니다.
단어 그대로 Web의 어느 특정한 곳에 Hook이 하나 있는데, 여기에 데이터를 걸어주면, 미리 정의된 대로 동작을 한다!라는 정도만 이해하면 됩니다.(어떻게 보면 API랑 비슷한 구석도 있는 것 같죠? 그냥 비슷하다고 일단 생각해 두어도 됩니다.)
Slack에서 앱 추가 하기
슬랙 앱에서 채널의 가장 하단에 [+] 앱 추가 버튼을 클릭해줍니다.
그러면, 아래와 같이 추가할 앱을 선택하는 화면이 나오는데, 우리는 Incoming WebHooks를 선택해줍니다. 잘 안보이면 검색을 통해서 찾아도 됩니다.
인커밍 웹훅을 클릭해주면, 아래와 같이 '수신 웹후크'를 안내하는 페이지가 보여지고,
이때 [구성] 버튼을 클릭하면 브라우저가 뜨면서 Slack 마켓플레이스의 웹페이지가 하나 열리게 됩니다.
[Slack에 추가] 버튼을 클릭해주고, 현재 생성하려는 이 WebHook을 동작하게 만들 채널을 선택하거나 새로 생성해줍니다.
이후 이 앱에 대해 이름이나 아이콘 등 적당한 세팅을 진행해줍니다.(Web Hook의 URL은 잘 메모해두세요!)
수신 웹후크 앱이 잘 채널에 추가되면 아래와 같이 슬랙 앱에 표시가 됩니다.
저는 이 웹훅의 결과로 새로운 메시지를 던져주는 녀석의 이름을 "상담문의_알림봇"이라고 지어보았습니다.
이상과 같은 방식으로, 슬랙의 채널(대화방)에 Web Hook 봇을 하나 만들어서 대화상대처럼 등록시키는 방법을 알아보았습니다.
3.PHP 코드 작성
고객이 문의를 작성하는 상담문의 입력폼에서 Slack으로 알람을 던져주는 php 코드를 작성합니다.
앞선 포스팅에서는 e-mail로 알람을 주는 방식의 코드를 작성해보았습니다. 사용하는 도구와 전달 방식만 이메일이냐 슬랙이냐의 차이일 뿐, 처리하는 로직은 대동소이합니다.
저는 아래와 같이 코드를 작성하였습니다.
$slack_webhook_url = "https://hooks.slack.com/services/어쩌구저쩌구~블라블라~"; // Slack Incoming Webhook URL
// 중간 생략
// ↑ 이 위로는 e-mail 발송 로직이 있습니다.
// --- Slack 알림 발송 로직 시작 ---
if (!empty($slack_webhook_url)) { // Slack Webhook URL이 설정된 경우에만 실행
// Slack 메시지 본문 생성 (Plain Text 또는 Markdown 형식으로 구성)
// 이메일 본문 ($alt_message)을 활용하거나 Slack에 맞게 다시 구성할 수 있습니다.
$slack_message_text = "*[".$mail_tit."]* 새로운 문의가 접수되었습니다.\n\n" . $alt_message; // Plain text 본문 활용
// Slack 메시지 Payload (JSON 형식)
$slack_payload = json_encode([
'text' => $slack_message_text,
// 필요에 따라 다른 필드 추가 가능 (예: username, icon_emoji, attachments 등)
// 'username' => '문의 알림 봇',
// 'icon_emoji' => ':bell:',
// 'attachments' => [
// [
// 'fields' => [
// [
// 'title' => '이름',
// 'value' => htmlspecialchars($name),
// 'short' => true
// ],
// // 다른 필드들도 attachments로 추가 가능. 근데 저는 안썼어요.
// ]
// ]
// ]
]);
// curl을 사용하여 Slack Webhook으로 POST 요청 보내기
$ch = curl_init($slack_webhook_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $slack_payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($slack_payload)
]);
$slack_response = curl_exec($ch);
$curl_error = curl_error($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Slack 응답 및 에러 로깅 (선택 사항)
if ($slack_response === false) {
error_log("Slack notification failed for form type: {$type}, CURL Error: {$curl_error}");
} else if ($http_code != 200) {
error_log("Slack notification failed for form type: {$type}, HTTP Code: {$http_code}, Response: {$slack_response}");
} else {
error_log("Slack notification sent successfully for form type: " . $type); // Slack 발송 성공 로그
}
} else {
// Slack Webhook URL이 설정되지 않은 경우
error_log("Warning: Slack notification skipped. No webhook URL set for form type: " . $type);
}
// --- Slack 알림 발송 로직 끝 ---
// 이하 e-mail 전송 후 에러를 처리하던 로직이 그대로 들어 있습니다.
// 이후 생략
위 코드는 단지, Slack의 WebHook 주소로 PHP의 cURL을 이용해서 알람을 던져주기 위한 로직 부분입니다.
이전에 이메일 알람 발송의 순서 다음에 슬랙 발송을 위치시켜주면 됩니다.
1. 고객이 폼전송을 하면
2. SQL로 DB에 Insert 한 다음
3. e-mail로 담당자에게 알림 메일을 보낸다음
4. Slack으로 담당자들을 모아 놓은 채널(톡방)로 알림을 보낸다.
대략 위와 같은 플로우를 타게 되는 것입니다. 알림 메일 발송이 필요 없다면, 슬랙만 적용해서 사용해도 무방합니다.
마치며
알림용 e-mail을 발송하는 방법과, Slack으로 알려주는 방법 중 뭐가 더 쉽냐? 고 묻는다면... 저는 슬랙이라고 말하고 싶습니다.^^
저도 처음 해보는 작업이라 뭔가 복잡하고 어려울 줄 알았더니, 시간도 훨씬 덜 들고 동작도 훨씬 더 빠르더군요.
아무래도 e-mail은 SMTP로 전송을 해주고, Queue에 올라온 메일을 처리하고 하는 시간이 있어서 그런지 체감상 너무 느렸습니다.
당연하게도, SMTP 전송방식은 아주아주 옛날 고리짝 처리방식 이고, Slack은 그래도 최근의 처리방식 아니겠습니까?
막상 Slack을 이용해서 알림을 이렇게 연동하고보니, 아~ 왜 사람들이 슬랙, 슬랙 하는지 체감이 되었고, 메신저를 이렇게 오픈형으로 자유롭게 사용할 수 있다는 점이 크나큰 매력이구나~! 하는 것을 새삼 느끼는 계기가 되었습니다.
슬랙 연동... 복잡한 것 같지만, 한번 해보니 e-mail 발송보다 쉽고, 활용가치도 훨씬 더 크다고 느껴졌습니다.
함께 해보시죠!!
오늘도 즐거운 코딩, 즐코딩.
KINcoding.
'PHP' 카테고리의 다른 글
G메일 SMTP를 이용해서 메일 자동 발송하기 - php 환경 (2) | 2025.05.09 |
---|---|
PHP 사용을 위한 VSCode 기본 설치 내용 (0) | 2024.05.16 |
XAMPP 설치(ft. Local에서 PHP를 사용할 일이 생겼...) (2) | 2024.05.14 |
댓글