[chat-ops] telegram webhook

be:proud
3 min readFeb 19, 2017

--

저희 회사는 내부적으로 telegram을 이용합니다. zabbix로 부터 받는 alert이나 codedeploy시작 및 완료 등등. alert뿐만 아니라 chat-ops용도로도 사용하고 있습니다. 이번에 새로운 기능이 필요해서 기능도 추가할 겸 지난번에 정리하지 못해서 다시 정리합니다. telegram bot 생성이나 기본적인 사용법은 여기서 설명하지 않습니다. telegram bot은 생성되었다는 가정 하에 설명하겠습니다.

동작은 아래와 같습니다.

  1. telegram chat : /what 입력
  2. telegram webhook 실행
  3. AWS API gateway 호출
  4. 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’]) 이런 식으로 값을 가져오면 됩니다.

--

--