Twilio API 스터디 Vol.28 - 서버리스 아키텍처에서 Twilio를 안전하게 운영하세요! 핸즈온 메모

3405 단어 twilioAWS

AWS Lambda Function 생성



AWS에 로그인하고 AWS Lambda를 선택합니다.

환영 화면에서 새로 만들기

blueprint 에 HelloWorld
  • Name: TwilioFallback
  • Description: Twilio 오류시 실행
  • Role: lambda_basic 만들기

  • AWS Lambda Function 설정



    console.log('Received event:', JSON.stringify(event, null, 2));
    console.log('Received event:', JSON.stringify(context, null, 2));
    로 코드를 변경하여 Save & Test

    페이지 아래의 실행 결과 확인

    Add event source를 살짝 봐

    Add API Endpoint 선택하고 만들기

    Amazon API Gateway 설정



    prod를 새 탭에서 열기
    페이지의 오른쪽 탭 Resources로

    Method Request



    Method Execution의 Authentication을 NONE

    통합 요청


  • Mapping Templates 선택
  • Content-Type application/json

  • Input Path Through에서 Mapping template로 변경. AWS lambda에 보낸 모든 매개변수를 검색할 수 있도록 허용
    {
      "param": {
    #foreach( $key in $input.params().querystring.keySet() )
        "$key": "$input.params().querystring.get($key)"#if( $foreach.hasNext ),#end
    #end
      }
    }
    

    통합 응답



    200개 확장

    Mapping Templates
  • Content-Type: application/xml
  • Input Path Through에서 Mapping Template로
  • <?xml version="1.0" encoding="UTF-8"?>
    <Response>
      <Say language="ja-jp">今は回線混んでるよ〜</Say>
    </Response>
    

    Method Response



    200개 확장

    추가 응답 모델
  • contenttype: application/xml
  • Models: Empty

  • 최종 확인





    Deploy API



    Deploy API에서 prod로 배포

    Stages에서 왼쪽 탐색 메뉴에서 TwilioFallback GET으로 이동하여 URL을 클릭하십시오.

    AWS Lambda에 있는 Monitoring에서 CloudWatch에 가서 확인.

    Twilio fallbackURL에 적합한 URL을 설정

    그 전화번호로 전화 걸기

    다시 CloudWatch에서 확인

    event.param.~에서 Twilio의 정보를 받아 이것을 확인했습니다.
    그리고는 Slack에 던지게 되고, Twilio로 관리자에게 전화하거나, 좋아하는 대로 Node.js로 쓴다.

    Slack 알림 샘플


    var https = require('https');
    var fs = require('fs');
    
    exports.handler = function(event, context) {
      param = {
        text: "電話エラー発生!!\nAccountSid: " + event.param.AccountSid + ",\n ErrorUrl: <" + encodeURIComponent(event.param.ErrorUrl) + "|Link>,\nFrom: " + event.param.From + ",\nTo: " + event.param.To,
        icon_emoji: ":ghost:"
      };
     var post_data = "payload=" + JSON.stringify(param);
    
     var path = "your slack incoming-webhook path";
    
     var post_options = {
          host: 'hooks.slack.com',
          port: '443',
          path: path,
          method: 'POST',
          headers: {
              'Content-Type': 'application/x-www-form-urlencoded',
              'Content-Length': Buffer.byteLength(post_data)
          }
      };
    
      // Set up the request
      var post_req = https.request(post_options, function(res) {
          res.setEncoding('utf8');
          res.on('data', function (chunk) {
              context.done();
          });
      });
    
      // post the data
      post_req.write(post_data);
      post_req.end();
    };
    

    좋은 웹페이지 즐겨찾기