Alexa 스킬은 에코, 에코 닷 등과 같은 Amazon 디바이스에서 실행하도록 빌드할 수 있는 '앱'입니다. 이 블로그 게시물에서는 서버리스 Azure 함수 및 Azure에서 실행되는 Couchbase 백엔드를 사용하여 Alexa 스킬을 빌드하는 방법에 대해 알아봅니다. 이 게시물은 제가 과거에 작성한 Azure 함수, 서버리스 및 Azure의 Couchbase에 대한 많은 블로그 게시물을 기반으로 합니다:

어떤 종류의 Alexa 스킬을 구축하고 있나요?

저는 개발자 옹호자로 일하기 때문에 개발자 이벤트의 스폰서 부스에서 시간을 보내는 경우가 많습니다. 저는 이 일을 정말 좋아합니다: 사람들에게 카우치베이스가 얼마나 훌륭한지 알릴 수 있고, 개발자들로부터 카우치베이스로 어떤 문제를 해결하려고 하는지 피드백을 받기도 하죠.

하지만 부스 운영에서 제가 싫어하는 한 가지가 있다면 바로 반복입니다. 행사마다 같은 질문을 수백 번씩 받는 경우가 많아요:

  • 카우치베이스란 무엇인가요? (메모리 우선 아키텍처의 분산형 NoSQL 문서 데이터베이스)

  • 카우치베이스는 몽고DB와 어떻게 다른가요? (둘 다 문서 데이터베이스이지만 Couchbase는 주요 기능과 아키텍처에 차이가 있습니다.)

  • 카우치베이스는 카우치DB와 같은 건가요? (아니요.)

불평하는 것은 아닙니다. 다만 컨퍼런스가 곧 종료되기 때문에 100번째 질문에 답할 때 열정적으로 답변하기가 힘들다는 것입니다.

하지만 누가 항상 열정적인지 아세요? 바로 알렉사입니다! 다음 이벤트에 에코 닷을 가져가면 알렉사가 저를 도와줄지도 모르겠네요:

  • 카우치베이스란 무엇인가요? - 알렉사가 카우치베이스에 대한 흥미로운 사실을 무작위로 알려줍니다.

  • 카우치베이스는 몽고DB와 어떻게 다른가요? Alexa는 임의의 아키텍처 또는 기능 차이를 말합니다.

  • 카우치베이스는 카우치DB와 같은 건가요? Alexa가 "아니요"라고 대답합니다.

이러한 Alexa 스킬이 도움이 된다면 나중에 더 복잡한 질문에 답할 수 있도록 스킬을 확장할 수 있습니다.

이 게시물을 따라 자신만의 Alexa 스킬을 만들고 싶다면, 전체 소스 코드는 깃허브에서 확인할 수 있습니다..

디자인

알렉사 스킬은 아마존에 등록되어 있습니다. 대부분의 경우, 이들은 지정한 엔드포인트에 간단한 HTTP 요청을 하고 특정 JSON 응답을 기대합니다. Azure 함수는 HTTP 요청을 처리할 수 있습니다. Azure 함수는 응답으로 가득 찬 데이터베이스에 쿼리를 수행할 수 있으며 각 응답이 몇 번 제공되었는지 추적할 수도 있습니다.

아래는 제가 만든 최소한의 실행 가능한 Alexa 스킬 프로젝트의 하이 레벨 아키텍처 다이어그램입니다:

Architecture diagram from you

데이터 저장 및 디자인

이 스킬은 궁극적으로 카우치베이스 서버에서 일부 데이터를 쿼리할 것입니다. 두 가지 종류의 문서부터 시작하겠습니다. (이 Alexa 스킬이 유용하다고 판명되면 나중에 더 복잡한 것들을 추가하겠습니다).

문서 디자인

각 문서는 가능한 응답을 나타냅니다. 각 문서에는 3개의 필드가 있습니다:

  • 유형 - "mongodbcomparison" 또는 "whatiscouchbase"가 됩니다.

  • 숫자 - 이 응답이 사용된 횟수(0부터 시작)입니다.

  • 텍스트 - 알렉사 스킬이 말하길 원하는 텍스트를 입력합니다.

이 문서들의 문서 키 디자인은 (적어도 아직은) 중요하지 않습니다. 왜냐하면 저는 이 문서들을 검색할 때 N1QL(JSON용 SQL) 쿼리만 사용할 것이기 때문입니다. 하지만 "mongo::2" 및 "couchbase::5"와 같은 키를 만들기로 결정했습니다.

우선 이 데이터를 저비용 Azure VM의 단일 Couchbase 노드에 저장하겠습니다. 데이터 양이 적은 단일 노드는 부스 트래픽이 많아도 문제없이 처리할 수 있어야 합니다. 하지만 예를 들어 전 세계 공항에 키오스크로 설치한다면 Couchbase 클러스터를 확장해야 할 것입니다. Couchbase와 Azure로 쉽게 작업하기.

쿼리 디자인

임의의 문서를 얻으려면 N1QL 쿼리를 실행해야 합니다:

UUID는 난수 생성기 역할을 합니다. 실제 용도는 아니지만 "충분히 좋은" 기능입니다. 진정한 무작위성이 정말로 필요하다면 컬 요청 에서 random.org의 API.

이 쿼리를 실행하려면 'type' 필드에 대한 인덱스를 만들어야 합니다:

Azure 기능

Azure 함수를 만들려면 다음을 사용했습니다. 기존 .NET 라이브러리 라는 AlexaSkills.NET을 사용하면 Alexa 스킬을 만드는 데 필요한 코드를 매우 쉽게 작성할 수 있습니다.

Azure 함수 솔루션을 만든 후 NuGet을 사용하여 추가했습니다.

AlexaSkills.NET 사용

다음으로 '스피치 렛' 클래스를 만들었습니다. 저는 스피치 렛을 비동기식으로 만들기로 선택했지만 동기식 옵션도 있습니다. 네 가지 메서드를 만들어야 합니다. 현재로서는 이 중 두 가지 메서드만 스킬에 필요합니다.

그리고 OnLaunchAsync 는 Echo 사용자가 가장 먼저 도달하는 곳입니다. 사용자가 "알렉사, 매트 부스 도우미 열어줘"와 같은 말을 하면 이 코드가 몇 가지 기본 지침으로 응답합니다.

그리고 온인텐트동기화 는 대부분의 Alexa 스킬 요청이 처리되는 곳입니다. 여기서는 팩토리/전략 코드 패턴을 사용하여 호출되는 인텐트에 따라 다른 객체를 인스턴스화합니다(나중에 '인텐트'에 대해 자세히 설명합니다).

Couchbase에 연결

CouchbaseBucket.GetBucket() 사용 중입니다. Lazy 에 설명된 것처럼 이전 블로그 게시물인 Azure 함수에 대한.

따라서 '카우치베이스가 무엇인가요'라는 인텐트가 들어올 때마다 왓이즈카우치베이스인텐트프로세서 가 인스턴스화되고 실행됩니다.

앞서 언급한 N1QL 쿼리를 사용하고 있음을 주목하세요(숫자가 낮은 사실이 우선순위를 갖도록 약간 조정됨). 이 코드는 또한 카우치베이스 하위 문서 API 를 클릭하여 '숫자' 필드를 1씩 증가시킵니다.

전체 코드를 볼 수 있습니다. 깃허브의 다른 인텐트 프로세서와 비슷하지만, N1QL이 약간 다를 뿐 매우 유사합니다.

Azure 기능에 연결

마지막으로, 스피치 렛이 준비되면 Azure 함수에 쉽게 연결할 수 있습니다.

이제 Postman을 사용하여 로컬에서 테스트하거나 azure에 배포한 후 Alexa 인터페이스를 사용하여 테스트할 수 있습니다.

Alexa 스킬 만들기

Alexa 스킬을 설정하는 방법에 대한 많은 문서가 있으므로 전체 과정을 설명하지는 않겠습니다. 스킬이 공식 인증을 받으려면 아직 할 일이 더 남았지만 베타 테스트용으로는 충분합니다.

Azure Functions URL이 있으면 Alexa에서 사용할 수 있습니다. Alexa에서 HTTPS를 사용하려면 기술이 필요하지만 다행히 Azure Functions는 azurewebsites.net 하위 도메인에서 HTTPS를 제공합니다. 다음은 스크린샷입니다:

Alexa skills HTTPS configuration with Azure Functions

앞서 "인텐트"에 대해 언급했습니다. 이는 Alexa 스킬이 입력과 함께 처리할 수 있는 다양한 유형의 동작입니다. 함수 서명처럼 생각하면 됩니다. 현재 저는 3개의 인텐트를 설계했으며, 아직 인텐트에 대한 매개 변수는 없습니다. 따라서 제 인텐트 스키마는 매우 간단한 JSON 조각입니다:

Alexa skills intent schema

각 인텐트에 대해 인텐트에 매핑되는 '발화'를 만들 수 있습니다. 이는 Echo 사용자가 말할 문구이며, 어떤 인텐트에 해당하는지 나타냅니다.

Alexa skills sample utterances

저는 모든 다양한 변형을 생각해 보려고 노력했습니다. 하지만 이 기능이 더 일반적으로 작동하기를 원한다면 사용자가 "Couchbase와 {x}의 차이점은 무엇인가요?"라는 질문을 할 수 있도록 매개 변수를 설정할 것입니다.

에코 닷의 실제 사용

알렉사 스토어에 게시하지 않았습니다. '베타 테스트'로 배포했으므로 사용해 보고 싶으시면 기꺼이 초대장을 보내드리겠습니다.

다음은 제가 작년에 훌륭한 분들로부터 스피커 선물로 받은 Echo Dot에서 사용해 본 동영상입니다. 개발자 넥서스):

[유튜브 https://www.youtube.com/watch?v=RaYV6jDO8Q8&w=560&h=315]

시끄러운 부스에서 실제로 효과가 있을까요? 글쎄요, 아직 부스에 안락 의자와 베개를 가져갈 준비가 되지 않았다고 가정해 보겠습니다. 하지만 참여 데이터베이스로서 Couchbase의 힘을 보여줄 수 있는 재미있는 방법입니다.

요약

Alexa 스킬은 Azure 함수와 같은 서버리스 아키텍처를 사용하기에 좋은 곳입니다. 스킬은 간헐적으로 사용되며 Azure 함수는 실행되는 시간에 대해서만 요금을 청구합니다.

카우치베이스 서버는 이러한 앱을 위한 훌륭한 데이터베이스입니다. 처음에는 단일 부스를 처리하기 위해 작게 시작할 수 있지만 더 큰 수요를 수용하기 위해 쉽게 확장할 수 있습니다.

카우치베이스에 대한 질문이 있으신가요? 방문하기 카우치베이스 포럼.

질문이 있으신가요? 저를 찾아주세요 트위터 @mgroves.

모든 훌륭한 Azure 함수에 대한 Microsoft의 문서와 알렉사 스킬에 대한 설명서 .NET 라이브러리.

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 하나

  1. 멋진 블로그 포스팅이네요 - 고마워요, Matt! 저도 알렉사 하드웨어를 구입해야겠어요.

    1. 읽어 주셔서 감사합니다. Alexa 스킬에서 Couchbase로 또 어떤 작업을 할 수 있는지 알고 싶습니다.

  2. [...] Azure 기능 및 카우치베이스가 포함된 Alexa 스킬 [...]

댓글 남기기