June's Story

Google Cloud Platform + PHP로 Telegram bot 만들기 본문

프로그래밍

Google Cloud Platform + PHP로 Telegram bot 만들기

Ikjunerd 2022. 4. 6. 15:00

1. Telegram 설치 후 봇 생성

  • Telegram 실행화면의 연락처를 누르고  BotFather 검색해서 대화 시작
  • BotFather 채팅창 메뉴에서 /newbot 실행하여 Telegram bot 생성
  • 생성완료되면 API 토큰을 보내주는 데 저장해놓음
  • 이렇게 하면 텔레그램에서 할일은 끝

2. Google Cloud Platform에 Bot 서버 생성

  • Google Cloud Platform (GCP) 들어가서 무료로 시작하기 눌러서  GCP 실행

  • 결제 계정 생성 
    • Terminal에서 deploy할때 Cloud build api가 활성화되어 있어야하는데 Cloud build 를 활성화 할려면 결제 계정이 설정되어 있어야 함
    • 결제 계정 생성 전에 만든 프로젝트는 결제 계정이 적용 안되는 경우가 있는 것 같으니 먼저 생성

  • 결제 계정 생성하고 초기화면으로 가서 프로젝트 생성 (My First Project)

원하는 이름으로 프로젝트 만들고 console 홈으로 이동

  • 콘솔 홈 화면에서 오른쪽 위 터미널 모양 아이콘 눌러서 Cloud Shell 활성화 -> 편집기 열기
  • 편집기 열어서 나오는 왼쪽 폴더 창에 오른클릭해서 telegrambot 이라고 폴더 생성하고 app.yaml, index.php, php.ini 파일 생성 

app.yaml

1
2
3
4
5
runtime: php55
api_version: 1
handlers:
- url: /.*
  script: index.php
cs

 

php.ini

1
extension = "curl.so"
cs

 

index.php

BOT_TOKEN 자기것으로 바꿔서 입력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
define('BOT_TOKEN''5156495869:AAGq5jjsBvA_UaeN-eZUXxYgJq7RXzaXd3s');
define('API_URL''https://api.telegram.org/bot'.BOT_TOKEN.'/');
 
$content = file_get_contents("php://input");
$update = json_decode($contenttrue);
 
$chatId = $update["message"]["chat"]["id"];
$text = $update["message"]["text"];
 
if($text)
{
    $url = API_URL."sendmessage";
 
    $postData = array('chat_id'=>$chatId,'text'=>$text,
    'reply_markup'=> array('hide_keyboard' => true),'parse_mode'=> "Markdown");
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_POST, count($postData));
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
 
    $result = curl_exec($ch);
    curl_close($ch);
}
cs

 

  • 편집기 화면에서 -> 터미널 열기 버튼 눌러서 터미널 활성화
  • app.yaml이 있는 폴더로 이동해서 다음 명령어 입력하여 프로그램 빌드
1
gcloud app deploy
cs

 

  • 처음 deploy 하면 Cloud Build API 가 사용 설정 안되어 있다는 에러 발생할 수 있음 그러면 로그에 나오는 링크로 가서 활성화 하면 됨
  • 지역 선택하라는 메뉴가 나오면 아무데나 하면 되는데 asia-northeast3가 서울임 
  • deploy가 완료되면 다음과 같이 target url이 나옴 

3. GCP 서버와 Telegram bot을 Webhook으로 연결해주기

  • Telegram bot에 전달한 메세지를 처리하기 위한 서버로 위에서 만든 서버를 지정해주기 위해서 다음과 같은 메세지를 보내면 됨

https://api.telegram.org/bot(텔레그램봇토큰)/setWebhook?url=(GCP타겟url) 

 

위의 예제의 경우를 대입하면

 

https://api.telegram.org/bot5156495869:AAGq5jjsBvA_UaeN-eZUXxYgJq7RXzaXd3s/setWebhook?url=https://iconic-range-346402.du.r.appspot.com 

을 인터넷 주소창에 넣고 엔터치면 됨

  • Telegram에서 테스트하기
  • 연락처에 내가 생성한 봇 이름을 검색해서 대화 시작

Comments