개발노트
고즐의 개발 및 서버 개발 노트![]()
웹사이트를 운영하다 보면 알림 기능이 필요한 경우가 있다.
이메일로 발송하면 가장 간단하지만 메일 서버 구축하거나 네이버 또는 구글 smtp를 설정해서 발송해야 한다. 외부 smtp의 경우 아이디 비밀번호를 입력해야 하고 최근에는 세팅이 더 복잡해진 느낌이다. PHP 몇 줄이면 자유롭게 알림과 발송이 가능해서 가장 쉬우면서 효과적인 방법이다.
텔레그램 봇과 PHP를 이용한 비회원 문의 알림 시스템 구축
비회원 고객도 웹사이트에서 문의를 보낼 수 있고 관리자는 텔레그램으로 즉시 알림을 받을 수 있도록 구성하는 방법을 정리한다. PHP 기반 서버라면 단순한 HTTP 요청만으로 텔레그램과 연동할 수 있으며 설치와 구현 난이도도 낮다.
텔레그램 봇 생성 절차
봇 생성
Telegram에서 BotFather를 검색해 새 봇을 생성한다. 이름 지정 후 반드시 bot으로 끝나는 username을 설정해야 한다. 생성이 완료되면 HTTP API Access Token이 제공되며 이 값이 연동의 핵심 키가 된다.
시작(Start) 활성화
생성된 봇은 사용자가 먼저 시작(Start)을 눌러야 chat_id가 발급된다. 봇 프로필 화면에서 시작 버튼을 누르고 아무 메시지를 전송하면 chat_id를 확인할 수 있다.
chat_id 확인 방법
getUpdates 활용
토큰 발급 후 다음 주소를 호출하면 chat_id를 확인할 수 있다.
https://api.telegram.org/bot{TOKEN}/getUpdates
여기서 message 객체 안의 chat 항목에 포함된 id 값이 chat_id이다.
하이픈 포함된 토큰 오류 해결
401 오류 원인
텔레그램 봇 토큰에는 하이픈이 포함되는 경우가 많다. 브라우저 주소 창에서 토큰을 포함한 URL을 직접 호출할 경우 URL 인코딩 문제로 Unauthorized가 발생할 수 있다. 이는 토큰이 틀린 것이 아니라 URL 처리 과정에서 특정 문자가 깨지는 문제다.
해결 방법 1: URL 인코딩
토큰 전체를 URL 인코딩한 값을 사용한다.
예시 토큰: 1234567890:ABCdE-FgHiJkLmNoPqRsTuV 인코딩 후: 1234567890%3AABCdE-FgHiJkLmNoPqRsTuV
해결 방법 2: 브라우저 대신 PHP로 요청
파일에서 직접 HTTP 요청을 보내면 인코딩 충돌이 사라져 오류가 발생하지 않는다.
<?php
$token = "1234567890:EXAMPLE-TOKEN";
echo file_get_contents("https://api.telegram.org/bot{$token}/getUpdates");
?>
PHP로 비회원 문의 텔레그램 알림 보내기
서버에서 알림 전송
고객은 로그인하지 않아도 웹페이지에서 문의를 제출할 수 있으며 서버는 해당 내용을 텔레그램으로 전송한다. 아래는 기본적인 PHP 연동 예제이다.
<?php
$name = $_POST['name'] ?? '익명';
$msg = $_POST['msg'] ?? '내용 없음';
$text = "새 문의 접수n이름: {$name}n내용: {$msg}";
$token = "1234567890:EXAMPLE-TOKEN";
$chat_id = "987654321";
file_get_contents(
"https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&text="
. urlencode($text)
);
?>
비회원 고객 문의 흐름
고객은 웹의 입력폼에서 메시지를 제출하고 서버는 텔레그램 API로 내용을 전송한다. 관리자는 텔레그램 앱에서 실시간으로 알림을 받아 즉시 확인할 수 있다.
비회원 상담 기능으로 확장하기
수집된 문의를 데이터베이스에 저장하거나 답변 처리 상태를 관리하도록 확장할 수 있다. 텔레그램 웹훅을 추가하면 양방향 상담 기능처럼 동작하도록 구성하는 것도 가능하다.
정리
텔레그램 봇은 비회원 고객 문의를 처리하기에 매우 적합한 도구이다. 간단한 HTTP 요청만으로 알림을 받을 수 있고 하이픈을 포함한 토큰 문제는 URL 인코딩 또는 PHP 요청을 통해 해결 가능하다. 구축 비용이나 기술 부담이 낮아 개인 개발자나 소규모 서비스에서 활용하기 좋다.