Kakao i Agent SDK::Android::개발 프로세스::음성 인식 개발

페이지 이동경로

음성 인식 개발

음성 인식 개발은 사전 작업과 Android Studio 설정을 완료해야만 진행할 수 있습니다.
음성 인식 개발 프로세스는 SDK 초기화, Permission 추가, 클래스 구현 작업 등을 포함하여, 최종적으로 애플리케이션을 실행하는 과정을 모두 포함합니다.

안내
음성 인식 개발 프로세스 중 SDK 초기화하기로그인별 동작 처리하기 단계의 작업 순서는 고객사의 애플리케이션에 헤이카카오 로그인 기능만 구현하는지 또는 헤이카카오 로그인/비로그인 기능을 동시 구현하는지에 따라 상이합니다. 따라서 반드시 개발 중인 케이스에 따라 개발을 진행하시기 바랍니다.

  • 현재(2021년 12월) 기준으로 Kakao i Agent SDK에서는 헤이카카오 비로그인 기능만 단독으로 구현하는 것은 불가능합니다.

개발 전 체크리스트

음성 인식 개발 프로세스를 정상적으로 수행하기 위해서는 다음의 사전 작업을 완료해야 합니다.

개발 전 체크리스트
항목 설명
Kakao i Agent SDK 연동 해당 프로젝트에 Kakao i Agent SDK 연동
- Kakao Developers 사이트의 Kakao SDK v2 사용법 문서 참고
애플리케이션 등록 Kakao Developers 사이트에 개발한 애플리케이션 등록
- 사전 작업 > 애플리케이션 등록 문서 참고

SDK 초기화하기

Kakao i Agent SDK를 초기화하기 위해 하기 순서에 따라 Application.onCreate() 메서드에서 KakaoI 클래스에 내장된 메서드들을 체이닝 방식으로 확장합니다.
SDK 초기화는 헤이카카오 로그인 기능만 구현 또는 헤이카카오 로그인 기능과 비로그인 기능을 함께 구현하는 경우로 구분됩니다.

안내
Kakao SDK 초기화 및 개발 환경은 Kakao Developers 사이트의 구현 방식을 기반으로 합니다.

로그인 기능만 구현 시

개발 중인 애플리케이션에 헤이카카오 로그인 기능만 구현 시, SDK 초기화 순서는 다음과 같습니다.

  1. 사전에 협의된 Phase 정보(sandbox, stage, real)를 KakaoI.with()항목에 입력합니다.

    코드예제Phase 정보 입력

    KakaoIWallpad.with(applicationContext, "{사용 가능 Phase}")
    

    안내
    개발 Phase는 사전에 Kakao i 담당자와 논의해야하며, 자세한 설명은 개발 Phase 정의하기 챕터를 참고하시기 바랍니다.
  2. Kakao i 서버로 패키지 정보를 전달하기 위해 providePackageInfo()를 확장합니다.

    • 확장 시에는 Package Name, Version Name, Version Code 정보를 포함하고 있는 packageInfo를 구현해야 합니다.
    • Version Name과 Version Code 값을 별도로 지정하지 않을 경우에는 기본값으로 전달됩니다.
    안내
    Package Name을 Kakao i 서버에 미리 등록해야 합니다. 자세한 설명은 앱 기본 정보 전달하기 챕터를 참고하시기 바랍니다.
  3. Kakao 계정 인증 정보를 SDK로 전달하기 위해 provideKakaoIAuth()를 확장한 모듈을 KakaoI.module()에 전달합니다.

    • 모듈 확장 시, SDK에서 전달받은 인증 정보로 Access Token, Refresh Token, AppUser ID 정보를 제공하는 인터페이스가 구현되어야 합니다. 이 정보는 로그인 시점 또는 유저 확인 시점 등에서 Lazy 프로퍼티를 호출하며, 호출 시점에 값이 제공되지 않으면 오류가 발생합니다.
    • 모바일 앱의 AppUser ID는 Kakao SDK에서 제공하는 Access Token Info에서 확인 가능하며, 자세한 설명은 Kakao Developers > 토큰관리 문서를 참고하시기 바랍니다.
  4. 만약 SDK에 기본 탑재된 View Template이 아닌 다른 View Template을 구현할 경우에는 provideTemplateHandler()를 확장해야 합니다.

    • 다른 View Template을 구현할 경우, 의존성 추가 단계에서 com.kakao.i:sdk-android-agent 항목을 추가해야 합니다.

로그인/비로그인 기능 함께 구현 시

헤이카카오 로그인 기능과 헤이카카오 비로그인 기능을 함께 구현 시, SDK 초기화 순서는 다음과 같습니다.

  1. 사전에 협의된 Phase 정보(sandbox, stage, real)를 KakaoI.with()항목에 입력합니다.

    코드예제Phase 정보 입력

    KakaoIWallpad.with(applicationContext, "{사용 가능 Phase}")
    

    안내
    개발 Phase는 사전에 Kakao i 담당자와 논의해야하며, 자세한 설명은 개발 Phase 정의하기 챕터를 참고하시기 바랍니다.
  2. Kakao i 서버로 패키지 정보를 전달하기 위해 providePackageInfo()을 확장합니다.

    • 확장 시에는 Package Name, Version Name, Version Code 정보를 포함하고 있는 packageInfo를 구현해야 합니다.
    • Version Name과 Version Code 값을 별도로 지정하지 않을 경우에는 기본값으로 전달됩니다.
    안내
    Package Name을 Kakao i 서버에 미리 등록해야 하며, 자세한 설명은 앱 기본 정보 전달하기 챕터를 참고하시기 바랍니다.
  3. Kakao 계정 인증 정보를 Kakao i Agent SDK로 전달하기 위해 provideKakaoIAuth()를 확장한 모듈을 KakaoI.module()에 전달합니다.

    • 모듈 확장 시, Kakao SDK에서 전달받은 인증 정보로 Access Token, Refresh Token, AppUser ID 정보를 제공하는 인터페이스가 구현되어야 합니다. 이 정보는 로그인 시점 또는 유저 확인 시점 등에서 Lazy 프로퍼티를 호출하며, 호출 시점에 값이 제공되지 않으면 오류가 발생합니다.
    • 모바일 앱의 AppUser ID는 Kakao SDK에서 제공하는 Access Token Info에서 확인 가능하며, 자세한 설명은 Kakao Developers > 토큰관리 문서를 참고하시기 바랍니다.

    3-1. 헤이카카오 비로그인 기능을 사용을 위해 다음의 메서드를 사용하여 헤이카카오 비로그인 사용 여부를 설정합니다.

    • 헤이카카오 비로그인이 SDK 초기화 시점에 활성화가 되면, AuthManager를 통해 로그의 전반적인 상태를 관리할 수 있으며, 자세한 설명은 로그인별 동작 차리하기 챕터를 참고하시기 바랍니다. 코드예제비로그인 사용 여부 설정
      KakaoI.with(applicationContext, "{사용 가능 Phase}")
       .useAnonymousAuth(true)
      
    헤이카카오 비로그인 사용 여부 설정
    메서드 설명
    useAnonymousAuth( ) 헤이카카오 비로그인 기능 사용 여부 설정
    - true : 헤이카카오 비로그인 기능을 사용
    - false(기본값) : 헤이카카오 비로그인 기능을 사용하지 않음
    안내
    헤이카카오 비로그인 기능을 사용하기 위해서는 사전 작업을 완료하고, Kakao i 담당자에게 해당 기능의 사용 여부를 반드시 공지해야 합니다.
  4. 만약 SDK에 기본 탑재된 View Template이 아닌 다른 View Template을 구현할 경우에는 provideTemplateHandler()를 확장해야 합니다.

    • 다른 View Template을 구현할 경우, 의존성 추가 단계에서 com.kakao.i:sdk-android-agent 항목을 추가해야 합니다.

Sample Code

다음은 provideKakaoIAuth(), providePackageInfo(), provideTemplateHandler() 메서드를 사용하여 Kakao i Agent SDK를 초기화한 예시입니다.

코드예제SDK 초기화

override fun onCreate() {
KakaoI.with(applicationContext, "sandbox")
    .module(object : Module() {
        override fun provideKakaoIAuth(): KakaoIAuth {
            return object : KakaoIAuth {
                override fun getAccessToken(): String? =
                    TokenManagerProvider.instance.manager.getToken()?.accessToken
                override fun getRefreshToken(): String? =
                    TokenManagerProvider.instance.manager.getToken()?.refreshToken
                override fun getAppUserId(): Long =
                    getSharedPreferences("name", Context.MODE_PRIVATE)
                        .getLong(Constants.APP_USER_ID, 0L)
            }
        }
        override fun providePackageInfo(context: Context): PackageInfo {
            val packageInfo = super.providePackageInfo(context)
            packageInfo.packageName = getString(R.string.package_info)
            return packageInfo
        }
        override fun provideTemplateHandler(context: Context): TemplateManager =
								KakaoITemplateManager(context, TemplateRenderer())
    })
    .init()
 }   

Kakao i Agent SDK 모듈
항목 필수 여부 설명
provideKakaoIAuth() 필수 Kakao 계정 인증 정보를 전달 시 필요
providePackageInfo() 필수 Kakao i 서버로 패키지 정보를 전달 시 필요
provideTemplateHandler() 선택 Kakao i 서버에서 View Template에 대한 레이아웃 정보 전달 시 필요
provideInstructionHandler() 선택 고객사가 사용할 Instruction을 Kakao i Agent SDK에 전달 시 필요

로그인별 동작 처리하기

최종 사용자들이 Kakao i 음성 인식 서비스를 사용하기 위해서는 기본적으로 카카오 계정을 통해 헤이카카오 서비스에 가입해야 합니다. 하지만 카카오엔터프라이즈는 보다 많은 사용자들이 Kakao i 음성 인식 서비스를 사용할 수 있도록 Kakao i Agent SDK for Android는 1.3.5.5(2021년 12월) 버전부터 헤이카카오의 비로그인 방식을 지원하고 있습니다.

로그인별 동작 처리 방식은 헤이카카오 로그인 기능만 구현하는 경우와 헤이카카오 로그인/비로그인 기능을 함께 구현하는 경우로 구분됩니다.

안내
현재(2021년 12월) 기준으로 Kakao i Agent SDK에서는 헤이카카오 비로그인 기능만 단독으로 사용할 수는 없습니다.

  • 비로그인 기능을 사용할 시에는 SDK 초기화 시점에 비로그인 사용 여부를 설정해야 합니다.

로그인 기능만 구현 시

기본적으로 Kakao i 음성 인식 서비스를 이용하려면 사용자는 헤이카카오 서비스에 가입해야 합니다. Kakao i Agent SDK에는 자체적으로 헤이카카오 서비스 가입 프로세스가 구현되어 있으므로, 헤이카카오 로그인 방식만 구현할 경우에는 별도의 작업이 필요하지 않으며, 계정 상태 체크하기 단계로 이동하시기 바랍니다.

로그인/비로그인 기능 함께 구현 시

  1. 헤이카카오 로그인 방식과 헤이카카오 비로그인 방식을 함께 적용하는 경우에는 AuthManager를 통해 로그인/비로그인 동작 처리를 구현해야 합니다. AuthManager()를 사용 시 AuthType(ANONYMOUS, KAKAO_I_LOGIN, NONE) 상태를 조회할 수 있습니다.

    로그인 상태 조회
    AuthType 기능 구분 Kakao 로그인 여부 Kakao i 로그인 여부
    NONE 초기 상태 비로그인 상태 비로그인 상태
    KAKAO_I_LOGIN 헤이카카오 로그인 상태 로그인 상태 로그인 상태
    ANONYMOUS 헤이카카오 비로그인 상태 비로그인 상태 로그인 상태

    Sample Code

    코드예제로그인 상태 조희

    when(KakaoI.getAuthManager()?.authType) {
    AuthType.NONE -> {
       // 초기 상태
    }
       AuthType.KAKAO_I_LOGIN -> {
       // 헤이카카오 로그인 상태  
    }
    AuthType.ANONYMOUS -> {
       // 헤이카카오 비로그인 상태
    }
    }
    

  2. AuthManager.kt 파일을 통해 헤이카카오 로그인과 헤이카카오 비로그인 기능을 사용할 수 있도록 구현해야 합니다. KakaoI.OnCheckCallback은 계정 상태 체크의 callback과 동일하게 정의되어 있습니다.

    코드예제AuthManager.kt를 통한 로그인/비로그인 수행

    @Keep
    fun login(callback: OnCheckCallback?, anonymous: Boolean = false) {
       delegate?.activate(if (anonymous) AuthType.ANONYMOUS else AuthType.KAKAO_I_LOGIN, callback)
                ?: run {
                   KakaoI.checkAccount(callback)
                }
    }
    

    헤이카카오 로그인

    헤이카카오 로그인 기능을 구현 시, 카카오 로그인 토큰을 이용하여 헤이카카오 서비스에 로그인합니다.

    코드예제헤이카카오 로그인

    KakaoI.getAuthManager()?.login(object: KakaoI.OnCheckCallback {
       override fun onSuccess() {
             // 로그인 성공
       }
    
       override fun onAuthorizeFailed() {
          // 인증 실패
       }
    
       override fun onSignUpRequired(intentSupplier: KakaoI.IntentSupplier) {
          // 가입 필요
       }
    
       override fun onAgreementRequired(intentSupplier: KakaoI.IntentSupplier) {
          // 약관 및 추가 동의가 필요할 때
       }
    
       override fun onError(p0: Exception?) {
       // 예상치 못한 오류 발생
       }
    })
    

    checkAccount 콜백
    메서드 로그인 상태일 때 로그인 후속 진행 작업
    onSuccess 카카오 계정으로 헤이카카오 로그인을 성공한 상태 Kakao i 음성 인식 서비스 바로 이용 가능
    onAuthorizeFailed Kakao 계정 토큰이 만료되어 토큰 갱신이 필요한 상태 Kakao 토큰 갱신 후 재시도
    onSignUpRequired Kakao 계정은 정상이나, 사용자가 헤이카카오 가입이 안 된 상태 파라미터로 받는 IntentSupplier를 사용해서 가입 절차 진행 시 정상 이용 가능
    onAgreementRequired Kakao 계정은 정상이나, 헤이카카오 약관이 추가되어 동의가 필요한 상태 파라미터로 받는 IntentSupplier를 사용해서 약관동의 절차 진행 시 정상 이용 가능
    onError 예상하지 못한 오류 Kakao i Agent SDK 개발팀에 오류 보고

    헤이카카오 비로그인

    헤이카카오 비로그인 기능을 구현 시, SDK에서 지원하는 비로그인 기능을 이용하여 헤이카카오 서비스에 로그인합니다.

    코드예제헤이카카오 비로그인

    KakaoI.getAuthManager()?.login(object: KakaoI.OnCheckCallback {
       override fun onSuccess() {
          // 로그인 성공
       }
    
       override fun onAuthorizeFailed() {
          // 인증 실패
       }
    
       override fun onSignUpRequired(intentSupplier: KakaoI.IntentSupplier) {
          // 호출되지 않음
       }
    
       override fun onAgreementRequired(intentSupplier: KakaoI.IntentSupplier) {
          // 호출되지 않음
       }
    
       override fun onError(p0: Exception?) {
          // 예상치 못한 오류 발생
       }
    }, true)
    

    checkAccount 콜백
    메서드 비로그인 상태일 때 비로그인 후속 진행 작업
    onSuccess 비로그인 상태에서 헤이카카오 로그인을 성공한 상태 Kakao i 음성 인식 서비스 바로 이용 가능
    onAuthorizeFailed 비로그인 계정의 토큰 갱신 만료가 필요한 상태 SDK 내부적으로 토큰 갱신 처리
    onSignUpRequired 비로그인 시 호출되지 않음 -
    onAgreementRequired 비로그인 시 호출되지 않음 -
    onError 예상하지 못한 오류 Kakao i Agent SDK 개발팀에 오류 보고

    안내

    • 사용자가 헤이카카오 비로그인 기능 사용 중 카카오 로그인을 통해 헤이카카오 서비스를 가입을 하는 경우, 비로그인 기능을 사용하는 동안 생성된 정보들은 더 이상 사용되지 않습니다.
    • 카카오 로그인 기능을 사용하는 도중에 카카오 로그아웃 또는 헤이카카오 서비스에 탈퇴 시, 비로그인 상태로 전환됩니다.

계정 상태 체크하기

헤이카카오 서비스를 사용하기 위해서는 반드시 헤이카카오 로그인이 되어야 합니다. 따라서 헤이카카오 서비스를 사용하기 전에 checkAccount 를 통해서 현재 계정의 상태를 체크해야 합니다. 로그인과 함께 계정 상태 체크가 완료되어야 Kakao i 음성 인식 서비스를 사용할 수 있습니다.

  1. KakaoI.checkAccount()를 호출합니다. 호출 시 KakaoI.onCheckCallback 인터페이스를 구현해서 파라미터로 전달합니다.

    코드예제KakaoI.checkAccount() 호출

    KakaoI.checkAccount()
    

  2. 헤이카카오 계정을 확인 후, checkAccount() 콜백(Callback) 메서드로 현재 Kakao 계정 상태를 전달합니다.

    • 각 메서드에 대한 설명을 참고하여, 필요 시 후속 진행 작업을 수행합니다.
    checkAccount 콜백
    메서드 설명 후속 진행 작업
    onSuccess Kakao 계정 상태가 정상이며, 사용자가 이미 헤이카카오에 가입이 되어 있는 상태 Kakao i 음성 인식 서비스 바로 이용 가능
    onAuthorizeFailed Kakao 계정 토큰이 만료되어 토큰 갱신이 필요한 상태 Kakao 토큰 갱신 후 재시도
    - 비로그인 시 SDK 내부적으로 토큰 갱신 처리
    onSignUpRequired Kakao 계정은 정상이나, 사용자가 헤이카카오에 가입이 안 된 상태 파라미터로 받는 IntentSupplier를 사용해서 가입 절차 진행 시 정상 이용 가능
    - 비로그인 시 호출되지 않음
    onAgreementRequired Kakao 계정은 정상이나, 헤이카카오에 약관이 추가 되어 약관 추가동의가 필요한 상태 파라미터로 받는 IntentSupplier를 사용해서 약관동의 절차 진행 시 정상 이용 가능
    - 비로그인 시 호출되지 않음
    onError 예상하지 못한 오류 Kakao i Agent SDK 개발팀에 오류 보고
    안내
    IntentSupplier는 Intent를 반환하는 supply 메서드를 가진 인터페이스입니다. 전달받는 IntentSupplier에는 어떤 Intent를 반환할 지 정의되있으므로, supply 메서드를 사용해 원하는 컴포넌트로 이동이 가능합니다.

헤이카카오 로그인/비로그인 여부 확인

현재 헤이카카오에 로그인 된 계정이 카카오로그인/비로그인 타입인지 AuthManager의 AuthType을 통해 알 수 있습니다.

코드예제로그인/비로그인 여부 확인

val authType : AuthType? = KakaoI.getAuthManager()?.authType 

enum class AuthType {
  AuthType.KAKAO_I_LOGIN,  // 카카오 로그인을 이용한 헤이카카오 카카오 i 로그인
  AuthType.ANONYMOUS,  // 비로그인을 이용한 헤이 카카오 로그인
  AuthType.NONE  // 헤이 카카오 로그인 하지 않은 초기화 상태
}

Sample Code

다음은 checkAccount() 콜백 메서드를 사용한 예제입니다.

코드예제콜백 메서드

//유저 상태를 확인하여 다음으로 수행해야할 Intent를 알려주거나 오류 상태를 전달 하는 Callback Interface
KakaoI.checkAccount(object : KakaoI.OnCheckCallback {
   override fun onSuccess() {
   /**
   * 사용자 상태 및 토큰 정보가 정상 으로 사용 가능한 상태
   */
   }

   override fun onAuthorizeFailed() {
   /**
   * AccessToken이 만료된 경우로, 인증 토큰 갱신 후 재시도 필요
   */
   }

   override fun onSignUpRequired(intentSupplier: KakaoI.IntentSupplier) {
   /**
   * 사용자가 Kakao i를 사용하고 있지 않은 상태로, Kakao i 가입이 요구되며,
   * 가입 Intent 가 전달되며 startActivity 로 Intent를 수행할 수 있음
   */
		val intent = intentSupplier.supply(this@MainActivity)
    startActivity(intent)
   }

   override fun onAgreementRequired(intentSupplier: KakaoI.IntentSupplier) {
   /**
   * 사용자가 추가로 동의해야할 약관이 존재할 경우 호출되며,
   * 약관동의 Intent 가 전달되며 startActivity 로 Intent를 수행할 수 있음
   */
		val intent = intentSupplier.supply(this@MainActivity)
    startActivity(intent)
   }

   override fun onError(p0: Exception?) {
   /**
   * 정의되지 않은 오류가 발생함
   */

   }
})

Permission 추가하기

다음의 권한(Runtime Permission)을 Manifest에 추가하여, 사용자가 런타임에 각 권한을 승인하도록 요청합니다. 자세한 설명은 Google Developers 사이트의 Android 개발자 > 앱 권한 요청 문서를 참고하시기 바랍니다.

Runtime Permission
권한 필수 여부 설명
android.permission.RECORD_AUDIO 필수 마이크 사용을 위한 권한
- 해당 권한을 획득하지 않으면, Kakao i 음성 인식 서비스를 시작 할 수 없음
android.permission.READ_CONTACTS 선택 전화 걸기 기능에서 주소록을 읽을 때 필요한 권한
android.permission.CALL_PHONE 선택 전화 걸기 기능에서 전화를 실행할 때 필요한 권한

음성 인식 활성화하기

Kakao i 음성 인식을 활성화하기 위해 False(Default)로 설정되어 있는 초기값을 KakaoI.setEnabled() 메서드를 사용하여 true 값으로 변경합니다.

코드예제KakaoI.setEnabled() 예시

KakaoI.setEnabled(true)

안내
버튼이 아닌 Wake-up word(호출명령어)를 사용하여 음성 인식 서비스를 사용하기 위해서는 반드시 의존성 추가 단계에서 com.kakao.i:wakeup-dialoid 라이브러리를 추가해야합니다. 자세한 사항은 Android Studio 설정 > Gradle 설정하기 챕터를 참고하시기 바랍니다.

  • Wake-up word의 초기값은 “헤이카카오”이지만, 최종 사용자는 설정 화면에서 다른 Wake-up word를 설정할 수 있습니다.
  • Wake-up word가 유입되어 발화 효과음을 재생하는 과정은 Kakao i Agent SDK 내부적으로 수행됩니다.

클래스 구현하기

음성 인식 결과 값을 애플리케이션으로 가져오기 위해서는 각 음성 인식 단계에서 클래스를 구현 및 정의해야 합니다. 각 클래스에 대한 자세한 설명은 API 레퍼런스 문서를 참고하시기 바랍니다.

음성 요청 클래스 구현
클래스 설명
KakaoIListeningBinder 음성 서비스를 사용하기 위한 Binder로 음성 인식 관련 기능 및 제어
KakaoIListeningBinder.EventListener 음성 서비스 연결 상황에서 발생할 수 있는 이벤트들을 처리하는 Listener
KakaoI.StateListener 음성 인식 상태를 모니터링 하기 위해서 필요한 Listener

음성인식 시나리오 그림음성인식 시나리오

  1. 초기화
    • 애플리케이션에서 KakaoI.startListen() 메서드를 호출하고, KakaoIListeningBinder를 반환받습니다.
    • KakaoI.startListen()의 파라미터로 KakaoIListeningBinder.EventListener 콜백이 등록되면, 음성 인식 상태를 전달 받을 수 있습니다.
  2. 음성 인식
    • 애플리케이션에서 requestRecognition() 메서드를 호출하여 음성 인식을 시작합니다. 음성 인식 상태에 따라 등록된 EventListner 콜백 함수가 호출됩니다.
  3. 음성 인식 종료
    • stopRecognition() 메서드를 호출하여 음성 인식을 중간에 종료할 수 있습니다.

Sample Code

음성 인식 클래스 구현 시 필요한 샘플 코드는 다음과 같습니다.

코드예제음성 인식 클래스 구현

class RecognizeActivity : Activity {
   private var listeningBinder: KakaoIListeningBinder? = null

   fun start() {
       listeningBinder = KakaoI.startListen(this@MainActivity, eventListener)
       listeningBinder!!.addListener(stateListener)
   }

   fun stop() {
       listeningBinder?.stopListen()
       listeningBinder = null
   }

   // Wake-up-word 없이 바로 Wake-up
   fun requestRecognition() {
       listeningBinder?.requestRecognition()
   }

   // 음성 인식 종료(이미 녹음된 데이터가 존재할 경우, 해당 데이터로 음성 인식이 될 수도 있음)
   fun stopRecognition() {
       listeningBinder?.stopRecognition()
   }

   // 음성이 입력 중일 경우 음성 인식은 취소되며, 현재 진행 중인 음성 인식 컨텍스트가 있다면 음성 인식은 종료됨
   fun cancelDialog() {
       listeningBinder?.cancelDialog()
   }{}}

   // KVS 연결 상황에서 발생할 수 있는 오류들을 처리하는 callback
   private val eventListener = object : KakaoIListeningBinder.EventListener {
       override fun onMicUnavailable() {
           // Microphone 사용 불가 에러 상황
       }

       override fun onError(e: Exception?) {
           // 에러 상황
       }

       override fun onAgreementRequired(followingIntentFunc: KakaoI.IntentSupplier) {
           // 추가 약관 동의가 필요한 상황, 파라미터로 전달되는 intent를 사용해서 후속 작업 진행
					val intent = followingIntentFunc.supply(this@RecognizeActivity)
       }

       override fun onStartListen() {
           // 웨이크업 대기 상태 진입
       }

       override fun onStopListen() {
           // 웨이크업이 안되는 상태 진입, Microphone 사용하지 않음
       }

       override fun onWithdrawal() {
           // 서비스 탈퇴됨
       }

       override fun onAuthorizeFailed() {
           // 인증 실패
       }
   }

   // 음성 인식 상태를 모니터링 하는 callback
   private stateListener = object : KakaoI.StateListener {
       override fun onStateChanged(state: Int) {
           // int STATE_DEACTIVATED = 1;
           // int STATE_IDLE = 2;
           // int STATE_RECOGNIZING = 3;
           // int STATE_PROCESSING = 4;      
       }

       override fun onPartialResult(result: String?) {
           // 부분 인식 결과
       }

       override fun onResult(result: String?) {
           // 최종 인식 결과
       }
   }
}

음성인식 결과화면 출력하기

Kakao i Agent SDK에서는 음성 인식 결과를 UI 화면으로 출력할 때, View Template이라는 레이아웃 화면을 사용합니다. 클라이언트의 특정 서비스에 맞춰서 View Template 수정도 가능합니다.

안내
View Template 수정 시에도 음성 답변은 Kakao i Agent SDK를 통해 재생됩니다. 자세한 설명은 View Template 문서를 참고하시기 바랍니다.

화면 출력 관련 클래스

View Template을 설정하려면, SDK를 초기화할 때 provideTemplateHandler()에 사용하고자 하는 TemplateManagerTemplate.Renderer를 상속한 구현체에 파라미터로 전달해야 합니다.

View Template 출력 주요 클래스
클래스 설명
TemplateManager 결과 화면 출력 및 관련 기능을 제어하는 역할 수행
- View를 반환하는 render 메서드를 사용함으로서 UI 변경 가능
TemplateManager.Renderer TemplateModel을 파라미터로 받아 화면 출력 방법을 정의하는 inflateView 메서드 보유
TemplateModel 결과 화면에 나타낼 UI 및 액션 데이터를 보유

Sample Code

View Template을 화면에 출력하려면 TemplateManager의 render 메서드를 통해 View를 받을 수 있습니다. render 메서드는 Context와 TemplateModel을 파라미터로 전달받아 호출합니다.
다음은 Kakao i Agent SDK가 기본적으로 제공하는 화면 출력 클래스를 통해 화면 출력을 하는 코드입니다.

코드예제화면 출력

binding.containerRender.run {
  // renderBody는 화면에 보여줄 실제 데이터로서 TemplateManager의 pendingTemplate을 통해 RenderBody를 가져올 수 있음
	val renderBody : RenderBody? = KakaoI.getTemplateManager().pendingTemplate

  // 출력된 화면의 Action을 정의하는 ActionProvider를 구현함
	val templateActionProvider = object : SimpleActionProvider() {
			override fun getContext(): Context = this@MainActivity
		}

  // TemplateManager의 render 메서드를 통해 view를 획득함
	if (renderBody != null) {
			val view = KakaoI.getTemplateManager().render(this, TemplateModel(renderBody, templateActionProvider))
			removeAllViews()
			addView(view)
		}
	}

Kakao i 설정 화면 출력하기

Kakao i 설정 화면은 사용자가 호출명령어 설정, 서비스 이용 설정, 앱 정보 등을 확인할 수 있도록 제공하고 있으며, KakaoI.startSettingActivity(getContext()) 메서드를 호출하여 Kakao i 설정 화면을 최종 사용자에게 출력합니다.

코드예제KakaoI.startSettingActivity(getContext()) 호출

KakaoI.startSettingActivity(getContext()) { error -> 
	// Error 발생 시 후속 처리 진행
}

이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

더 자세한 의견은 documentation@kakaoenterprise.com 으로 제보해주세요.