driver-slack icon indicating copy to clipboard operation
driver-slack copied to clipboard

Interactive Message buttons not working

Open TheFrankman opened this issue 6 years ago • 11 comments
trafficstars

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();
    }
}

TheFrankman avatar Aug 16 '19 11:08 TheFrankman

Any chance someone found workaround for this?

udovicic avatar Dec 17 '19 12:12 udovicic

I gave up.

TheFrankman avatar Dec 17 '19 13:12 TheFrankman

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

brunohulk avatar Jun 21 '20 11:06 brunohulk

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.

johnson-jnr avatar Jun 24 '20 14:06 johnson-jnr

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

Evi444 avatar Oct 20 '20 16:10 Evi444

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...

rxng avatar Oct 22 '20 07:10 rxng

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

Evi444 avatar Oct 22 '20 07:10 Evi444

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 [email protected] 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.

rxng avatar Oct 22 '20 07:10 rxng

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....

Evi444 avatar Oct 22 '20 09:10 Evi444

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

SidneyHodieb avatar Jan 03 '21 19:01 SidneyHodieb

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.

aaronware avatar Oct 11 '21 00:10 aaronware