Bot framework v4 Node.js: как go перейти к следующему шагу водопада на основе внешнего триггера (запрос публикации) - PullRequest
3 голосов
/ 14 июля 2020

Короткий вопрос: мне нужен способ go следующего шага водопада на основе внешнего триггера (почтового запроса).

Длинный вопрос Мне нужно построить интеграцию с Поставщик платежных услуг. Сейчас у меня больше всего битов и кусков, но я не могу собрать их все вместе. Процесс, который я имею в виду, прост и включает:

Диалог компонента A

Диалог водопада с тремя шагами высокого уровня, которые заботятся о:

-1 Сбор данных о пользователе

-2 Ожидание платежа -> запуск диалогового окна компонента B

-3 Выполнение цифрового продукта

Диалог компонента B

Заботится о

-1 Создание счета

-2 Оплата счета

-3 Возврат к диалоговому окну компонента A

Индекс. js

Содержит сервер restify, который должен быть вызван PSP с обновлением статуса запросов на оплату.

Happy Flow Если пользователь нажимает на диалоговое окно компонента A, мы задаем несколько вопросов, запрашиваем предоплату (диалоговое окно компонента B), и, как только платеж будет внесен, мы отправляем цифровые товары, за которые он или она заплатили (диалоговое окно компонента A)

Чтобы реализовать это, моя идея состоит в том, чтобы объединить проактивные сообщения \ события с Activity Подсказка. Однако я не могу заставить это работать.

Как только веб-перехватчик PSP отправит почтовый запрос на веб-перехватчик / платеж, чтобы сообщить нам, что платеж уже произведен, я хотел бы иметь возможность отправить событие для проверки валидатором ActivyPrompt. Я получил эту идею, изучив сценарий тестирования ActivityPrompt в Github (документации по ActivityPrompt не так много, хотя это кажется мощным инструментом). и отправьте товары, заказанные пользователем.

Инициализация запроса на ожидание платежа:

        this.addDialog(new ActivityPrompt(WAITING_FOR_PAYMENT_PROMPT, this.awaitingPaymentValidator));

фактическое приглашение

        return await stepContext.prompt(WAITING_FOR_PAYMENT_PROMPT, 'Waiting for payment ...');

средство проверки запросов

    async awaitingPaymentValidator(promptContext) {
        return (promptContext.context.activity.type === 'event');
    }

Я пробовал несколько альтернативных подходов с запросами проверки, но всегда оказываюсь в ситуации, когда пользователь после оплаты счета должен что-то делать для go следующего шага водопада. Это работает, но не то, что вы ожидаете.

Возможно ли это вообще, и если да, то что мне не хватает? А может альтернативный подход? Идеи приветствуются

[Обновление] У меня есть еще две стратегии, которые я могу попробовать:

  1. Создание диалогового контекста в упреждающих сообщениях, и, надеюсь, я смогу завершить диалог ожидания платежа оттуда .
  2. Выясните, как использовать dialogContext.emitEvent в комбинации с ActivityPrompt

Ad 1. Не работает. dialogcontext создан, но DialogContext.endDialog не завершает запрос. -> { ссылка }

Ad 2. Пробовал безуспешно. Я подозреваю, что это функции адаптивного диалога, которые случайно попали в «нормальную» документацию по диалоговому окну. ), чтобы пользователь мог щелкнуть и перейти вперед.

На данный момент обходной путь подходит, но лучшим вариантом будет go для перехода к следующему шагу водопада.

...