如何解决将使用事件 APIHTTP 端点的 Slack 应用程序迁移到 Slack 套接字模式
我已经使用 PHP(HTTP 端点)实现了一个 Slack 应用程序。在 slack slash 命令下,我插入了请求 URL(指向我用 PHP 编写的代码以打开 Slack Modal 的 HTTP 端点),以打开一个对话框(Slack Modal)。提交表单后,它将转到 GitHub,我已在交互和快捷方式(有效负载)中的请求 URL 下插入了我用 PHP 编写的代码的 URL。
但由于安全措施,我想将应用程序迁移到套接字模式。有人可以告诉我如何在本地 VM 中为 PHP 实现套接字模式吗?
这是在slack中打开对话框的代码
<?PHP
$slack_token = 'xoxb-******************';
// Dialog Form:
$dialog = [
'callback_id' => 'git_issue','title' => 'Add issue','submit_label' => 'Create','elements' => [
[
'type' => 'text','label' => 'Name','name' => 'name'
],[
'type' => 'text','label' => 'E-mail','name' => 'email'
],$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'https://slack.com/api/dialog.open');
curl_setopt($ch,CURLOPT_HTTPHEADER,[
'Content-Type: application/x-www-form-urlencoded'
]);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
// set the POST query parameters
curl_setopt($ch,CURLOPT_POST,CURLOPT_POSTFIELDS,http_build_query($query));
// execute curl request
$response = curl_exec($ch);
如何将应用迁移到socket模式?
提前致谢
解决方法
我使用这个自己编写的代码。可能它并不完美,但它有效:
<?php
require 'vendor/autoload.php';
// Slack config:
$slack_token = 'xapp-*';
$bot_token = 'xoxb-*';
$url = false;
$dialog = [
'callback_id' => 'git_issue','title' => 'Add new GitHub Issue','submit_label' => 'Create','elements' => [
[
'type' => 'text','label' => 'Developer\'s Name','name' => 'name'
],]
];
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'https://slack.com/api/apps.connections.open');
curl_setopt($ch,CURLOPT_HTTPHEADER,[
'Content-Type: application/x-www-form-urlencoded','Authorization: Bearer '.$slack_token
]);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
// set the POST query parameters
curl_setopt($ch,CURLOPT_POST,true);
// execute curl request
$response = curl_exec($ch);
// close
curl_close($ch);
if ($response) {
$resp = json_decode($response);
if (isset($resp->url)) {
$url = $resp->url;
}
}
if ($url) {
echo 'Slack returned the websocket URL'.PHP_EOL;
$client = new WebSocket\Client($url,['timeout' => 3600]);
while (true) {
try {
$message = $client->receive();
echo $message.PHP_EOL.PHP_EOL;
if ($message) {
$data = json_decode($message);
if (isset($data->payload)) {
if (isset($data->payload->command) && $data->payload->command == '/git') {
// Open Dialog:
// define POST query parameters
$query = [
'token' => $bot_token,'dialog' => json_encode($dialog),'trigger_id' => $data->payload->trigger_id,];
// define the curl request
$ch = curl_init();
curl_setopt($ch,'https://slack.com/api/dialog.open');
curl_setopt($ch,[
'Content-Type: application/x-www-form-urlencoded'
]);
curl_setopt($ch,true);
curl_setopt($ch,true);
// set the POST query parameters
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($query));
// execute curl request
$response = curl_exec($ch);
// close
curl_close($ch);
$query = [
'envelope_id' => $data->envelope_id
];
$client->text(json_encode($query));
// -----------
}
if (isset($data->payload->type) && $data->payload->type == 'dialog_submission') {
// collect submitted data:
$name = $data->payload->submission->name;
$query = [
'envelope_id' => $data->envelope_id,];
$client->text(json_encode($query));
}
}
}
} catch (\WebSocket\ConnectionException $e) {
// Possibly log errors
var_dump($e);
}
}
$client->close();
}
配置您的 Slack 应用并创建令牌:
- 转到https://api.slack.com/apps页面并选择现有的一个或 创建一个新应用
- 进入“基本信息”页面,找到“App-Level 令牌”部分。创建一个新令牌。我使用这些范围 “连接:写入,授权:读取”
- 转到“OAuth & Permissions”页面并生成“Bot User OAuth Token”
- 转到“斜线命令”页面并创建一个命令。在我的代码示例中,我们将它命名为“/git”
- 转到“套接字模式”页面并使用滑动按钮启用该模式
对于通过 PHP 的 websockets 连接,我使用来自 GitHub 的 Textalk/websocket-php 实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。