Можно ли отправлять - последовательно по каналам - скрытое значение в CardAction при отображении чего-то еще?

Вернемся к старым вопросам типа кнопки PostBack / ImBack.

Я видел запросы, которые искали способы отправить сообщение боту, ничего не отображая для пользователя. Но я ищу последовательный способ достичь «святого Грааля» кнопки:

  1. Отображаемый текст - например, 'Выбрать'
  2. Сообщение, которое затем отображается в ленте чата от пользователя к боту - например, 'Форд Мондео'
  3. Фактическое значение, которое отправляется боту - например, '03 D 27913 '

PostBack - это рекомендуемый выбор, чтобы иметь возможность отправлять значение боту, не показывая его пользователю. Однако на самом деле я хочу показать что-то пользователю, чтобы указать, что что-то происходит. Если вы нажимаете кнопку и в течение секунды или двух ничего не происходит, пользователи теряют терпение, думая, что им нужно снова нажать кнопку.

Skype и Messenger покажут отображаемый текст пользователю при отправке значения, и это нормально. Однако DirectLine этого не делает - вы ничего не видите, пока бот не ответит.

ImBack, конечно, показывает «уродливое» значение «03 D 27913» в ленте чата.

Я был бы счастлив, если бы только кнопка с надписью «выбрать» и то же «выбрать» появлялась в ленте чата, а «03 D 27913» каким-то образом проходила под капотом - по всем трем каналам, DirectLine, Skype и Messenger.

Мне не хватает очевидного решения или есть сложное, связанное с данными канала?


person oflahero    schedule 11.09.2018    source источник


Ответы (1)


Ввиду отсутствия последовательного ответа, вот мое текущее хакерское решение на тот момент, если у кого-то есть интерес:

В коде бота используйте PostBack для всех каналов, кроме DirectLine, который должен использовать ImBack.

Выберите простой способ определить «уродливую ценность», которую вы хотите скрыть, например номерам моей машины предшествует звездочка, например * | 03 D 27913

В Skype / Messenger PostBack покажет «выберите» и отправит идентификатор правильно под капотом.

На DirectLine / странице вашего веб-чата вы увидите «уродливый идентификатор» в ImBacks. Поэтому используйте setInterval в своем JS, чтобы выбрать .wc-message-from-me и проверить его дочерние диапазоны на идентификаторы, например 'начинается с * |' и вместо этого замените 'select'.

Я использую интервал 100 мс, и он работает хорошо. С точки зрения элегантности решение неприятно, но приемлемо. Тестирование производительности: средняя стоимость звонка 0,2 мс. Результаты профилировщика: 0,518 с. Сценария в образце 19,6 с, включая все остальные сценарии.

Теперь вы спрашиваете - почему бы вместо этого не подписаться на событие сообщения DirectLine, т.е. botConnection.activity$.subscribe(message => {...? К сожалению, это не вызывается в момент ввода сообщения пользователем - только когда бот отвечает, когда вы получаете два обратных вызова, один для сообщения бота и один для вашего сообщения пользователя. К этому времени уже слишком поздно.

person oflahero    schedule 13.09.2018
comment
Возможно, было бы немного чище (т.е. не нужно устанавливать интервал), чтобы настроить веб-чат, чтобы он работал так же, как Skype и мессенджер для PostBacks. - person Mark B; 21.09.2018
comment
Я в принципе согласен, Марк, на самом деле я использую модифицированный клон WebChat, поскольку он используется для некоторых тривиальных структурных изменений стиля. Я еще не достаточно React / Redux-y, чтобы у меня было время внести такие значительные изменения. Кстати, WebChat на самом деле работает наиболее «правильно» из трех; Мессенджер и Skype ведут себя так на PostBack случайно. Я считаю, что поддержка displayText находится в стадии разработки. - person oflahero; 21.09.2018