diff --git a/marusia/ssml/ssml.go b/marusia/ssml/ssml.go
new file mode 100644
index 00000000..0cb5f48a
--- /dev/null
+++ b/marusia/ssml/ssml.go
@@ -0,0 +1,55 @@
+// Package ssml implements Speech Synthesis Markup Language.
+package ssml // import "github.com/SevereCloud/vksdk/v2/marusia/ssml"
+
+import (
+ "bytes"
+ "strconv"
+ "time"
+)
+
+// Builder SSML.
+type Builder struct {
+ buf bytes.Buffer
+}
+
+// NewBuilder возвращает *Builder.
+func NewBuilder() *Builder {
+ return &Builder{}
+}
+
+// Say используется для произношения слов. Пропускает теги внутрь.
+func (b *Builder) Say(s string) *Builder {
+ _, _ = b.buf.WriteString(s)
+ return b
+}
+
+// Paragraph используется для выделения абзацев. После абзаца ставится длинная интонационная пауза.
+func (b *Builder) Paragraph(s string) *Builder {
+ return b.Say(`
`).Say(s).Say(`
`)
+}
+
+// Sentence используется для выделения предложений. Предложение будет
+// выделено интонационно, а в конце предложения будет пауза.
+func (b *Builder) Sentence(s string) *Builder {
+ return b.Say(``).Say(s).Say(``)
+}
+
+// Break используется для вставки пауз между произносимым текстом.
+func (b *Builder) Break(duration time.Duration) *Builder {
+ return b.Say(``)
+}
+
+// Speaker используется для вставки собственных аудиозаписей в текст.
+func (b *Builder) Speaker(s string) *Builder {
+ return b.Say(``)
+}
+
+// SpeakerFromLibrary используется для вставки звуков из библиотеки в текст.
+func (b *Builder) SpeakerFromLibrary(s string) *Builder {
+ return b.Say(``)
+}
+
+// String возвращает SSML в виде строки.
+func (b Builder) String() string {
+ return "" + b.buf.String() + ""
+}
diff --git a/marusia/ssml/ssml_test.go b/marusia/ssml/ssml_test.go
new file mode 100644
index 00000000..23d2cc60
--- /dev/null
+++ b/marusia/ssml/ssml_test.go
@@ -0,0 +1,65 @@
+package ssml_test
+
+import (
+ "fmt"
+ "time"
+
+ "github.com/SevereCloud/vksdk/v2/marusia/ssml"
+)
+
+func ExampleNewBuilder() {
+ b := ssml.NewBuilder()
+ b.Say("Привет")
+ b.Break(500 * time.Millisecond).Say("Я Маруся")
+
+ fmt.Print(b)
+ // Output: ПриветЯ Маруся
+}
+
+func ExampleBuilder_Say() {
+ b := ssml.NewBuilder()
+ b.Say("Привет")
+
+ fmt.Print(b)
+ // Output: Привет
+}
+
+func ExampleBuilder_Paragraph() {
+ b := ssml.NewBuilder()
+ b.Paragraph("Привет")
+
+ fmt.Print(b)
+ // Output: Привет
+}
+
+func ExampleBuilder_Sentence() {
+ b := ssml.NewBuilder()
+ b.Sentence("Привет")
+
+ fmt.Print(b)
+ // Output: Привет
+}
+
+func ExampleBuilder_Break() {
+ b := ssml.NewBuilder()
+ b.Say("Привет").Break(500 * time.Millisecond).Say("Я Маруся")
+
+ fmt.Print(b)
+ // Output: ПриветЯ Маруся
+}
+
+func ExampleBuilder_Speaker() {
+ b := ssml.NewBuilder()
+ b.Say("Угадайте, чей это голос?").Speaker("-2000000002_123456789")
+
+ fmt.Print(b)
+ // Output: Угадайте, чей это голос?
+}
+
+func ExampleBuilder_SpeakerFromLibrary() {
+ b := ssml.NewBuilder()
+ b.Say("Так мычит корова").SpeakerFromLibrary("marusia-sounds/animals-cow-1")
+
+ fmt.Print(b)
+ // Output: Так мычит корова
+}