Есть ли простой способ добавить ссылку на ответы Ботмана?

#laravel #chatbot

#laravel #чат-бот

Вопрос:

Возможно, я не использую для этого подходящий пакет чат-ботов (botman). Я бы хотел избежать использования драйвера Facebook, если это возможно. Мой идеальный сценарий — прослушать вопрос и быстро ответить ссылкой.

 $bot->reply('click <a href="http://google.com">here</a> for answers.');
 

Это отображает только текст.

 // controller code, activated after a hears() match
public function askReason()
    {
        $question = Question::create("If you have questions about $this->town, please visit their community page here:")
            ->fallback('Unable to ask question')
            ->callbackId('ask_reason')
            ->addButtons([
                Button::create('Visit')->value('visit'),
                Button::create('Ask Something Else')->value('continue')
            ]);

        return $this->ask($question, function (Answer $answer) {
            if ($answer->isInteractiveMessageReply()) {
                if ($answer->getValue() === 'visit') {
                    header("Location: http://google.com");
                    exit();
                } else {
                    $this->say('Alright, lets talk about something else.');
                }
            }
        });
    }

    /**
     * Start the conversation
     */
    public function run()
    {
        $this->askReason();
    }
 

Это выдает ошибку 405, когда выбран параметр «посещение», и я не могу изменить заголовок через xhr. Я также попробовал ‘return redirect(«http://google.com «)’

Кто-нибудь знает, как ответить в botman с помощью простой ссылки, перенаправления, чего-нибудь другого, кроме прямого текста?

Редактировать Это было мое решение. В окне чата, которое отображается в iframed, я добавил проверку на вставку DOMNode и вручную добавил ссылку.

 <script>
var ready = true;

// set interval
setInterval(setready, 1000);
function setready() {
  ready = true;
}

$(document).on('DOMNodeInserted', "#messageArea", function() {
  if(ready == true)
  {
  setTimeout(replacelink, 200);
  ready = false;
  }
});

function replacelink() {
  $('#messageArea .btn').each(function(){
      text = $(this).html();
      link = text.match(/(Link:)s(/[^<]*)/g);
      if(link)
      {
        $(this).html(' ');
        url = link.toString().substring(5);
        text = text.match(/(.*)(Link:)/g).toString().substring(0,5);
        $(this).empty();
        $(this).html('<a href="'   url   '">'   text   '</a>');
        $(this).addClass('linked');
      }
      else
      {
        $(this).addClass('linked');
      }
  });
}

</script>
 

Кажется, что окно перезагружается каждый раз при отправке сообщения, поэтому код должен выполняться каждый раз (например, вы не можете изменить функцию проверки готовности для поиска класса ‘linked’, который я пробовал. Я сохранил это для css-переходов, скрыв кнопки до тех пор, пока они не будут связаны.) В разговоре я делаю ссылку следующим образом:

 public function askTown()
    {
        $slug = str_slug($this->town, '-');
        $question = Question::create("If you have questions about $this->town, please visit their community page here:")
            ->fallback('Unable to ask question')
            ->callbackId('ask_reason')
            ->addButtons([
                Button::create('Visit Link: /city/'.$slug)->value('visit'),
                Button::create('Ask Something Else')->value('continue')
            ]);

        return $this->ask($question, function (Answer $answer) {
            if ($answer->isInteractiveMessageReply()) {
                if ($answer->getValue() === 'visit') {
                    $this->say('Glad I could help!');
                } else {
                    $this->say('Alright, let's talk about something else.');
                }
            }
        });
    }
 

Комментарии:

1. что, если вы поместите его в значение кнопки, а затем перенаправите, используя значение кнопки, на которую нажали? В значительной степени похоже на кнопку призыва к действию в разговоре

2. Хорошая идея! Я попробовал это и обновил свой вопрос, поскольку чувствую, что мы ближе, но теперь я получаю ошибку 405.

3. Какой драйвер вы используете в данный момент? Если вы используете что-то вроде веб-виджета, это означает, что ваш чат-фрейм является iframe внутри вашей страницы, и я предполагаю, что это проблема с перенаправлением.

4. Я предполагаю, что вам придется проверять наличие этой конкретной кнопки с помощью javascript и перенаправлять при ее нажатии, если это так

5. Да, я смог заставить это работать. Хотя это действительно очень хакерски. Я обновлю свой вопрос

Ответ №1:

Я решил эту проблему во внешнем интерфейсе, вставив ссылку во фрейм с помощью javascript. Подробности см. в моей правке

Комментарии:

1. Пожалуйста, разместите свой ответ здесь, а не оставляйте его как часть вопроса.