Kakao i Skill::SSML 활용 가이드

페이지 이동경로

SSML 활용

카카오 i 플랫폼에서 Bot 시나리오를 작성하면 기본적으로 Text to Speech(TTS) 규칙이 적용됩니다. 하지만 Speech Synthesis Markup Language(이하 SSML)를 사용하면 발음, 속도, 볼륨 등과 같은 언어 처리를 직접 수정하여 자연스럽고 명확한 음성 출력으로 변환할 수 있습니다.

SSML은 사전에 정의된 Tag 집합을 사용하여 합성기로 전달되는 일반 텍스트를 보완하는 방식으로 작동하며, 다음의 기능을 수행할 수 있습니다.

SSML 활용 기능
구분 설명
제공 기능 - 볼륨, 속도, 음성(목소리) 변경
- 조사 변경 처리
- 상황별로 특이하게 발음되는 언어 처리(영화명, 성경 등)
- 효과음 합성

TTS 일반 규칙

일반적인 TTS의 규칙은 다음과 같습니다.

  • 한글 낱자(ㄱ, ㄴ, ㅏ, ㅑ, …)가 입력되는 경우 발음하지 않음
  • 한자는 발음하지 않음
  • 영어는 한글 독음으로 읽음. ex) ride → 라이드
  • 괄호(( ), 【 】, [ ]) 내부의 내용은 제거되어 발음하지 않음
  • 7/18, 2017/07/05, 2017/7/5, 2017.07.05, 2017.7.5 과 같이 날짜로 판단되는 경우 날짜로 읽음
  • 23:34:56 과 같이 시간으로 판단되는 경우 “이십삼시 삼십사분 오십육초”의 형태로 읽음
  • 영어 뒤의 숫자는 영어로 읽고, 한글 뒤의 숫자는 한글로 읽음
  • 숫자 사이의 -는 “다시”로 읽음

본 문서에서 설명하는 SSML은 W3C에서 제공하는 SSML 표준을 준수합니다. 해당 표준에 정의되지 않았지만 반드시 필요한 필수 요소의 경우에는 카카오 Custom Tag와 Attribute로 제공하고 있습니다.

주의
해당 Tag들을 사용할 때는 Attribute 주위에 큰따옴표(, )를 사용해야 합니다. 예를 들어 <voice name="Ryan"/>은 잘 구성된 유효한 요소이지만, <voice name=Ryan/>과 같이 SSML에서 큰따옴표로 묶지 않을 시에는 인식하지 못할 수 있습니다.

SSML Tag 종류

SSML Tag 종류
Tag 설명
Speak 모든 음성에 적용되는 기본 Tag
Voice 음성 목소리 변경
Prosody 음성의 속도와 볼륨 변경
Break 의도적으로 음성을 잠시 멈추기 위해 사용
Kakao:Effect 카카오 Custom Tag로 음성의 말투를 변경할 수 있음
Say-as 날짜/시간 등 축약형 표현이나 전화번호, 스펠링과 같이 자주 사용하는 특수 표현을 해석하여 상황에 맞게 읽어줌
Sub 일반적인 발음이 아닌 특별한 발음을 지정해야 할 때 사용
Audio 외부 음원을 음성처럼 제공

SSML Tag 사용 시 주의사항

Escape 처리

답변에 포함된 특수 문자를 SSML Tag와 같이 사용할 경우, 답변에 Escape 처리를 해야 합니다. 예시는 다음과 같습니다.

코드예제Escape 처리 예시

<speak>
이전에 듣던, <say-as interpret-as="kakao:none">송은이&amp;김숙 비밀보장</say-as>, 이어서 들려줄까요?
</speak>

공백 처리

태그 안의 글자 공백은 유지되지만, 두 개 태그 사이에 공백 문자만 있는 경우 해당 공백은 무시됩니다.

코드예제공백 처리 예시

1. 두 개 태그 사이의 공백 무시
<speak>
<say-as interpret-as=\"kakao:none\">내일</say-as>   <say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>

2. 공백 유지
<speak>
<say-as interpret-as=\"kakao:none\">내일   </say-as><say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>

3.'은' 뒤의 공백 유지
<speak>
<say-as interpret-as=\"kakao:none\">내일</say-as>은   <say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>

문단 처리

아래의 문단 처리 예시와 같이, 한 문장 안에서 문단을 변경하지 않아야 합니다.

코드예제문단 처리 예시

<speak>
    <say-as interpret-as=\"kakao:none\">내일</say-as>
    은
    <say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>

관련 문서

개발 프로세스(Voice) Kakao i Skill Skill API 레퍼런스 Kakao i Skill 음성 답변 가이드 Kakao i Skill SSML 활용 가이드 Kakao i Skill

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

더 자세한 의견은 contact.dkt@kakaocorp.com 으로 제보해주세요.