我设计了一个系统,用户可以添加多个通知通道,而webhook就是其中之一。我可以将其他通知驱动程序与按需通知一起使用,但是webhook无法正常工作。
例如,当我创建这样的通知时:
Notification::route('slack', 'my slack webhook url')->notify(new MyNotification());
它有效,它向我的闲暇发送一条消息。
但是当我尝试使用webhook时:
Notification::route('webhook', 'my webhook url')->notify(new MyNotification());
它没有发送任何发帖请求,我无法弄清楚。
这是软件包(https://github.com/laravel-notification-channels/webhook)中的代码。我已经检查过,$url
始终为空,但是在松弛时,$url
不为空。
/**
* Send the given notification.
*
* @param mixed $notifiable
* @param \Illuminate\Notifications\Notification $notification
*
* @throws \NotificationChannels\Webhook\Exceptions\CouldNotSendNotification
*/
public function send($notifiable, Notification $notification)
{
if (! $url = $notifiable->routeNotificationFor('Webhook')) {
return;
}
$webhookData = $notification->toWebhook($notifiable)->toArray();
$response = $this->client->post($url, [
'body' => json_encode(Arr::get($webhookData, 'data')),
'verify' => false,
'headers' => Arr::get($webhookData, 'headers'),
]);
if ($response->getStatusCode() >= 300 || $response->getStatusCode() < 200) {
throw CouldNotSendNotification::serviceRespondedWithAnError($response);
}
}
来自松弛通知通道(https://github.com/laravel/slack-notification-channel)的这段代码令人惊讶地将消息发送到我的松弛处,但是该代码与webhook软件包的代码相同。
/**
* Send the given notification.
*
* @param mixed $notifiable
* @param \Illuminate\Notifications\Notification $notification
* @return \Psr\Http\Message\ResponseInterface|null
*/
public function send($notifiable, Notification $notification)
{
if (!$url = $notifiable->routeNotificationFor('slack', $notification)) {
return;
}
return $this->http->post($url, $this->buildJsonPayload(
$notification->toSlack($notifiable)
));
}
那怎么可能?我想念什么吗?为什么松散有效,但Webhook无效?