Go를 사용하여 음성 통화에 오디오 파일 재생

과거 강좌에서 우리는 Go를 사용하여 makereceive의 음성 통화를 어떻게 하는지 배웠다.
이 자습서는 Go와 Voice API을 사용하여 음성 통화를 수신한 후 통화에서 오디오 파일을 재생하는 과정을 안내합니다.
호출을 받을 때 Vonage가 보낸 웹훅 노드에 응답하는 서버를 만들 것입니다.그리고 우리는 음성 기능을 갖춘 Vonage 프로그램을 만들어서 전송된 음성 호출 루트를 목적지까지 전달할 것이다.마지막으로 API는 활성 호출에 오디오 파일을 스트리밍하도록 지시합니다.

선결 조건
이 강좌를 계속 공부하려면 다음과 같은 사항이 필요합니다.
  • 전화번호
  • Go installed locally
  • A Vonage account and virtual phone number

  • 코드 작성
    Vonage가 가상 번호에 대한 음성 호출을 받았을 때, 웹 훅을 설정해서 음성 호출을 받았는지 확인합니다.이 설정은 프로그램에 특정한 것입니다. 이 강좌 뒤에 프로그램을 만들고 설정할 것입니다.
    이 웹훅에 대한 모든 요청을 처리하기 위해 코드를 작성합시다.play-an-audio-stream-into-a-call.go이라는 파일을 만들고 다음 내용을 이 파일로 복사합니다.
    package main
    
    import (
        "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
        "os"
    
        "github.com/joho/godotenv"
        "github.com/vonage/vonage-go-sdk"
        "github.com/vonage/vonage-go-sdk/ncco"
    )
    
    func answer(w http.ResponseWriter, req *http.Request) {
        uuid, _ := req.URL.Query()["uuid"]
        from, _ := req.URL.Query()["from"]
    
        MyNcco := ncco.Ncco{}
    
        talk := ncco.TalkAction{Text: "Thank you for calling."}
        MyNcco.AddAction(talk)
    
        conversation := ncco.ConversationAction{Name: from[0], StartOnEnter: "false"}
        MyNcco.AddAction(conversation)
    
        fmt.Println("uuid is :" + uuid[0])
    
        data, _ := json.Marshal(MyNcco)
    
        w.Header().Set("Content-Type", "application/json")
        w.Write(data)
    }
    
    func main() {
        http.HandleFunc("/webhooks/answer", answer)
        http.ListenAndServe(":3000", nil)
    }
    
    우선, 우리는 새로운 Go 프로그램을 만들었는데, 그 중 웹 훅 URL /webhooks/answer이 있어서, 모든 전보를 처리하는 데 사용된다.이 프로그램은 서버를 정지하기 전까지 http.ListenAndServe(":3000", nil) 회선을 통해 서버로 실행할 수 있습니다.answer 함수는 두 개의 호출 제어 객체(NCCO)를 만듭니다.첫 번째는 TalkAction으로 예정된 문자열을 휴대전화에 있는 사람에게 전달한다.두 번째 방법은 통화 구간을 회의 통화에 추가하고 회의 통화는 회선을 유지하며 우리가 음성 흐름을 통화에 전달할 수 있도록 하는 것이다.
    다음은 활성 통화에 오디오 파일을 재생하는 기능을 추가해야 합니다.이는 /play-audio으로 정의된 URL을 통해 수행됩니다.따라서 func main() { 위에 다음 코드를 추가합니다.
    func playAudio(w http.ResponseWriter, req *http.Request) {
        godotenv.Load("../.env")
        uuid, _ := req.URL.Query()["uuid"]
    
        privateKey, _ := ioutil.ReadFile(os.Getenv("VONAGE_APPLICATION_PRIVATE_KEY_PATH"))
        auth, _ := vonage.CreateAuthFromAppPrivateKey(os.Getenv("VONAGE_APPLICATION_ID"), privateKey)
        client := vonage.NewVoiceClient(auth)
    
        result, _, _ := client.PlayAudioStream(uuid[0],
            "https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3",
            vonage.PlayAudioOpts{},
        )
    
        // or to stop the audio
        // result, _, _:= client.StopAudioStream(os.Getenv(uuid[0]))
        fmt.Println("Update message: " + result.Message)
    }
    
    및 다음: http.HandleFunc("/webhooks/answer", answer)에 다음을 추가합니다.
    http.HandleFunc("/play-audio", playAudio)
    
    Vonage 가상 번호의 전화를 받는 것을 처리하기 위해 웹훅을 만들었습니다.응답하면 터미널에서 호출 uuid을 볼 수 있습니다. 이것은 음성 호출의 특정 ID입니다.
    테스트를 하기 전에 인터넷에 항목을 공개하고 계기판에 계정을 설정해야 합니다.계속해서 인터넷에 이 프로젝트를 공개합시다.

    인터넷에 프로젝트 공개
    Vonage는 전화를 받으면 미리 구성된 웹훅 URL에 HTTP 요청을 보냅니다.Go 어플리케이션은 인터넷을 통해 수신할 수 있으므로 using Ngrok을 사용하는 것이 좋습니다.
    다음 명령을 사용하여 Ngrok을 시작합니다.
    ngrok http 3000
    
    나중에 필요하므로 ngrok에서 사용하는 HTTPS URL을 복사합니다.다음 예와 유사합니다.
    https://abc1234.ngrok.io -> http://localhost:8080
    

    Note This URL will be different every time you run the command if you're using the free plan. So you will have to update your application in the Dashboard each time you run the command.



    구성 설정
    Dashboard의 응용 프로그램 아래에 응용 프로그램을 만듭니다.새 프로그램의 이름을 지정하고 '공개 키와 개인 키 생성' 을 선택하면 private.key 파일을 다운로드할 수 있습니다.이 파일을 만든 코드 옆으로 이동합니다.
    응용 프로그램에 음성 기능을 추가하고 이전에 복사한 Ngrok URL을 사용하여 URL을 구성합니다.응답 URL은 [paste ngrok url]/webhooks/answer, 이벤트 URL은 [paste ngrok url]/webhooks/event.최근에 구입한 Vonage 가상 번호 옆에 있는 Link 버튼을 클릭하여 새 애플리케이션을 전화 번호로 연결합니다.
    수집된 모든 새 정보에 따라 프로젝트 디렉토리에 .env 파일을 만들고 다음 변수를 추가합니다.
    VONAGE_APPLICATION_PRIVATE_KEY_PATH=
    VONAGE_APPLICATION_ID=
    
    올바른 값을 가지도록 위의 변수를 업데이트합니다.예를 들어 첫 번째는 private.key, 두 번째는 프로그램을 만들 때 개발자 패널 페이지에 application ID을 표시해야 한다.
    Vonage 가상 번호를 구매하여 Vonage 프로그램을 만들고 웹 훅 이벤트를 처리하는 코드를 작성했습니다.당신의 프로젝트를 테스트할 때가 됐어요!

    테스트 해볼게요.
    인바운드 음성 호출을 처리하는 방법에 대해 알아보기 위해 Vonage 애플리케이션과 전화 번호를 구성했습니다.우리는 또한 play-an-audio-stream-into-a-call.go 내부에 웹 훅을 만들어서 모든 입국 호출 요청을 처리했다.마지막으로, 우리는 오디오 파일을 지정한 호출에 재생하기 위해 다른 단점을 추가했습니다. 이 단점은 수동으로 터치됩니다.
    지금은 이 프로그램을 테스트할 때다.다음 명령을 실행하면 웹 서버를 시작하고 웹 훅을 사용하여 요청을 탐지합니다.따라서 다음 명령을 실행하여 새 애플리케이션을 테스트합니다.
    go run play-an-audio-stream-into-a-call.go
    
    가상 번호로 전화를 걸면 상대방이 인용한 "전화 주셔서 감사합니다"라는 말을 들을 수 있다.통화가 계속되는 것 외에는 아무 일도 없었던 것 같다.
    현재 브라우저를 열고 http://localhost:3000/play-audio?uuid=[paste your uuid here]을 입력하십시오. 전화를 걸 때 [paste your uuid here]을 터미널의 uuid 출력으로 바꿉니다.이 URL을 입력하면 통화에서 재생되는 오디오 스트림이 표시됩니다.완료하면 통화를 끝냅니다.
    현재, 가상 전화번호를 빌리고, 이 새 번호에 대한 웹 훅 호출을 처리하기 위해 Vonage 프로그램을 만들었습니다.이 번호로 전화를 걸 때, 당신의 코드는 지금 통화에 음성 메시지를 추가해서 들을 수 있도록 합니다.그리고 사건을 촉발하여 오디오 파일을 통화에 재생하고 핸드폰에서 듣습니다!

    한층 더 읽다
    이 강좌에 표시된 코드를 Go code snippets repository에서 찾을 수 있습니다.
    다음은 Go와 Go의 서비스를 결합하는 데 사용되는 기타 자습서입니다.
  • Go Explore the Vonage APIs with Vonage Go SDK
  • Handle Incoming Voice Calls with Go
  • Text-to-Speech Voice Calls With Go
  • 커뮤니티와 공유하고 싶은 질문, 조언 또는 아이디어가 있으면 언제든지 Community Slack workspace을 클릭하십시오.나는 이 강좌를 실시한 모든 사람의 피드백과 당신의 프로젝트가 어떻게 운영되는지 기꺼이 듣겠습니다.

    좋은 웹페이지 즐겨찾기