botman / driver-slack

BotMan Slack Driver
MIT License
51 stars 54 forks source link

Interactive Message buttons not working #50

Open TheFrankman opened 5 years ago

TheFrankman commented 5 years ago

Hello There,

I'm having some issues with interactive buttons in a conversation.

I have copied everything relevant from botman studio and everything is working with the exception of buttons and menu list interactions.

When i click a button, i get by fallback message '' Sorry i don't understand that command " As apposed to responding with a joke or quote.

I'm sure i'm missing a configuration or something, but I can't for the life of me figure out what the issue is.

route/botman.php

<?php
use App\Http\Controllers\BotManController;

$botman->hears('Hi', function ($bot) {
    $bot->reply('Hello!');
});

$botman->hears('Start conversation', BotManController::class.'@startConversation');

$botman->fallback(function($bot) use ($actions) {
    $bot->reply("Sorry i don't understand that command");
});

Botman controller

    /**
     * Place your BotMan logic here.
     */
    public function handle(Request $request)
    {
            $botman = app('botman');
            $botman->listen();
    }

    public function startConversation(BotMan $bot)
    {
        $bot->startConversation(new ExampleConversation());
    }

Example conversation

<?php

namespace App\Conversations;

use Illuminate\Foundation\Inspiring;
use BotMan\BotMan\Messages\Incoming\Answer;
use BotMan\BotMan\Messages\Outgoing\Question;
use BotMan\BotMan\Messages\Outgoing\Actions\Button;
use BotMan\BotMan\Messages\Conversations\Conversation;
use Illuminate\Support\Facades\Log;

class ExampleConversation extends Conversation
{
    /**
     * First question
     */
    public function askReason()
    {
        $question = Question::create("Huh - you woke me up. What do you need?")
            ->fallback('Unable to ask question')
            ->callbackId('ask_reason')
            ->addButtons([
                Button::create('Tell a joke')->value('joke'),
                Button::create('Give me a fancy quote')->value('quote'),
            ]);

        return $this->ask($question, function (Answer $answer) {
            Log::info("Is interactive reply ? " . $answer->isInteractiveMessageReply());
            $this->say("Is interactive reply ? " . $answer->isInteractiveMessageReply());
            $this->say($answer->getValue());
            if ($answer->isInteractiveMessageReply()) {
                Log::info("Inside interactive message reply");
                Log::Info("Answer value : " . $answer->value());
                if ($answer->getValue() === 'joke') {
                    $responseContent = file_get_contents('http://api.icndb.com/jokes/random');
                    Log::info($responseContent);
                    $joke = json_decode($responseContent);
                    $this->say($joke->value->joke);
                } else {
                    $this->say(Inspiring::quote());
                }
            }
        });
    }

    /**
     * Start the conversation
     */
    public function run()
    {
        $this->askReason();
    }
}
udovicic commented 4 years ago

Any chance someone found workaround for this?

TheFrankman commented 4 years ago

I gave up.

brunohulk commented 4 years ago

I'm having the same issue, has someone by any chance found the reason?

johnson-jnr commented 4 years ago

Hi, not sure about the slack driver but I had the same problem when testing locally using ngrok. I hosted on heroku and now the buttons are working fine.

Evi444 commented 3 years ago

I had a similar problem, solved updating opis/closure https://packagist.org/packages/opis/closure

rxng commented 3 years ago

This is a real issue - what is the point of asking questions when you can't click the answers and get a reply? Or maybe we are missing something...

Evi444 commented 3 years ago

It works up to php 7.2.33 Read they are working on a new version, mean while try updating opis/closure. I got it working with php 7.4

rxng commented 3 years ago

I am using pho 7.4.8

Opus/closure 3.6 (latest)

Botman can’t recognise button clicks still

On 22 Oct 2020, at 18:16, Evi444 notifications@github.com wrote:

 It works up to php 7.2.33 Read they are working on a new version, mean while try updating opis/closure. I got it working with php 7.4

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

Evi444 commented 3 years ago

I just realized that I was already running opis 3.6 on server with php7. 4 🙄 I had another server with php7. 2 in this one buttons worked fine.

It was after copying files from 7.2 to 7.4 server and trying to update with composer that buttons started working on new version. Still have to check why, hope it gives a clue....

SidneyHodieb commented 3 years ago

Do a composer update in your project, it will update all the depencies, after that it will work correctly

aaronware commented 2 years ago

I know this is super late to this issue. But when I came across this earlier today playing around with the library, what I ended up doing was creating a new custom driver that extended the slack driver. Override the buildPayload method with your own and simply do the following...

        ```$payloadData = stripslashes( $request->request->get('payload' ) );
        $payloadData = json_decode( $payloadData, true );```

The reason why it's failing is that the data passed from Slack is escaped in the send so json_decode can't read is properly and will return NULL by default unless the slashes are removed. Once doing that it works as intended.