Twilio를 통해 SMS 및 음성 서비스 사용

Twilio는 비즈니스 커뮤니케이션의 미래를 선도하며 개발자가 음성, VoIP, 메시징을 애플리케이션에 삽입할 수 있도록 지원합니다. Twilio는 클라우드 기반 글로벌 환경에 필요한 모든 인프라를 가상화하고 Twilio 커뮤니케이션 API 플랫폼을 통해 노출합니다. 애플리케이션을 간단히 빌드하고 확장할 수 있습니다. 사용한 만큼만 지불하는 유연한 가격과 클라우드의 안정성이 주는 혜택을 누려보세요.

Twilio Voice를 사용하면 애플리케이션에서 전화를 걸고 받을 수 있습니다. Twilio SMS를 사용하면 애플리케이션에서 SMS를 주고 받을 수 있습니다. Twilio Client를 사용하면 모든 휴대전화, 태블릿 또는 브라우저에서 VoIP 통화를 할 수 있고 WebRTC를 지원합니다.

가격 책정

Google App Engine 고객에게는 업그레이드 시 SMS 메시지나 수신 통화에 사용할 수 있는 무료 통화 크레딧이 제공됩니다.

Twilio는 사용한 만큼만 지불하는 서비스입니다. 설정 수수료가 없고 언제든지 계정을 해지할 수 있습니다. 자세한 내용은 Twilio 가격을 참조하세요.

플랫폼

Twilio 플랫폼은 Twilio 마크업 언어(TwiML), RESTful API, VoIP SDK(웹브라우저, Android, iOS용)로 구성됩니다. 도우미 라이브러리는 여러 언어로 지원됩니다. Twilio 도우미 라이브러리에서 전체 목록을 확인할 수 있습니다.

TwiML

TwiML은 전화나 SMS를 받을 때 수행해야 할 작업을 Twilio에 알려주는 일련의 안내입니다. 누군가 Twilio 번호 중 하나로 전화를 걸거나 SMS를 보내면 Twilio는 해당 전화번호와 연결된 URL을 찾아 해당 URL로 요청을 전송합니다. Twilio는 해당 URL의 TwiML 안내를 읽고 수행할 작업을 결정합니다.

  • <Say> - TTS(텍스트 음성 변환)
  • <Record> - 통화 녹음
  • <Play> - 발신자를 위한 메시지 재생
  • <Gather> - 발신자에게 키패드의 숫자를 누르도록 요청
  • <Message> - 메시지 보내기

Twilio 마크업 언어 문서에서 다른 동사와 기능에 대해 알아보세요.

REST API

Twilio REST API를 사용하면 계정, 전화번호, 통화, SMS, 녹음에 대한 메타데이터를 쿼리할 수 있습니다. 또한 전화를 걸거나 SMS를 보내는 등과 같은 기능을 수행할 수 있습니다.

API는 REST 원칙을 기반으로 하므로, 매우 간편하게 애플리케이션을 작성 및 테스트할 수 있습니다. 브라우저를 사용하여 URL에 액세스할 수 있고 모든 프로그래밍 언어로 거의 모든 HTTP 클라이언트를 사용하여 API와 상호 작용할 수 있습니다. 자세한 내용은 Twilio REST API를 참조하세요.

샘플 코드 복사

Twilio와의 통합을 보여 주는 전체 코드 샘플을 GitHub에서 확인할 수 있습니다. 이 샘플 코드를 사용하려면 코드를 로컬 머신에 복사하세요.

go get -u -d -v github.com/GoogleCloudPlatform/golang-samples/twilio
cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/appengine_flexible/twilio

설정

Twilio를 사용하여 전화를 받거나 SMS를 보내고 받으려면 다음 안내를 따르세요.

  1. 프로젝트를 만듭니다. 자세한 내용은 App Engine의 Go용 'Hello, World'를 참조하세요.

  2. Twilio 계정을 만듭니다.

  3. Twilio에서 번호를 만듭니다. 앱에 맞는 Twilio 번호의 URL을 구성합니다. 샘플 코드의 예는 다음과 같습니다.

    • 음성 요청 URL을 https://[your-app-id].appspot.com/call/receive로 구성
    • SMS 요청 URL을 https://[your-app-id].appspot.com/sms/receive로 구성
  4. app.yaml의 환경 변수 섹션에서 Twilio 설정을 구성합니다. 예를 들면 다음과 같습니다.

    env_variables:
      TWILIO_ACCOUNT_SID: your-account-sid
      TWILIO_AUTH_TOKEN: your-auth-token
      TWILIO_NUMBER: your-twilio-number

  5. 명령줄을 사용하여 Twilio 패키지를 로컬 머신에 다운로드합니다. 예를 들면 다음과 같습니다.

    go get -u bitbucket.org/ckvist/twilio/twiml
    go get -u bitbucket.org/ckvist/twilio/twirest
    
  6. 애플리케이션의 import 문에 Twilio 패키지를 포함시킵니다. 예를 들면 다음과 같습니다.

    import (
    	"bitbucket.org/ckvist/twilio/twiml"
    	"bitbucket.org/ckvist/twilio/twirest"
    )
    

  7. 앱의 로컬 테스트를 준비하려면 명령줄을 사용하여 로컬 머신에서 환경 변수를 설정합니다. 다음과 같은 샘플 코드의 예를 사용할 수 있습니다.

    export TWILIO_ACCOUNT_SID=[your-twilio-account-sid]
    export TWILIO_AUTH_TOKEN=[your-twilio-auth-token]
    export TWILIO_NUMBER=[your-twilio-number]
    
  8. 애플리케이션을 로컬에서 실행하여 콜백 및 SMS 전송을 테스트할 수 있습니다. 예를 들면 다음과 같습니다.

    go run twilio.go
    

전화 받기

설정을 완료한 후 첫 번째 애플리케이션을 만듭니다.

twilio.goreceiveCallHandler 함수는 수신 전화에 응답하고 TwiML 안내를 반환하는 방법을 보여줍니다.

func receiveCallHandler(w http.ResponseWriter, r *http.Request) {
	resp := twiml.NewResponse()
	resp.Action(twiml.Say{Text: "Hello from App Engine!"})
	resp.Send(w)
}
app.rb/call/receive 핸들러는 수신 전화에 응답하고 TwiML 안내를 반환하는 방법을 보여줍니다.

# Answers a call and replies with a simple greeting.
post "/call/receive" do
  content_type :xml

  response = Twilio::TwiML::VoiceResponse.new do |r|
    r.say(message: "Hello from Twilio!")
  end

  response.to_s
end
  1. App Engine에 프로젝트를 배포합니다. 프로젝트를 배포한 후 HTTP POST 요청을 http://your-app-id.appspot.com/call/receive로 보내면 다음 텍스트가 반환됩니다.

    <?xml version="1.0" encoding="UTF-8"?>
      <Response>
        <Say>Hello from Twilio!</Say>
      </Response>
    
  2. http://your-app-id.appspot.com/call/receive URL을 복사하여 Twilio 계정의 번호 페이지에 있는 음성 URL 상자에 붙여 넣습니다.

  3. 이제 Twilio 번호로 전화를 겁니다. 'Hello from Twilio!'라는 음성이 들립니다. 전화를 걸면 Twilio가 URL을 가져와서 위에 나열된 XML 안내를 실행합니다. 그런 다음 더 이상 안내가 없으므로, Twilio가 전화를 끊습니다.

SMS 보내기

twilio.gosendSMSHandler 함수는 SMS를 보내는 방법을 보여줍니다.

func sendSMSHandler(w http.ResponseWriter, r *http.Request) {
	to := r.FormValue("to")
	if to == "" {
		http.Error(w, "Missing 'to' parameter.", http.StatusBadRequest)
		return
	}

	msg := twirest.SendMessage{
		Text: "Hello from App Engine!",
		From: twilioNumber,
		To:   to,
	}

	resp, err := twilioClient.Request(msg)
	if err != nil {
		http.Error(w, fmt.Sprintf("Could not send SMS: %v", err), 500)
		return
	}

	fmt.Fprintf(w, "SMS sent successfully. Response:\n%#v", resp.Message)
}
  1. 실제 전화번호를 사용하고 싶으면 to 매개변수를 변경합니다. to 번호로는 휴대전화 번호 등 어떤 발신 번호도 가능합니다.

  2. 업데이트된 코드를 배포한 후 URL(http://your-app-id.appspot.com/sms/send)을 웹브라우저에 입력하여 SMS를 보냅니다.

SMS 수신

Twilio Go 패키지를 사용하여 Twilio로 수신 SMS를 받을 수 있습니다.

twilio.goreceiveSMSHandler 함수는 수신 SMS에 응답하고 TwiML 안내를 반환하는 방법을 보여줍니다.


func receiveSMSHandler(w http.ResponseWriter, r *http.Request) {
	sender := r.FormValue("From")
	body := r.FormValue("Body")

	resp := twiml.NewResponse()
	resp.Action(twiml.Message{
		Body: fmt.Sprintf("Hello, %s, you said: %s", sender, body),
		From: twilioNumber,
		To:   sender,
	})
	resp.Send(w)
}

App Engine에 업데이트된 코드를 배포한 후 Twilio 번호로 SMS를 보냅니다. 인사말 응답을 받게 됩니다.

Twilio에 대해 자세히 알아보기

지금까지 몇 가지 기본 기능을 사용해 봤습니다. 안전하고 확장 가능한 애플리케이션을 빌드하기 위해 더 많은 기능과 권장사항에 대해 알아보세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Go용 Google App Engine Flexible Environment