Есть ли простой способ добавить ссылку на ответы Ботмана? - PullRequest
0 голосов
/ 18 апреля 2019

Возможно, я не использую подходящий пакет chatbot для этого (ботман).Я хотел бы избежать драйвера 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.Я также попробовал 'вернуть редирект (' http://google.com")'

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

Редактировать Это было мое решение. В окне чата, в котором отображается 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>

Окно перезагружается при каждой отправке сообщения, поэтомукод должен запускаться каждый раз (например, вы не можете изменить функцию проверки готовности для поиска класса «связанных», который я пробовал. Я сохранил его для переходов 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 Ответ

0 голосов
/ 10 мая 2019

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

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