Kotlin DSL.
https://github.com/ruslanys/telegraff
Пример скрипта:
enum class PaymentMethod {
CARD, CASH
}
handler("/taxi", "такси") {
step<String>("locationFrom") {
question {
MarkdownMessage("Откуда поедем?")
}
}
step<String>("locationTo") {
question {
MarkdownMessage("Куда поедем?")
}
}
step<PaymentMethod>("paymentMethod") {
question {
MarkdownMessage("Оплата картой или наличкой?", "Картой", "Наличкой")
}
validation {
when (it.toLowerCase()) {
"картой" -> PaymentMethod.CARD
"наличкой" -> PaymentMethod.CASH
else -> throw ValidationException("Пожалуйста, выбери один из вариантов")
}
}
}
process { state, answers ->
val from = answers["locationFrom"] as String
val to = answers["locationTo"] as String
val paymentMethod = answers["paymentMethod"] as PaymentMethod
// TODO: Business logic
MarkdownMessage("Заказ принят. Поедем из $from в $to. Оплата $paymentMethod.")
}
}
Пока только RC. Ну и только Телеграм, на текущий момент. Но можно, например, форкнуться, и сделать поддержку чего нужно. А еще лучше – PR.
Я просмотрел разные решения, и есть два разных подхода к связыванию логики последовательности диалогов. У тебя сделано она зашита в коде, и это имхо не очень гибкое решение. Другой вариант это делать цепочки создавая объекты и связывая их, такой подход мне кажется более flexible.
Обсуждают сегодня