Edit me

Update

Сервис получает сообщения о действиях пользователя и обновлениях системы в виде объектов Update. Более подробная информация содержится в разделе Как это работает.

В качестве Update может придти любой поддерживаемый Сервис-платформой подтип класса Update. В том числе:

  • Message
  • InlineCommandSelected
  • QuickButtonSelected
  • FormSubmitted
  • FormClosed
  • FormMessageSent
  • ChannelSubscribed
  • InvitedToGroup
  • KickedFromGroup
  • MessageIdAssigned

Полный список поддерживаемых Update и их свойств можно найти в описании Сервис-платформы

Пример обработки Update

@Scenario(DemoDispatcher::class, "/update", "update")
class UpdateScenario(
        dispatcher: DemoDispatcher
) : SessionAwareOperations(dispatcher), ScenarioEntryPoint {

    val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("d.MM.yyyy")

    enum class DateOption(val title: String) {
        TODAY("\uD83D\uDCC5 Сегодня"),
        TOMORROW("\uD83D\uDCC6 Завтра")
    }

    override suspend fun start(update: Update) {
        val keyboard: Keyboard = InlineKeyboard(listOf(
                InlineCommand(DateOption.TODAY.title, DateOption.TODAY.name),
                InlineCommand(DateOption.TOMORROW.title, DateOption.TOMORROW.name)))

        val date: LocalDate = sendRequest("Choose date option or enter date in format dd.mm.yyyy", keyboard,
                "Please, choose an option or enter valid date in format dd.mm.yyyy") {
            when (it) {
                is Message -> LocalDate.parse(it.content, dateTimeFormatter)
                is InlineCommandSelected -> when (DateOption.valueOf(it.metadata)) {
                    DateOption.TODAY -> LocalDate.now()
                    DateOption.TOMORROW -> LocalDate.now().plus(1, ChronoUnit.DAYS)
                }
                else -> throw UnsupportedOperationException()
            }
        }
        sendMessage("Entered: ${date.format(dateTimeFormatter)}")
    }
}

Сервис посылает запрос на ввод даты в формате dd.mm.yyyy или выбор из опций [Сегодня, Завтра]. В случае выбора пользователем опции, в качестве ответа приходит объект типа InlineCommandSelected. В случае ввода пользователем текста, в качестве ответа приходит объект типа Message. Ответ обрабатывается в зависимости от типа полученного сообщения