Twilio에서 오류가 발생했을 때 Slack에 알리고 싶습니다.

소개



Twilio를 사용한 전화 처리에서 오류가 발생하면 Slack에 알림을 보내고 싶습니다.
이 실현 방법은 2015년 10월에 @kimihom씨가 AWS를 사용한 기사를 공개되고 있지만, 이번에는 AWS 등의 외부 서비스를 사용하지 않고 Twilio Functions를 사용하여 실현한다.
  • 참고: 「 Twilio x AWS Lambda와 API Gateway 연동

  • 전체 흐름



    일련의 흐름은 다음과 같습니다.



    사전 준비


  • SLACK Incoming Webhooks URL을 만듭니다 (htps : // 아피. scck. 이 m/아 ps/)

  • 단계 개요


  • Functions 설정
  • 전화 번호 오류 처리 설정
  • 확인

  • 1. Functoins 설정



    Configure



    우선 환경 변수와 이용하는 패키지의 설정을 행한다.
    Twilio 콘솔에서 Runtime > Functions > Configure으로 이동하여 다음 설정을 구성합니다.

    Environmental Variables




    KEY
    VALUE


    SLACK_WEBHOOK_URL
    htps // // 뽀오 ks. scck. 코 m / 세 r

    SAY_MSG
    (선택 사항)


  • SLACK_WEBHOOK_URL은 사전 준비로 준비된 URL을 설정합니다
  • SAY_MSG는 선택 사항입니다. (기본값은 "지금 회선이 섞여 있습니다. 시간을 두고 다시 시도하십시오.")

  • Dependencies




    NAME
    VERSION


    @slack/client
    3.16.0


  • 아래 코드에서 Slack 알림에 Slack 모듈을 사용하기 때문에 설정
  • 2018/03/14 현재 v4.0.0은 버그가 있기 때문에 이전 버전을 지정했습니다


  • Manage



    다음으로 Function 만들기

    Twilio 콘솔에서 Runtime > Functions > Manage으로 이동하여 Function 만들기
    "+"버튼을 눌러 Blank를 선택하고 [Create]. 이하의 설정을 행한다.

    Properties




    이름
    Value


    FUNCTION NAME
    Fallback Handler

    PATH
    /fallback


  • FUNCTION NAME, PATH는 선택 사항

  • 구성




    이름
    Value


    ACCESS CONTROL
    checked

    EVENT
    Incoming Voice Calls

    CODE
    아래 참조


  • ACCESS CONTROL은 선택 사항

  • 코드


    const { IncomingWebhook } = require('@slack/client')
    
    exports.handler = function(context, event, callback) {
        console.log(context, event)
        const msg_say = context.SAY_MSG || "ただいま回線が混みあっております。時間をおいておかけ直しください。"
        const slack_url = context.SLACK_WEBHOOK_URL
        const msg = `
            電話エラー発生!!
            AccountSid: ${event.AccountSid}
            From: ${event.From}
            To: ${event.To}
            Direction: ${event.Direction}
            Logs: <https://jp.twilio.com/console/voice/calls/logs/${event.CallSid}|Link>`.replace(/^\s+/mg, '')
        const slack = new IncomingWebhook(slack_url)
        const msg_slack = {
            text: msg,
            icon_emoji: ":ghost:"
        }
        slack.send(msg_slack, function(err, res) {
            if (err) {
                console.log('Slack Error:', err)
            } else {
                console.log('Slack Message sent: ', res)
            }
            let twiml = new Twilio.twiml.VoiceResponse()
            twiml.say({voice: 'woman', language: 'ja-JP'}, msg_say)
            callback(null, twiml)
        });
    }
    

    2. 전화 번호의 오류 처리 설정



    Twilio 콘솔에서 Phone Numbers으로 이동하여 전화 번호를 선택합니다.
    설정 > 음성 및 팩스의 메인 핸들러 실패 시 1에서 작성한 Function(Fallback Handler) 지정

    3. 확인



    설정 > 음성 및 팩스 '통화 착신 시' 웹훅 URL을 존재하지 않는 URL로 변경하여 Twilio가 404 오류를 수신하도록 합니다.
    전화 번호로 전화를 걸어 설정한 음성 메시지가 흐르고 Slack에 메시지가 도착하는지 확인합니다.



    확인한 후 Webhook URL을 되돌리는 것을 잊지 마세요!

    요약 · 마지막으로


  • Twilio 전화 처리 중에 오류가 발생했을 때 Slack에 알릴 수있었습니다
  • AWS와 같은 외부 서비스를 사용하지 않고 Twilio에서만 완성되었습니다

  • Runtime > Alert Triggers를 사용하면 전화번호별이 아니라 포괄적으로 유사한 설정을 할 수 있을까?

  • 추가


  • 제목의 "Twilio에서 오류가 발생했을 때"는 정확하게는 "Twilio가 요청을 던진 앱 서버가 오류를 반환했을 때"입니다.
    앱 서버가 크지 않은 경우는 Twilio와 앱을 하나의 것으로 인식하고 있는 경우도 많기 때문에 타이틀의 표기로 합니다.
  • 좋은 웹페이지 즐겨찾기