Custom Third-Party Voice Skill Interface

Last Updated on : 2024-08-19 07:18:46download

Tuya provides BizBundles for integrating third-party voice skills. Currently, UI BizBundles are available for Amazon Alexa and Google Assistant voice skills and UI pages.

Custom Third-Party Voice Skill Interface Custom Third-Party Voice Skill Interface

Authorization process

A complete authorization process goes through four interfaces: pre-authorization, authorization confirmation, authorization completion, and accounting unlinking.

Custom Third-Party Voice Skill Interface Custom Third-Party Voice Skill Interface

Custom Third-Party Voice Skill Interface Custom Third-Party Voice Skill Interface

Tuya has developed a configuration plugin particularly for users to customize UI elements as needed. The following section describes the plugin and presents a demo.

API

enum ThingVoiceServiceType {
  case amazonAlexa
  case googleHome
}

public protocol ThingValueAddedServicePlugAPIProtocol {

    optional func preAuthorizationIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func preAuthorizationImage(_ type: ThingVoiceServiceType) -> UIImage?
    optional func preAuthorizationDetail(_ type: ThingVoiceServiceType) -> String?

    optional func authorizationConfirmIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func authorizationConfirmAppName(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationConfirmTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationConfirmTipsTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationConfirmTipsDetail(_ type: ThingVoiceServiceType) -> String?

    optional func didAuthorizationIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func didAuthorizationTitle(_ type: ThingVoiceServiceType) -> String?
    optional func didAuthorizationTipsTitle(_ type: ThingVoiceServiceType) -> String?
    optional func didAuthorizationTipsDetail(_ type: ThingVoiceServiceType) -> String?

    optional func authorizationUnbindIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func authorizationUnbindTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationUnbindTipsTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationUnbindTipsDetails(_ type: ThingVoiceServiceType) -> [String]?
}

Pre-authorization

Three UI elements can be configured.

Custom Third-Party Voice Skill Interface
    optional func preAuthorizationIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func preAuthorizationImage(_ type: ThingVoiceServiceType) -> UIImage?
    optional func preAuthorizationDetail(_ type: ThingVoiceServiceType) -> String?

Authorization confirmation

Five UI elements can be configured.

Custom Third-Party Voice Skill Interface
    optional func authorizationConfirmIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func authorizationConfirmAppName(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationConfirmTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationConfirmTipsTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationConfirmTipsDetail(_ type: ThingVoiceServiceType) -> String?

Authorization completion

Four UI elements can be configured.

Custom Third-Party Voice Skill Interface
    optional func didAuthorizationIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func didAuthorizationTitle(_ type: ThingVoiceServiceType) -> String?
    optional func didAuthorizationTipsTitle(_ type: ThingVoiceServiceType) -> String?
    optional func didAuthorizationTipsDetail(_ type: ThingVoiceServiceType) -> String?

Account unlinking

Four UI elements can be configured.

Custom Third-Party Voice Skill Interface
    optional func authorizationUnbindIcon(_ type: ThingVoiceServiceType) -> UIImage?
    optional func authorizationUnbindTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationUnbindTipsTitle(_ type: ThingVoiceServiceType) -> String?
    optional func authorizationUnbindTipsDetails(_ type: ThingVoiceServiceType) -> [String]?

Customization

  • Customize a new class to implement the protocol ThingValueAddedServicePlugAPIProtocol:

    import ThingValueAddedServicePlugAPI
    
    class ThingValueAddedServicePlugAPIProtocolImpl: NSObject {
    }
    
    extension ThingValueAddedServicePlugAPIProtocolImpl: ThingValueAddedServicePlugAPIProtocol {
    }
    
  • Register service:

    ThingSmartBizCore.sharedInstance().registerService(ThingValueAddedServicePlugAPIProtocol.self, with: ThingValueAddedServicePlugAPIProtocolImpl.self)
    
  • Implement method as needed:

    extension ThingValueAddedServicePlugAPIProtocolImpl: ThingValueAddedServicePlugAPIProtocol {
    
        func preAuthorizationIcon(_ type: ThingVoiceServiceType) -> UIImage? {
            if (type == .amazonAlexa) {
                return UIImage(named: "icon");
            }else{
                return UIImage(named: "bannerBanner");
            }
        }
    
        func preAuthorizationImage(_ type: ThingVoiceServiceType) -> UIImage? {
            if (type == .amazonAlexa) {
                return UIImage(named: "banner");
            }else{
                return UIImage(named: "iconGoogle");
            }
        }
    
        func preAuthorizationDetail(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "preAuthorizationDetail alexa";
            }else{
                return "preAuthorizationDetail google";
            }
        }
    
        func authorizationConfirmIcon(_ type: ThingVoiceServiceType) -> UIImage? {
            if (type == .amazonAlexa) {
                return UIImage(named: "icon");
            }else{
                return UIImage(named: "iconGoogle");
            }
        }
    
        func authorizationConfirmAppName(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa";
            }else{
                return "google";
            }
        }
    
        func authorizationConfirmTitle(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa";
            }else{
                return "google";
            }
        }
    
        func authorizationConfirmTipsTitle(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa tips";
            }else{
                return "google tips";
            }
        }
    
        func authorizationConfirmTipsDetail(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa detail";
            }else{
                return "google detail";
            }
        }
    
        func didAuthorizationIcon(_ type: ThingVoiceServiceType) -> UIImage? {
            if (type == .amazonAlexa) {
                return UIImage(named: "icon");
            }else{
                return UIImage(named: "iconGoogle");
            }
        }
    
        func didAuthorizationTitle(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa title";
            }else{
                return "google title";
            }
        }
    
        func didAuthorizationTipsTitle(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa tips title";
            }else{
                return "google tips title";
            }
        }
    
        func didAuthorizationTipsDetail(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa tips detail";
            }else{
                return "google tips detail";
            }
        }
    
        func authorizationUnbindIcon(_ type: ThingVoiceServiceType) -> UIImage? {
            if (type == .amazonAlexa) {
                return UIImage(named: "icon");
            }else{
                return UIImage(named: "iconGoogle");
            }
        }
    
        func authorizationUnbindTitle(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexa";
            }else{
                return "google";
            }
        }
    
        func authorizationUnbindTipsTitle(_ type: ThingVoiceServiceType) -> String? {
            if (type == .amazonAlexa) {
                return "alexaTipsTitle";
            }else{
                return "googleTipsTitle";
            }
        }
    
        func authorizationUnbindTipsDetails(_ type: ThingVoiceServiceType) -> [String]? {
            if (type == .amazonAlexa) {
                return ["authorizationUnbindTipsDetails"];
            }else{
                return ["authorizationUnbindTipsDetails", "authorizationUnbindTipsDetails"];
            }
        }
    }