Возможно, я не использую подходящий пакет 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.');
}
}
});
}