givepro

Telegram API - PHP 본문

프로그래밍 언어/PHP

Telegram API - PHP

givepro 2022. 10. 28. 13:51
반응형

이전에 텔레그램 메신저로 서비스의 판매 알림 기능을 구현한적이 있던 내용이 있어서 포스팅하려고 합니다.

 

https://hexoul.blogspot.com/2017/11/telegram-sendmessage-api.html

 

Telegram sendMessage API 간단 사용

텔레그램(Telegram)의 API를 이용하여 간단히 나에게 메세지를 보내보자. 준비: 텔레그램 가입 먼저 요약하자면, 텔레그램의 Bot을 이용하여 채팅방을 만들고 메세지를 보내는 API에 해당 채팅방을

hexoul.blogspot.com

 

위 포스팅 요약

텔레그램 API를 이용하여 Bot을 활용, 그리고 채팅방으로 메시지를 보내기

  1. Bot 생성
    1. 웹브라우저(Web browser)에서 https://web.telegram.org/#/im?p=@BotFather
    2. 하단의 Start 버튼 클릭 또는 /start
    3. /newbot 입력
    4. Bot 별칭 지정: chat 리스트 등 외부에 보일 이름
    5. Bot 이름 지정: 반드시 이름이 bot으로 끝나야 한다. ex) hexoul_bot
    6. Access token 메모: 1-4까지 진행하면 BotFather가 메세지를 보내는데 이것이 Access token이다. "Use this token to access the HTTP API:" 바로 아래의 긴 문자열을 복사해둔다.
    7. chat 리스트에서 1-4. 에서 지정한 별칭을 찾아 Start 버튼 클릭 또는 /start 입력
  2. 채팅방 정보 가져오기1-5에서 얻은 Access token이 123ABC였다면, "https://api.telegram.org/bot123ABC/getUpdates" 가 된다.마지막으로 확인된 chat_id는 반드시 메모하도록 한다.
  3. 만약 "result": []로 되어있다면 아직 Bot 시작 전일 수 있으므로 1-7이 잘 되었는지 확인한다. 정상적으로 처리되었다면 아래와 같은 결과가 반환된다.
  4. 내 정보 API 호출: "https://api.telegram.org/bot" + Access token + "/getUpdates" 를 웹브라우저에 입력한다.
  5. 채팅방 메시지 보내기
  6. https://api.telegram.org/bot123ABC/sendMessage?chat_id=????????&text=hello

위 내용은 기본 API를 활용한 JSON 형태의 데이터 Return이다

위 정리된 내용을 참고하여 PHP에서는 CURL을 활요하여 전송 및 데이터를 확인한다.

 

$tg_api_key = "{apiKeyValue}";
$tg_chat_id = "{chatId}";

ob_start();
include './sample.html';
$include = ob_get_contents();
ob_end_clean();

$message = <<<TEXT
{$include}
TEXT;

$params = array(
	'chat_id' => $tg_chat_id,
	'text' => $message
);

$tg_send_url = "https://api.telegram.org/".$tg_api_key."/sendMessage";

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
curl_setopt($ch, CURLOPT_URL, $tg_send_url);
$postFields = array(
	'chat_id' => $tg_chat_id,
	'text' => $message,
	'parse_mode' => 'HTML',
	'disable_web_page_preview' => false,
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);

$response = curl_exec($ch);

if(!$response)
	echo curl_error($ch);

curl_close($ch);

$result = json_decode($response, true); // object 형식인 경우 true 추가 필요
Comments