Получить URL веб-страницы из Bot Framework - PullRequest
1 голос
/ 20 января 2020

Hy.

Мой чат-робот размещен на сайте http://www.abs.com

Я могу sh Я мог бы в "привет мире" получить URL: чтобы получить «Hello world www.abc.com», я попытался использовать методы «HttpContext.Current.Request.Url.AbsoluteUri» и «activity.ServiceUrl», но это не сработало.

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

<script>
    var urlref = window.location.href;

    BotChat.App({
        directLine: { secret: "{directline_secret}" },
        user: { id: 'You', referrer: urlref},
        bot: { id: '{bot_id}' },
        resize: 'detect'
    }, document.getElementById("bot"));
</script>

и в моем BasicBotDialog.cs:

  if (activity.From.Properties["referrer"] != null)
  {
      var urlref= message.From.Properties["referrer"].ToString();
      await context.PostAsync("hy the page of the chatbot is" + urlref);
  }

, но он не работает. идея.

PS: я использую C# в качестве языка программирования и SDK 3.0.

Ответы [ 2 ]

1 голос
/ 21 января 2020

К сожалению, ServiceUrl собирается получить только URL канала. Если вы хотите, чтобы фактический URL-адрес сайта был активен, я бы предложил что-то вроде этот образец :

const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
    if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
    // The channelData submitted here is very similar to HTTP cookies and vulnerable to forgery attack.
    // Make sure you use signature to protect it and verify the signature on the bot side.

    // To minimize unexpected behaviors, we recommend to treat the "action" object as if it is immutable.
    // We use simple-update-in package to update "action" with partial deep cloning.
    action = window.simpleUpdateIn(
        action,
        ['payload', 'activity', 'channelData', 'url'],
        () => window.location.href // This is the part that gets the user's URL
    );
    }

Пара замечаний:

  • Этот код и пример предназначен для версии 4 веб-чата. Ваш код там использует v3. Я рекомендую использовать v4; очень легко выполнить миграцию, если у вас нет особых настроек.
  • Пример - немного , трудный для понимания, вот краткое изложение:

const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
    if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {

Эта часть позволяет вам редактировать исходящие действия


action = window.simpleUpdateIn(
        action,
        ['payload', 'activity', 'channelData', 'url'],
        () => window.location.href // This is the part that gets the user's URL
    );

Эта часть выполняет реальное редактирование


['payload', 'activity', 'channelData', 'url'],
        () => window.location.href

Это говорит о том, что вы хотите установить Activity.ChannelData.Url до window.location.href, который дает URL текущей страницы пользователя.


И, просто чтобы показать, как он работает:

enter image description here

enter image description here

Примечание: отправка завершилась неудачно только потому, что она достигла точки останова, которую я слишком долго отключил

enter image description here

0 голосов
/ 20 января 2020

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

Вы можете получить это из ITurnContext.Activity.ServiceUrl если вы обрабатываете это из ActivityHandler или из DialogContext.Context.Activity.ServiceUrl, если обрабатываете из Dialog.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...