저희 회사는 내부적으로 telegram을 이용합니다. zabbix로 부터 받는 alert이나 codedeploy시작 및 완료 등등. alert뿐만 아니라 chat-ops용도로도 사용하고 있습니다. 이번에 새로운 기능이 필요해서 기능도 추가할 겸 지난번에 정리하지 못해서 다시 정리합니다. telegram bot 생성이나 기본적인 사용법은 여기서 설명하지 않습니다. telegram bot은 생성되었다는 가정 하에 설명하겠습니다.
동작은 아래와 같습니다.
- telegram chat : /what 입력
- telegram webhook 실행
- AWS API gateway 호출
- AWS Lambda 실행
먼저 telegram으로 부터 받은 값을 처리할 Lambda를 생성합니다. 그리고 API gateway를 생성합니다. API는 반드시 POST로 생성해야 합니다. 그리고 API호출 시 먼저 만들었던 Lambda를 호출하도록 설정합니다. API Gateway, Lambda사용 방법은 설명하지 않을게요^^
그리고 telegram webhook을 설정합니다. 아래 내용에 각자의 정보를 입력합니다.
https://api.telegram.org/bot<bot-token>/setWebhook?url=https://<api-gateway>.amazonaws.com/ops/
참고: telegram webhook 삭제
https://api.telegram.org/bot<bot-token>/setWebhook?url=
다음은 가장 중요한 부분입니다. telegram에서 lambda로 다음과 같은 형태로 값을 전달합니다. 아래 event는 def lambda_handler(event, context): 호출시 event로 넘어오는 값입니다.
event = {
"message": {
"from": {
"username": "xxxxx",
"first_name": "xxxxxx",
"last_name": "xxxxxx",
"id": 0000000
},
"text": "/what",
"entities": [
{
"length": 000,
"type": "bot_command",
"offset": 0
}
],
"chat": {
"username": "xxxxxxx",
"first_name": "xxxxxx",
"last_name": "xxxxxx",
"type": "private",
"id": 0000000
},
"date": 1487474564,
"message_id": 6
},
"update_id": 0000000
}
python의 경우 text = str(event[‘message’][‘text’]) 이런 식으로 값을 가져오면 됩니다.