Skip to content

Commit 6edf6fa

Browse files
committed
feat: Add home url command
Apply fixes from StyleCI (#90)
1 parent 322711a commit 6edf6fa

File tree

4 files changed

+173
-1
lines changed

4 files changed

+173
-1
lines changed

config/fb-messenger.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
'debug' => env('APP_DEBUG', false),
44
'verify_token' => env('MESSENGER_VERIFY_TOKEN'),
55
'app_token' => env('MESSENGER_APP_TOKEN'),
6-
'app_secret' => env('MESSENGER_APP_SECRET', null),
6+
'app_secret' => env('MESSENGER_APP_SECRET'),
77
'auto_typing' => true,
88
'handlers' => [
99
Casperlaitw\LaravelFbMessenger\Contracts\DefaultHandler::class
1010
],
1111
'custom_url' => '/webhook',
1212
'postbacks' => [],
13+
'home_url' => [
14+
'url' => env('MESSENGER_HOME_URL'),
15+
'webview_share_button' => 'show',
16+
'in_test' => true,
17+
],
1318
];

src/Commands/HomeUrlCommand.php

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Casperlaitw\LaravelFbMessenger\Commands;
5+
6+
use Casperlaitw\LaravelFbMessenger\Messages\HomeUrl;
7+
8+
/**
9+
* Class HomeUrlCommand
10+
*
11+
* @package Casperlaitw\LaravelFbMessenger\Commands
12+
*/
13+
class HomeUrlCommand extends BaseCommand
14+
{
15+
/**
16+
* The name and signature of the console command.
17+
*
18+
* @var string
19+
*/
20+
protected $signature = 'fb:home_url {--d | delete : Delete home url} '.
21+
'{--r | read : Read home url}';
22+
23+
/**
24+
* The console command description.
25+
*
26+
* @var string
27+
*/
28+
protected $description = 'Set home url for chat extensions (default is add)';
29+
30+
/**
31+
* Execute command
32+
*
33+
* @throws \Casperlaitw\LaravelFbMessenger\Exceptions\NotCreateBotException
34+
*/
35+
public function handle()
36+
{
37+
if ($this->option('read')) {
38+
$this->read();
39+
return;
40+
}
41+
42+
$this->addOrRemove();
43+
}
44+
45+
/**
46+
* Read domains
47+
*/
48+
private function read()
49+
{
50+
$command = new HomeUrl();
51+
$command->setAction(HomeUrl::TYPE_READ)->useGet();
52+
$response = collect(array_get($this->handler->send($command)->getResponse(), 'data.0.home_url', []))
53+
->map(function ($item) {
54+
return [$item];
55+
});
56+
57+
$headers = ['Home Url'];
58+
59+
$this->table($headers, $response);
60+
}
61+
62+
/**
63+
*
64+
* @throws \Casperlaitw\LaravelFbMessenger\Exceptions\NotCreateBotException
65+
*/
66+
private function addOrRemove()
67+
{
68+
$command = new HomeUrl(config('fb-messenger.home_url', []));
69+
70+
if ($this->option('delete')) {
71+
$command->setAction(HomeUrl::TYPE_DELETE)->useDelete();
72+
}
73+
74+
$this->comment($this->handler->send($command)->getResponse());
75+
}
76+
}

src/LaravelFbMessengerServiceProvider.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Casperlaitw\LaravelFbMessenger\Commands\DomainWhitelistingCommand;
66
use Casperlaitw\LaravelFbMessenger\Commands\GetStartButtonCommand;
77
use Casperlaitw\LaravelFbMessenger\Commands\GreetingTextCommand;
8+
use Casperlaitw\LaravelFbMessenger\Commands\HomeUrlCommand;
89
use Casperlaitw\LaravelFbMessenger\Commands\MessengerCodeCommand;
910
use Casperlaitw\LaravelFbMessenger\Commands\PersistentMenuCommand;
1011
use Casperlaitw\LaravelFbMessenger\Contracts\Debug\Debug;
@@ -84,6 +85,7 @@ private function registerCommands()
8485
PersistentMenuCommand::class,
8586
DomainWhitelistingCommand::class,
8687
MessengerCodeCommand::class,
88+
HomeUrlCommand::class,
8789
]);
8890
}
8991
}

src/Messages/HomeUrl.php

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Casperlaitw\LaravelFbMessenger\Messages;
5+
6+
use Casperlaitw\LaravelFbMessenger\Contracts\Messages\Message;
7+
use Casperlaitw\LaravelFbMessenger\Contracts\Messages\ProfileInterface;
8+
use Casperlaitw\LaravelFbMessenger\Contracts\RequestType;
9+
10+
class HomeUrl extends Message implements ProfileInterface
11+
{
12+
use RequestType;
13+
14+
/**
15+
* Add type
16+
*/
17+
const TYPE_ADD = 'add';
18+
/**
19+
* Delete type
20+
*/
21+
const TYPE_DELETE = 'delete';
22+
23+
/**
24+
* Read type
25+
*/
26+
const TYPE_READ = 'read';
27+
28+
/**
29+
* @var string
30+
*/
31+
private $action = self::TYPE_ADD;
32+
33+
/**
34+
* @var array
35+
*/
36+
private $config;
37+
38+
/**
39+
* HomeUrl constructor.
40+
*
41+
* @param $config
42+
*/
43+
public function __construct($config)
44+
{
45+
parent::__construct(null);
46+
$this->config = $config;
47+
}
48+
49+
50+
/**
51+
* Set domain whitelisting action
52+
*
53+
* @param $action
54+
* @return $this
55+
*/
56+
public function setAction($action)
57+
{
58+
$this->action = $action;
59+
60+
return $this;
61+
}
62+
63+
/**
64+
* To array for send api
65+
* @return array
66+
*/
67+
public function toData()
68+
{
69+
if ($this->action === self::TYPE_READ) {
70+
return [
71+
'fields' => 'home_url',
72+
];
73+
}
74+
75+
if ($this->action === self::TYPE_DELETE) {
76+
return [
77+
'fields' => [
78+
'home_url',
79+
],
80+
];
81+
}
82+
83+
return [
84+
'home_url' => array_merge([
85+
'webview_height_ratio' => 'tall',
86+
], $this->config),
87+
];
88+
}
89+
}

0 commit comments

Comments
 (0)