Advertisement
  1. Code
  2. Coding Fundamentals
  3. Rest API

Cara membuat antarmuka Interface untuk aplikasi PHP Anda

Scroll to top
Read Time: 35 min

() translation by (you can also view the original English article)

Jika Anda sudah mengikuti pengembangan alat komunikasi kantor tahun lalu atau lebih, saya yakin Anda telah mendengar banyak tentang Slack. Di tingkat permukaan, kendur adalah sekadar aplikasi chatting yang dirancang untuk bisnis, tapi karena perhatian terhadap detail dan ekstenbilitas, banyak komentator sudah mengatakan bahwa alat tersebut secara dramatis akan berubah bagaimana kita bekerja di masa depan.

Sebagai pengembang, kita berada dalam posisi yang baik untuk melompat pada tren dan berpikir tentang cara-cara yang kita dapat menggunakan Slack sebagai antarmuka pengguna chat-based untuk aplikasi kita.

Itulah sebabnya, dalam tutorial ini, Anda akan belajar bagaimana untuk memulai dengan mengintegrasikan aplikasi PHP Anda ke Slack, dengan membuat post pesan ke Slack channel dan menanggapi slash perintah.

Anda dapat mendownload source code untuk tutorial dari repositori GitHub terkait, atau membuat sendiri sementara akan melalui tutorial.

Tutorial kode terdiri dari dua bagian:

  • bare-bone tetapi lengkap antarmuka untuk berkomunikasi dengan Slack
  • sebuah contoh sederhana script yang menggunakan class Slack untuk mengirim pemberitahuan dan untuk menanggapi perintah slash

Mari kita mulai.

1. Buat aplikasi Anda dan menghubungkannya ke Slack

pencarian cepat Google untuk "Slack PHP" membawa segenggam antarmuka slack yang berbeda yang diciptakan oleh pengembang lain, sehingga Anda juga bisa pergi dengan proyek yang sudah ada, dan masukan ke aplikasi Anda.

Tetapi API tidaklah rumit, jadi tidak ada alasan untuk tidak memiliki beberapa menyenangkan dan pendekatan proyek dari bawah. Dengan cara ini, Anda akan tahu apa yang ada dalam API (dan integrasi). Hal ini selalu baik untuk melawan mitos hal-hal sedikit.

Pada inti dari tutorial ini adalah membangun antarmuka Slack, tetapi untuk menggunakan dan mengujinya, kita juga memerlukan aplikasi. Untuk ini, saya memutuskan untuk pergi dengan aplikasi PHP sederhana yang tidak menggunakan framework.

Berikut adalah bagaimana contoh aplikasi akan bekerja:

  1. Pertama kali Anda menjalankan aplikasi, Anda akan melihat tombol "Add to Slack untuk menghubungkan aplikasi ke Slack channel.
  2. Mengklik pada tombol akan memandu Anda melalui otentikasi berbasis OAuth Slack 's. Ketika aplikasi menerima token akses dari Slack, itu akan menyimpannya ke file teks sehingga itu kemudian dapat menggunakannya untuk berbicara ke Slack.
  3. Ketika otentikasi berbasis OAuth selesai, aplikasi akan menunjukkan bidang teks sederhana yang dapat digunakan untuk mengirim pemberitahuan menyenangkan ("Oh ya, saya adalah robot!") ke Slack channel anda.
  4. Akhirnya, di belakang layar, app akan merespon untuk memangkas perintah Anda atau rekan kerja Anda ketik di Slack channel terkait.
This is what our example application will look likeThis is what our example application will look likeThis is what our example application will look like

Anda dapat menjalankan aplikasi pada server PHP-diaktifkan di web, atau ikuti petunjuk dalam tutorial ini dan menjalankannya pada mesin pengembangan lokal Anda.

Demo aplikasi ini untuk demonstrasi saja, sehingga pada akhirnya, Anda mungkin memakai Slack antarmuka dan terhubung ke WordPress Anda yang sudah ada, Laravel atau proyek PHP lainnya. Seluruh tutorial, saya akan berbagi beberapa ide tentang bagaimana Anda dapat menggunakan interface class dalam aplikasi asli bukan aplikasi demo sederhana kami.

Langkah 1: Buat aplikasi PHP Anda

Pertama, mari kita mulai dengan menciptakan arsitektur dasar proyek dan menempatkan semua file di tempat.

Jika Anda mengunduh kode sumber dari GitHub, Anda dapat hanya cepat menelusuri langkah ini untuk memastikan bahwa Anda memahami bagaimana kode diatur dan kemudian pindah ke langkah berikutnya.

Di dalam direktori proyek, buat struktur file berikut:

  1. index.php: File untuk aplikasi contoh yang dijelaskan di atas.
  2. slack-interface: sebuah direktori yang akan berisi antarmuka slack yang akan dibuat dalam tutorial ini. Direktori akan berisi tiga file:
    1. slack-interface/class-slack.php: Slack interface class
    2. slack-interface/class-slack-access.php Class yang memegang informasi akses slack dan memasukannya ke aplikasi yang menggunakan interface.
    3. slack-interface/class-slack-api-exception.php: class exception untuk melewati kesalahan dari interface kode yang menggunakan itu.

Kemudian, dengan file di tempat, mari kita tambahkan beberapa konten untuk masing-masing sehingga kita memiliki kerangka kerja untuk mengembangkan fungsi sebenarnya.

Mulai dengan menambahkan form HTML utama dan beberapa kode pengganti untuk index.php:

1
<?php
2
/**

3
 * A lightweight example script for demonstrating how to

4
 * work with the Slack API.

5
 */
6
 
7
// Include our Slack interface classes

8
require_once 'slack-interface/class-slack.php';
9
require_once 'slack-interface/class-slack-access.php';
10
require_once 'slack-interface/class-slack-api-exception.php';
11
12
use Slack_Interface\Slack;
13
use Slack_Interface\Slack_API_Exception;
14
15
//

16
// HELPER FUNCTIONS

17
//

18
19
/**

20
 * Initializes the Slack object.

21
 *

22
 * @return Slack    The Slack interface object

23
 */
24
function initialize_slack_interface() {
25
    return null;
26
}
27
28
/**

29
 * Executes an application action (e.g. 'send_notification').

30
 * 

31
 * @param Slack  $slack     The Slack interface object

32
 * @param string $action    The id of the action to execute

33
 *

34
 * @return string   A result message to show to the user

35
 */
36
function do_action( $slack, $action ) {
37
    $result_message = '';
38
39
    switch ( $action ) {
40
        default:
41
            break;
42
    }
43
44
    return $result_message;
45
}
46
47
//

48
// MAIN FUNCTIONALITY

49
//

50
51
// Setup the Slack interface

52
$slack = initialize_slack_interface();
53
54
// If an action was passed, execute it before rendering the page

55
$result_message = '';
56
if ( isset( $_REQUEST['action'] ) ) {
57
    $action = $_REQUEST['action'];
58
    $result_message = do_action( $slack, $action );
59
}
60
61
//

62
// PAGE LAYOUT

63
//

64
65
?>
66
<html>
67
    <head>
68
        <title>Slack Integration Example</title>
69
        
70
        <style>
71
            body {
72
                font-family: Helvetica, sans-serif;
73
                padding: 20px;
74
            }
75
            
76
            .notification {
77
                padding: 20px;
78
                background-color: #fafad2;
79
            }
80
81
            input {
82
                padding: 10px;
83
                font-size: 1.2em;
84
                width: 100%;
85
            }
86
        </style>
87
    </head>
88
    
89
    <body>
90
        <h1>Slack Integration Example</h1>
91
92
        <?php if ( $result_message ) : ?>
93
            <p class="notice">
94
                <?php echo $result_message; ?>
95
            </p>
96
        <?php endif; ?>
97
98
        <form action="" method="post">
99
            <input type="hidden" name="action" value="send_notification"/>
100
            <p>
101
                <input type="text" name="text" placeholder="Type your notification here and press enter to send." />
102
            </p>
103
        </form>
104
    </body>
105
</html>

Mari kita lihat isi script dan apa yang ada saat ini:

  • Baris 7-13, kita pertama memasukan Perpustakaan file dan kemudian memberitahu PHP yang kita akan menggunakan class Slack dan Slack_API_Exception dari Slack_Interface namespace. File dan class tidak ada, tetapi kami akan mendapatkannya mereka segera.
  • Selanjutnya, ada dua placeholder untuk helper fungsi. Fungsi helper pertama, initialize_slack_interface (baris 19-26), akan mengatur class Slack untuk session sekarang.
  • Fungsi helper kedua, do_action (baris 28-45) akan digunakan untuk menangani action lain kecuali render halaman — misalnya, post pesan dikirim ke saluran slack Anda, tapi juga menerima masuk slash perintah dari slack.
  • Setelah fungsi pembantu, terdapat fungsi "main" aplikasi kecil kami. Pertama, aplikasi menginisialisasi objek Slack (baris 52). Kemudian, pada baris 54-59, memeriksa jika action telah diminta menggunakan action parameter. Jika ya, aplikasi mengeksekusi action yang menggunakan fungsi helper do_action kami.
  • Sisa dari script adalah HTML dasar (dan beberapa CSS, yang saya tulis pada file yang sama untuk menjaga hal-hal sederhana) yang render form yang Anda lihat dalam gambar di atas.

Selanjutnya, menambahkan beberapa konten dalam file cllass yang membuat interface Slack.

Di class-slack.php, tambahkan kode berikut:

1
<?php
2
namespace Slack_Interface;
3
4
/**

5
 * A basic Slack interface you can use as a starting point

6
 * for your own Slack projects.

7
 */
8
class Slack {
9
10
    private static $api_root = 'https://slack.com/api/';
11
12
    public function __construct() {
13
        
14
    }
15
16
}

Class tidak berisi fungsi apapun namun, konstruktor pengganti dan definisi URL rott untuk API Slack. Baris 2, Anda juga akan melihat bahwa class ditempatkan dalam sebuah namespace, Slack_Interface.

Demikian pula, dalam class-slack-access.php, tambahkan kode berikut:

1
<?php
2
namespace Slack_Interface;
3
4
/**

5
 * A class for holding Slack authentication data. 

6
 */
7
class Slack_Access {
8
9
    public function __construct( $data ) {
10
11
    }
12
13
}

Akhirnya, tambahkan isi berikut class-slack-api-exception.php:

1
<?php
2
namespace Slack_Interface;
3
4
use Exception;
5
6
/**

7
 * A simple exception class for throwing Slack API errors.

8
 */
9
class Slack_API_Exception extends Exception {
10
11
}

Sekarang, kami telah menciptakan kerangka kerja untuk aplikasi Slack dan siap untuk mulai menambahkan beberapa fungsi.

Tapi pertama, kita perlu membuat aplikasi tersedia di web sehingga Slack dapat berbicara kepadanya.

Langkah 2: Membuat Server Anda tersedia di Internet

Sebelum Anda dapat mendaftar aplikasi Anda dengan Slack dan membuatnya menerima panggilan masuk dari Slack, pertama Anda harus membuatnya dapat diakses dari internet.

Slash perintah juga memerlukan bahwa aplikasi menggunakan HTTPS. Jika Anda tidak peduli tentang perintah dan hanya ingin aplikasi Anda untuk dapat mengirimkan pemberitahuan, Anda dapat melewatkan bagian ini. Untuk tutorial ini, namun, seperti masuk slash perintah adalah bagian besar dari apa yang ingin kita lakukan, kita membutuhkan solusi yang memberikan dukungan pada HTTPS.

Jika server web Anda sudah diatur HTTPS, itulah cara alami untuk pergi.

Pilihan lain, dalam tahap pengembangan, adalah dengan menggunakan layanan tunneling seperti localtunnel. Localtunnel memberikan server URL aman di web yang dapat menunjuk ke server web Anda, yang berjalan pada komputer lokal Anda. Sementara bukan solusi untuk aplikasi live, ketika pengujian fungsionalitas, itu baik menyederhanakan workflow Anda (tidak perlu meng-upload file ke server) dan memberikan dukungan pada HTTPS out of the box.

Untuk memulai, menginstal localtunnel sesuai petunjuk pada tool situs.

Kemudian, mulai server web Anda, mencatat port server listen.

Dan akhirnya, setelah server hidup, mulai localtunnel di terminal menggunakan perintah berikut. Ganti your_subdomain dengan Anda lebih disukai subdomain dan your_port dengan port server web Anda:

1
lt -s your_subdomain -p your_port

Jika subdomain yang diminta tersebut tersedia, localtunnel mulai, dan Anda dapat mengakses server Anda melalui URL https://your_subdomain.localtunnel.me.

Tunneling startedTunneling startedTunneling started

Langkah 3: Mendaftar aplikasi Slack baru

Setelah server Anda dapat dicapai dari internet, sekarang saatnya untuk mendaftarkan aplikasi Slack baru.

Untuk menciptakan sebuah aplikasi Slack, sign in ke account slack dan kunjungi halaman New Application. Anda juga dapat menemukan link ke Halaman ini dengan mengklik pada My Apps di sudut kanan atas dasbor API slack Anda saat masuk.

You will find the Add New Application link on your My Apps pageYou will find the Add New Application link on your My Apps pageYou will find the Add New Application link on your My Apps page

Halaman New Application terlihat seperti ini:

The New Application pageThe New Application pageThe New Application page

Pada Halaman ini, masukkan informasi tentang aplikasi Anda dan kemudian klik Create Application untuk menyimpannya:

  • App Name: Nama untuk mengidentifikasi aplikasi Anda pada daftar aplikasi, tetapi juga dalam pesan Anda mengirim kembali ke slack. Aku pergi dengan "Slack Tutorial".
  • Team: Tim yang aplikasi akan tersedia. Ketika aplikasi Anda sudah siap, Anda bisa mengirimkan ke direktori app. Pada saat itu, tim Slack akan memeriksanya dan, jika semuanya berjalan baik, membuat aplikasi tersedia untuk semua orang.
  • Short Description: Sebuah deskripsi yang akan ditampilkan kepada pengguna ketika mereka menghubungkan aplikasi Anda ke saluran slack mereka. Jika hanya menguji, Anda dapat meninggalkan ini kosong untuk saat ini. Sama berlaku untuk Link to installation instructions and app support info bidang.
  • Icon: Ikon yang akan ditampilkan kepada pengguna ketika mereka menghubungkan aplikasi Anda ke saluran slack mereka serta dalam setiap pesan yang dikirim oleh aplikasi Anda.
  • Redirect URI(s): URL slack yang akan mengarahkan pengguna ke ketika mereka telah menyelesaikan flow otentikasi. Kami akan melihat ini di lebih terinci di langkah 5 dan 6 di bawah, tetapi sekarang, hanya mengatur bidang menunjuk ke index.php?action=oauth dalam aplikasi Anda, misalnya, https://your_subdomain.localtunnel.me/slack-integration/index.php?action=oauth.

Ketika Slack aplikasi telah dibuat, Anda akan melihat ini tercantum pada halaman My Apps. Di sana, Anda dapat mengedit informasi aplikasi jika diperlukan, dan menyalin kredensialnya API (tercantum di bagian berlabel OAuth informasi) ke integrasi:

OAuth InformationOAuth InformationOAuth Information

Langkah 4: Simpan kredensial API dalam aplikasi Anda

Selanjutnya, karena Anda akan menyimpan kredensial API untuk aplikasi PHP Anda, sangat baik untuk mengambil waktu untuk berpikir tentang bagaimana melakukannya dengan aman.

Secara umum, itu tidak dianggap sebagai sebuah praktek yang baik untuk melakukan informasi sensitif ke version control. Sebaliknya, Anda mungkin ingin pergi dengan salah satu pilihan berikut:

  • Menyimpan kredensial dalam database Anda dapat menjadi ide yang baik, misalnya, di mana setiap pengguna akan memiliki mereka sendiri set API kredensial dan Anda ingin mereka untuk bisa mengatur kredensial mereka langsung dari Admin Dashboard WordPress plugin.
  • Pilihan lain (sedikit lebih aman daripada yang pertama) adalah untuk mendefinisikan kredensial sebagai konstanta dalam file konfigurasi di server (sekali lagi, jika bekerja dengan WordPress, wp-config.php akan menjadi pilihan yang tepat). Pastikan file konfigurasi tidak terexpos keluar (atau tercommit oleh version control).
  • Akhirnya, Anda dapat mengatur klien ID dan secret sebagai lingkungan variabel pada server. Dengan cara ini, informasi yang tidak disimpan dalam sebuah file yang dapat secara tidak sengaja bocor di luar aplikasi.

Dalam pelaksanaanya kami, kami akan pergi dengan kombinasi metode yang dua terakhir. Untuk membuat antarmuka Slack sadar kredensial API, tambahkan dua fungsi baru untuk class Slack:

1
/**

2
 * Returns the Slack client ID.

3
 * 

4
 * @return string   The client ID or empty string if not configured 

5
 */
6
public function get_client_id() {
7
    // First, check if client ID is defined in a constant

8
    if ( defined( 'SLACK_CLIENT_ID' ) ) {
9
        return SLACK_CLIENT_ID;
10
    }
11
12
    // If no constant found, look for environment variable

13
    if ( getenv( 'SLACK_CLIENT_ID' ) ) {
14
        return getenv( 'SLACK_CLIENT_ID' );
15
    }
16
  	
17
    // Not configured, return empty string

18
    return '';
19
}
20
21
/**

22
 * Returns the Slack client secret.

23
 * 

24
 * @return string   The client secret or empty string if not configured

25
 */
26
private function get_client_secret() {
27
    // First, check if client secret is defined in a constant

28
    if ( defined( 'SLACK_CLIENT_SECRET' ) ) {
29
        return SLACK_CLIENT_SECRET;
30
    }
31
32
    // If no constant found, look for environment variable

33
    if ( getenv( 'SLACK_CLIENT_SECRET' ) ) {
34
        return getenv( 'SLACK_CLIENT_SECRET' );
35
    }
36
37
    // Not configured, return empty string

38
    return '';
39
}

Dua fungsi adalah salinan hampir persis satu sama lain, jadi mari kita hanya pergi melalui pertama satu, get_client_id, untuk mendapatkan ide dari apa yang mereka lakukan:

  • Pertama, baris 7-10, fungsi memeriksa untuk melihat jika ID klien yang telah disimpan dalam konstan bernama SLACK_CLIENT_ID. Jika konstan ini didefinisikan, fungsi mengembalikan nilai.
  • Jika konstan belum didefinisikan, fungsi berlanjut dengan memeriksa untuk variabel environment dengan nama yang sama (baris 12-15).
  • Akhirnya, jika ada klien ID ditemukan, fungsi mengembalikan string kosong.

Menggunakan pendekatan ini, tambahkan kredensial akses pada awal index.php, atau bahkan lebih baik, terpisah file PHP yang Anda sertakan di index.php namun belum tercommut ke version control:

1
// Define Slack application identifiers

2
// Even better is to put these in environment variables so you don't risk exposing

3
// them to the outer world (e.g. by committing to version control)

4
define( 'SLACK_CLIENT_ID', 'Paste your client ID here' );
5
define( 'SLACK_CLIENT_SECRET', 'Paste your client secret here' );

Step 5: Membuat struktur Data untuk menyimpan informasi otorisasi

Sekarang bahwa kita telah disimpan kredensial aplikasi, saatnya untuk pindah ke tingkat berikutnya otentikasi: memungkinkan pengguna untuk menambahkan aplikasi ke akun Slack mereka.

Aliran otentikasi terdiri dari tiga langkah:

  1. Jika pengguna belum menambahkan aplikasi untuk Slack, "Add to Slack" tombol ditampilkan dalam aplikasi.
  2. Setelah mengklik tombol, pengguna diminta untuk mengotorisasi aplikasi untuk mengirim pemberitahuan dan menanggapi perintah pada saluran slack.
  3. Bila pengguna mengotorisasi aplikasi, aplikasi Anda akan menerima kode sementara yang menukar seperangkat informasi permanen otentikasi menggunakan API Slack.

Kita akan mulai menerapkan flow segera, tapi pertama-tama, kami akan memerlukan metode untuk menyimpan dan menggunakan informasi otentikasi sekali kami telah menerima dari Slack.

Untuk ini, kita akan menggunakan class Slack_Access, yang kita buat sebelumnya dalam tutorial.

Di bagian atas class, pertama mendefinisikan variabel untuk memegang data otorisasi:

1
// Slack OAuth data

2
3
private $access_token;
4
private $scope;
5
private $team_name;
6
private $team_id;
7
private $incoming_webhook;

Kemudian, menerapkan constructor untuk membaca nilai untuk variabel ini dari sebuah array yang dimasukan sebagai parameter:

1
/**

2
 * Sets up the Slack_Access object with authentication data.

3
 *

4
 * @param array $data   The Slack OAuth authentication data. If the user

5
 *                      hasn't been authenticated, pass an empty array.

6
 */
7
public function __construct( $data ) {
8
    $this->access_token = isset( $data['access_token'] ) ? $data['access_token'] : '';
9
    $this->scope = isset( $data['scope'] ) ? $data['scope'] : array();
10
    $this->team_name = isset( $data['team_name'] ) ? $data['team_name'] : '';
11
    $this->team_id = isset( $data['team_id'] ) ? $data['team_id'] : '';
12
    $this->incoming_webhook = isset( $data['incoming_webhook'] ) ? $data['incoming_webhook'] : array();
13
}

Konstruktor menginisialisasi variabel untuk nilai-nilai yang dimasukan dalam $data array, atau nilai-nilai kosong jika sepotong informasi tidak hadir dalam array atribut.

Tepat setelah konstruktor, tambahkan fungsi untuk memeriksa jika objek telah diinisialisasi dengan data yang valid:

1
/**

2
 * Checks if the object has been initialized with access data.

3
 *

4
 * @return bool True if authentication data has been stored in the object. Otherwise false.

5
 */
6
public function is_configured() {
7
    return $this->access_token != '';
8
}

Kemudian, untuk menyimpan data otentikasi, tambahkan fungsi berikut:

1
/**

2
 * Returns the authorization data as a JSON formatted string.

3
 *

4
 * @return string   The data in JSON format

5
 */
6
public function to_json() {
7
    $data = array(
8
        'access_token' => $this->access_token,
9
        'scope' => $this->scope,
10
        'team_name' => $this->team_name,
11
        'team_id' => $this->team_id,
12
        'incoming_webhook' => $this->incoming_webhook
13
    );
14
15
    return json_encode( $data );
16
}

Fungsi mengembalikan sebuah string JSON-diformat yang berisi data otorisasi.

Dalam aplikasi yang sebenarnya, Anda kemungkinan besar akan ingin mengikat informasi otorisasi untuk account pengguna dan menyimpan data JSON informasi pengguna. Namun, dalam aplikasi contoh kita — sekali lagi-kita akan pergi dengan pendekatan sederhana: kita asumsikan bahwa pengguna hanya satu (Anda) akan pernah menggunakan aplikasi, dan jadi kita hanya perlu untuk menyimpan satu set kredensial OAuth.

Tapi pertama-tama, mari kita pindah ke class Slack dan membuatnya menggunakan fungsi kami hanya menambahkan ke Slack_Access.

Menerapkan constructor untuk mengatur objek akses untuk Slack instance saat ini:

1
/**

2
 * @var Slack_Access    Slack authorization data

3
 */
4
private $access;
5
6
/**

7
 * Sets up the Slack interface object.

8
 *

9
 * @param array $access_data An associative array containing OAuth

10
 *                           authentication information. If the user

11
 *                           is not yet authenticated, pass an empty array.

12
 */
13
public function __construct( $access_data ) {
14
    if ( $access_data ) {
15
        $this->access = new Slack_Access( $access_data );
16
    }
17
}

Tepat setelah konstruktor, tambahkan fungsi untuk memeriksa jika data otorisasi dalam objek Slack telah ditetapkan:

1
/**

2
 * Checks if the Slack interface was initialized with authorization data.

3
 *

4
 * @return bool True if authentication data is present. Otherwise false.

5
 */
6
public function is_authenticated() {
7
    return isset( $this->access ) && $this->access->is_configured();
8
}

Langkah 6: Tampilkan tombol Add to Slack

Dengan struktur data di tempat, kita dapat mulai menggunakan otorisasi cek dalam aplikasi utama kami dan menunjukkan tombol "Add to Slack".

Perhatikan bahwa sementara class Slack_Access itu sendiri dapat digunakan di sebagian besar aplikasi cukup banyak seperti, solusi yang digunakan dalam index.php adalah untuk tujuan demonstrasi saja: sebagai kita tidak memiliki manajemen pengguna atau database, kami hanya akan menyimpan akses JSON-formatted. akses kredensial dari to_json dalam sebuah file teks.

Pada titik ini, file tidak ada lagi, yang berarti bahwa aplikasi belum belum ditambahkan ke akun kendur, dan tombol "Tambahkan ke kendur" harus ditampilkan bukan bidang teks.

Untuk menerapkan sistem penyimpanan sederhana, mulai dengan mengganti index.php's fungsi initialize_slack_interface dengan berikut:

1
/**

2
 * Initializes the Slack handler object, loading the authentication

3
 * information from a text file. If the text file is not present,

4
 * the Slack handler is initialized in a non-authenticated state.

5
 *

6
 * @return Slack    The Slack interface object

7
 */
8
function initialize_slack_interface() {
9
    // Read the access data from a text file

10
    if ( file_exists( 'access.txt' ) ) {
11
        $access_string = file_get_contents( 'access.txt' );
12
    } else {
13
        $access_string = '{}';
14
    }
15
16
    // Decode the access data into a parameter array

17
    $access_data = json_decode( $access_string, true );
18
19
    $slack = new Slack( $access_data );
20
    
21
    return $slack;
22
}

Pada baris 9-14, fungsi membaca data otorisasi sebagai string dari file teks disebut access.txt jika filenya ada. Jika file tidak ada, JSON string diinisialisasi ke hash kosong.

Kemudian, pada baris 17, data parsing ke dalam array untuk dimasukan ke Slack interface (baris 19).

Sekarang, kita sudah siap untuk meletakkannya bersama-sama dan membuat aplikasi kita sedikit Tampilkan tombol "Add to Slack" jika tidak ada data otorisasi ditemukan.

Pada akhir index.php, ganti form dengan cuplikan kode berikut:

1
<?php if ( $slack->is_authenticated() ) : ?>
2
    <form action="" method="post">
3
        <input type="hidden" name="action" value="send_notification"/>
4
        <p>
5
            <input type="text" name="text" placeholder="Type your notification here and press enter to send." />
6
        </p>
7
    </form>
8
<?php else : ?>
9
    <p>
10
        <a href="https://slack.com/oauth/authorize?scope=incoming-webhook,commands&client_id=<?php echo $slack->get_client_id(); ?>"><img alt="Add to Slack" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x"></a>
11
    </p>
12
<?php endif; ?>

Dalam potongan kode, baris 1, Anda akan melihat bahwa form sekarang dikelilingi dengan pemeriksaan is_authenticated sehingga pengguna tidak dapat melihatnya sebelum mengotorisasi aplikasi.

Kemudian, cabang else, baris 8-12, kode sekarang render tombol "Add to slack".

Mari kita ambil Lihatlah apa yang ada di dalamnya a tag:

  • Pertama-tama tombol poin pengguna menjadi Slack di OAuth otorisasi flow (oauth/authorize).
  • Menggunakan parameter scope, aplikasi dapat menentukan izin yang perlu pengguna untuk dibolehkan: dalam kasus kami, kita perlu webhooks yang masuk (incoming-webook) untuk post pemberitahuan dan kemampuan untuk menambahkan slash baru perintah (commands). Untuk daftar lengkap tersedia izin, Periksa dokumentasi API.
  • Akhirnya, link harus memiliki public key aplikasi (client_id), yang kita disimpan ke aplikasi kita sebelumnya dalam tutorial.

Sisanya adalah hanya basic HTML untuk menampilkan tombol gambar.

Sekarang, ketika Anda membuka aplikasi di browser web Anda, di sini adalah apa yang harus Anda lihat:

The Add to Slack buttonThe Add to Slack buttonThe Add to Slack button

Langkah 7: Menyelesaikan otentikasi OAuth

Sekarang, tombol "Add to Slack" ada di tempat. Tapi apa yang terjadi ketika pengguna mengklik di atasnya?

Pertama, pengguna akan melihat halaman otentikasi slack di app, yang terlihat seperti ini:

Give the Slack application access to one your Teams channelsGive the Slack application access to one your Teams channelsGive the Slack application access to one your Teams channels

Kemudian, jika semua terlihat baik untuk pengguna, ia akan klik pada tombol Authorize, pada titik mana eksekusi kembali ke aplikasi Anda.

Anda akan ingat bahwa ketika kita didefinisikan aplikasi dalam Slack, kita tetapkan URL callback (YOUR_URL/index.php?action=oauth).

Untuk menangani callback ini, kita akan menggunakan sistem action yang kita buat sebelumnya dalam tutorial. Dalam aplikasi yang sebenarnya, Anda harus menerapkan URL callback dengan cara yang bekerja dengan baik untuk platform yang Anda gunakan. Sebagai contoh, di WordPress, Anda bisa sangat baik membuat permalink kustom menggunakan rewrite engine.

Namun, sementara menerima callback akan berbeda berdasarkan aplikasi, apa yang kami lakukan dengan data yang diterima dari slack yang sama.

Menggantikan fungsi do_action kosong dengan berikut:

1
/**

2
 * Executes an application action (e.g. 'send_notification').

3
 *

4
 * @param Slack  $slack     The Slack interface object

5
 * @param string $action    The id of the action to execute

6
 *

7
 * @return string   A result message to show to the user

8
 */
9
function do_action( $slack, $action ) {
10
    $result_message = '';
11
12
    switch ( $action ) {
13
14
        // Handles the OAuth callback by exchanging the access code to

15
        // a valid token and saving it in a file

16
        case 'oauth':
17
            $code = $_GET['code'];
18
19
            // Exchange code to valid access token

20
            try {
21
                $access = $slack->do_oauth( $code );
22
                if ( $access ) {
23
                    file_put_contents( 'access.txt', $access->to_json() );
24
                    $result_message = 'The application was successfully added to your Slack channel';
25
                }
26
            } catch ( Slack_API_Exception $e ) {
27
                $result_message = $e->getMessage();
28
            }
29
            break;
30
31
        default:
32
            break;
33
34
    }
35
36
    return $result_message;
37
}

Ketika pengguna kembali dari flow otorisasi, fungsi ini dipanggil dengan $action diatur ke 'oauth'. Dengan permintaan, aplikasi menerima one-time token, yang dibaca dibaris 17.

Kemudian, pada baris 21, untuk menyelesaikan otorisasi, fungsi panggilan fungsi dalam class Slack, do_oauth.

Seperti Anda akan ingat dari sebelumnya, inisialisasi antarmuka S;acl, kami mencoba untuk memuat data otentikasi dari file teks, access.txt. Ketika file tidak ditemukan, aplikasi memutuskan bahwa pengguna belum dikonfirmasi aplikasi dan menunjukkan tombol "Add to Slack".

Sekarang, setelah otentikasi OAuth terlaksana, baris 23, fungsi menyimpan data ke file itu.

Tapi sebelum kita sampai di sana, untuk menyelesaikan flow otentikasi, kita masih perlu untuk menerapkan do_oauth fungsi dalam class Slack.

Fungsi ini akan memanggil API Slack untuk bertukar kode yang dimasukan ke fungsi callback OAuth dengan otentikasi data yang dapat disimpan secara permanen dan digunakan untuk berkomunikasi dengan Slack sampai pengguna mencabut otorisasi.

Untuk melakukan ini, kita akan perlu cara untuk membuat permintaan HTTP ke server slack. Ada banyak cara untuk membuat permintaan HTTP dalam PHP, dan apa yang disajikan di sini bukanlah satu-satunya cara. Misalnya, jika Anda mengembangkan untuk WordPress, Anda mungkin ingin pergi dengan wp_remote_get dan wp_remote_post.

Saat ini, namun, untuk menjaga semuanya independen dari setiap developemnt framework aplikasi tertentu, saya memutuskan untuk pergi dengan perpustakaan gratis dengan sintaks yang indah dan bersih, Requests.

Instal perpustakaan sesuai petunjuk pada situs web. Dalam kode sumber dalam repositori Tuts + GitHub, Anda akan menemukan konfigurasi komposer siap pakai untuk termasuk perpustakaan untuk aplikasi kita.

Setelah Anda menginstal Requests (atau pilihan Perpustakaan HTTP), tambahkan fungsi do_oauth ke class Slack:

1
/**

2
 * Completes the OAuth authentication flow by exchanging the received

3
 * authentication code to actual authentication data.

4
 *

5
 * @param string $code  Authentication code sent to the OAuth callback function

6
 *

7
 * @return bool|Slack_Access    An access object with the authentication data in place

8
 *                              if the authentication flow was completed successfully.

9
 *                              Otherwise false.

10
 *

11
 * @throws Slack_API_Exception 

12
 */
13
public function do_oauth( $code ) {
14
    // Set up the request headers

15
    $headers = array( 'Accept' => 'application/json' );
16
		
17
    // Add the application id and secret to authenticate the request

18
    $options = array( 'auth' => array( $this->get_client_id(), $this->get_client_secret() ) );
19
20
    // Add the one-time token to request parameters 

21
    $data = array( 'code' => $code );
22
23
    $response = Requests::post( self::$api_root . 'oauth.access', $headers, $data, $options );
24
		
25
    // Handle the JSON response

26
    $json_response = json_decode( $response->body );
27
28
    if ( ! $json_response->ok ) {
29
        // There was an error in the request

30
        throw new Slack_API_Exception( $json_response->error );
31
    }
32
33
    // The action was completed successfully, store and return access data

34
    $this->access = new Slack_Access(
35
        array(
36
            'access_token' => $json_response->access_token,
37
            'scope' => explode( ',', $json_response->scope ),
38
            'team_name' => $json_response->team_name,
39
            'team_id' => $json_response->team_id,
40
            'incoming_webhook' => $json_response->incoming_webhook
41
        )
42
    );
43
44
    return $this->access;
45
}

Mari kita pergi melalui fungsi baris demi baris:

Pada baris 14-18, fungsi menginisialisasi parameter untuk permintaan HTTP. Patut dicatat adalah bahwa klien ID dan secret dikirimkan sebagai pilihan permintaan menggunakan HTTP's mekanisme otentikasi dasar.

Baris 21, Anda akan melihat bahwa kita mengirimkan satu kali token diterima dalam fungsi callback kembali ke API Slack untuk mengidentifikasi permintaan.

Permintaan POST Dikirim pada baris 23. Kemudian, fungsi hasil oleh parsing respon dan pengaturan baik atas dan mengembalikan data otorisasi (baris 33-44) jika semua berjalan baik, atau melempar exception (baris 28-31) jika ada error dengan request.

Sekarang, flow "Add to Slack" siap. Ketika Anda mencobanya, Anda akan melihat berikut:

The authentication flow was completed successfullyThe authentication flow was completed successfullyThe authentication flow was completed successfully

Juga, jika Anda melihat ke dalam direktori proyek Anda, Anda harus menemukan sebuah teks file bernama access.txt, dengan otentikasi data yang tersimpan di dalamnya.

Sekarang, kita sudah siap untuk bersenang-senang bagian: membuat aplikasi post ke saluran Slack anda.

2. mengirimkan pemberitahuan ke saluran Slack

Post pemberitahuan ke saluran slack adalah cara yang ampuh untuk membuat tim up to date pada event-event yang penting bagi mereka. Toko web mungkin mengirim pemberitahuan dari pembelian baru, perangkat lunak pelacakan bug bisa secara otomatis memberitahukan pengembang, dan daftar goes on.

Dalam contoh kita, seperti yang Anda sudah melihat di UI sebelumnya, kami akan mengirimkan pemberitahuan yang user submit menggunakan bidang teks.

Tetapi fungsi untuk mengirimkan jenis pemberitahuan yang sama, sehingga setelah itu siap, Anda dapat menggunakan kode yang sama untuk mengirim pemberitahuan Anda sendiri, lebih kompleks.

Langkah 1: Membuat fungsi untuk mengirimkan pemberitahuan

Di class Slack, tambahkan fungsi berikut:

1
/**

2
 * Sends a notification to the Slack channel defined in the

3
 * authorization (Add to Slack) flow.

4
 *

5
 * @param string $text          The message to post to Slack

6
 * @param array $attachments    Optional list of attachments to send 

7
 *                              with the notification

8
 *

9
 * @throws Slack_API_Exception

10
 */
11
public function send_notification( $text, $attachments = array() ) {
12
    if ( ! $this->is_authenticated() ) {
13
        throw new Slack_API_Exception( 'Access token not specified' );
14
    }
15
16
    // Post to webhook stored in access object

17
    $headers = array( 'Accept' => 'application/json' );
18
19
    $url = $this->access->get_incoming_webhook();
20
    $data = json_encode(
21
        array(
22
            'text' => $text,
23
            'attachments' => $attachments,
24
            'channel' => $this->access->get_incoming_webhook_channel(),
25
        )
26
    );
27
28
    $response = Requests::post( $url, $headers, $data );
29
		
30
    if ( $response->body != 'ok' ) {
31
        throw new Slack_API_Exception( 'There was an error when posting to Slack' );
32
    }
33
}

Post pemberitahuan untuk saluran Slack dilakukan menggunakan webhook, sebuah URL khusus otorisasi yang slack mengekspos ke aplikasi untuk post ke saluran.

Kami tidak membayar banyak perhatian untuk itu sebelumnya dalam flow "Add to Slack", tetapi jika Anda melihat data dalam Slack_Access lagi, Anda akan melihat bahwa Slack mengembalikan sebuah field yang bernama incoming_webhook. Bidang ini adalah sebuah array dengan dua bidang di dalamnya: UR yangL kita harus post pemberitahuan kami ke, dan saluran pengguna yang dipilih untuk aplikasi pesan.

Untuk mengakses data itu, tambahkan dua fungsi Slack_Access class:

1
/**

2
 * Returns the webhook URL for posting notifications.

3
 * 

4
 * @return string   The incoming webhook URL

5
 */
6
public function get_incoming_webhook() {
7
    if ( is_array( $this->incoming_webhook ) && isset( $this->incoming_webhook['url'] ) ) {
8
        return $this->incoming_webhook['url'];
9
    }
10
11
    return '';
12
}
13
14
/**

15
 * Returns the channel to which the user has authorized the application

16
 * to post notifications.

17
 * 

18
 * @return string   The selected Slack channel's ID

19
 */
20
public function get_incoming_webhook_channel() {
21
    if ( is_array( $this->incoming_webhook ) && isset( $this->incoming_webhook['channel'] ) ) {
22
        return $this->incoming_webhook['channel'];
23
    }
24
25
    return '';
26
}

Sekarang, mari kita kembali ke fungsi send_notification di atas, dan melihat bagaimana fungsi-fungsi ini digunakan untuk mengirim pemberitahuan.

Pada baris 19, Anda akan melihat bahwa permintaan HTTP dikirim ke URL webhook yang masuk disimpan dalam data otorisasi.

Dan kemudian, pada baris 24, saluran memasukan parameter request, teks dan lampiran ingin di post.

Langkah 2: Gunakan pemberitahuan pengiriman fungsi dalam contoh aplikasi

Sekarang bahwa kita telah menerapkan fungsi untuk mengirim pemberitahuan, mari kita lampirkan fungsionalitas untuk antarmuka pengguna kami dan mengujinya.

Menambah fungsi do_action di index.php cabang case baru berikut:

1
// Sends a notification to a Slack channel

2
case 'send_notification':
3
    $message = isset( $_REQUEST['text'] ) ? $_REQUEST['text'] : 'Hello!';
4
5
    try {
6
        $slack->send_notification( $message );
7
        $result_message = 'Notification sent to Slack channel.';	
8
    } catch ( Slack_API_Exception $e ) {
9
        $result_message = $e->getMessage();
10
    }
11
    break;

Potongan kode ini membaca pesan dari parameter request (baris 3) dan menggunakan fungsi send_notification kami hanya membuat post ke Slack (baris 6).

Karena form diciptakan sudah pada awal dari tutorial, Anda sekarang siap untuk mengirim pesan pertama Anda ke saluran slack Anda. Ketik sesuatu di bidang teks dan tekan Enter untuk submit form.

Kemudian, lihatlah saluran slack Anda untuk lihat pesan Anda:

The bot just sent its first messageThe bot just sent its first messageThe bot just sent its first message

Langkah 3: Menggunakan lampiran untuk membuat pemberitahuan Anda lebih informatif

Dalam fungsi send_notification, Anda mungkin memperhatikan parameter disebut atachments. Saya tidak menyebutkan belum seperti itu tidak sesuai dengan baik dengan contoh aplikasi. Namun, lampiran adalah cara yang ampuh untuk melewati lebih menarik informasi tentang event-event aplikasi Anda ke saluran slack, dan Anda mungkin ingin menggunakannya dalam aplikasi Anda.

Jadi, mari kita sedikit bereksperimen dengan lampiran dengan memodifikasi send_notification panggilan dari langkah 2 sedikit. Ganti panggilan $slack->send_notification() dengan potongan kode berikut:

1
$attachments = array(
2
    array(
3
        'fallback' => 'Jarkko just posted a new bread recipe.',
4
5
        'title' => 'Sprouted Wheat Bread',
6
        'title_link' => 'https://bread-magazine.com/sprouted-wheat-flour/',
7
8
        'text' => 'Jarkko just posted a new bread recipe. Check it out.',
9
10
        'color' => '#7CD197',
11
12
        'fields' => array(
13
            array(
14
                'title' => 'Preparation time',
15
                'value' => ':hourglass: 24 hours',
16
                'short' => true
17
            ),
18
            array(
19
                'title' => 'Difficulty',
20
                'value' => 'Medium',
21
                'short' => true
22
            ),
23
        ),
24
        'image_url' => 'https://s3.amazonaws.com/interested/wordpress/wp-content/uploads/2015/02/12093547/sprouted-bread.jpg'
25
    )
26
);
27
28
$slack->send_notification( $message, $attachments );

Lampiran yang ditentukan dalam kode di atas adalah pemberitahuan imajiner tentang penambahan resep roti baru dalam database resep. Itu ada hanya sebagai contoh, jadi pergi ke depan dan memodifikasinya untuk melihat bagaimana perubahan yang Anda buat itu mempengaruhi output pada saluran slack.

  • fallback: pesan teks biasa yang diperlukan yang akan ditampilkan jika lampiran tidak akan ditampilkan.
  • title: judul untuk lampiran, gaya menggunakan font yang lebih besar.
  • title_link: URL yang akan dibuka ketika pengguna mengklik pada link. Dalam contoh kita, ini akan menunjukkan resep.
  • text: teks yang akan ditampilkan dalam lampiran.
  • color: warna untuk baris di sisi kiri lampiran.
  • fields: Daftar bidang data untuk menunjukkan di lampiran. Dalam contoh, mereka digunakan untuk menampilkan beberapa informasi tentang resep.
  • image_url: sebuah URL untuk gambar untuk menunjukkan di lampiran.

Berikut adalah apa yang akan Anda lihat ketika Anda memposting pemberitahuan dengan lampiran yang ditentukan di atas:

A Slack notification with an attachmentA Slack notification with an attachmentA Slack notification with an attachment

Bermain dengan parameter dan melihat bagaimana mengubah mereka mempengaruhi pesan yang post di channel Slack Anda: memodifikasi atribut, mengirimkan pemberitahuan baru, dan lihatlah apa yang berubah.

Untuk informasi lebih lanjut tentang lampiran, lihat dokumentasi slack.

3. membuat aplikasi Anda menanggapi Slash perintah

Aplikasi Anda sekarang dapat berbicara dengan Slack. Selanjutnya, kita akan membuat komunikasi bekerja juga cara lain: dengan menambahkan slash perintah, kita dapat membuat slack bekerja sebagai sebuah antarmuka untuk aplikasi kita.

Dalam aplikasi real-world, ini memiliki banyak kasus penggunaan. Menandai bug sudah diperbaiki, menandai urutan seperti dikirim, atau meminta sebuah lelucon hanya beberapa yang datang ke pikiran.

Mari kita pergi ke depan dan melaksanakan permintaan lelucon post lelucon setiap kali mengetik /joke pada saluran Slack.

Langkah 1: Menentukan perintah Slash

Pertama, kunjungi halaman pengaturan aplikasi Slack Anda untuk menentukan perintah slash baru.

Scroll ke bawah ke bagian dengan judul, Slash Commands, dan klik pada Create new Command.

Slash CommandsSlash CommandsSlash Commands

Pada layar berikutnya, masukkan informasi yang diperlukan untuk menentukan perintah baru, lalu klik Save.

Create New CommandCreate New CommandCreate New Command

Berikut adalah deskripsi singkat untuk bidang pada Halaman ini:

  • Command: Slash perintah, termasuk karakter garis miring. Misalnya, /joke.
  • Request URL: URL pada server Anda yang harus disebut saat seseorang mengetik perintah slash ini pada saluran slack. Ini adalah tempat localtunnel datang berguna: URL harus HTTPS dan tersedia untuk menghubungkan dari internet. Menggunakan format URL berikut untuk membuat URL permintaan kompatibel dengan fungsi yang kita bangun dalam langkah 2 di bawah ini: YOUR_SERVER/index.php?action=command.
  • Short Description: Sebuah deskripsi yang ditampilkan dalam autocomplete popup ketika seseorang sedang mengetik perintah.
  • Usage Hint: Jika perintah mengambil parameter, Anda dapat menggambarkan mereka di sini. Teks ini ini juga terlihat pada autocomplete dialog.

Setelah menyimpan perintah, Anda akan menemukan Anda perintah baru yang ditunjukkan di bagian Slash Commands. Anda dapat menggunakan tombol untuk mengedit atau menghapusnya.

Slash Commands now include the joke commandSlash Commands now include the joke commandSlash Commands now include the joke command

Di bawah daftar perintah, Anda akan menemukan sebuah string label Verification Token.

Anda dapat menggunakan token ini untuk memverifikasi bahwa perintah yang memang datang dari Slack sebelum mengeksekusi mereka. Simpan token dalam aplikasi Anda dengan cara yang sama Anda lakukan untuk klien ID dan secret sebelumnya dalam tutorial, misalnya dengan menambahkan konstan pada awal index.php:

1
define( 'SLACK_COMMAND_TOKEN', 'Paste your command verification token here' );

Langkah 2: Buat sebuah sistem untuk melacak Slash perintah dalam aplikasi Anda

Sekarang, kendur akan mengidentifikasi perintah saat seseorang mengetik di jendela chat slack (Anda dapat mencobanya sekarang untuk melihat autocomplete popup).

Ketika pengguna mengirimkan perintah, S;acl akan memanggil server di Request URL yang ditetapkan pada langkah sebelumnya. Sekarang, kita akan perlu menerapkan fungsi untuk membuat aplikasi kita menanggapinya dengan benar.

Seperti Anda dapat menambahkan lebih dari satu garis miring perintah aplikasi slack Anda, baik untuk mendukung sejumlah variabel slash perintah. Itu sebabnya kita akan mulai dengan menciptakan sebuah sistem untuk melacak garis miring perintah dalam aplikasi.

Pertama, di class Slack, menambahkan variabel berikut untuk memegang perintah:

1
/**

2
 * @var array $slash_commands   An associative array of slash commands 

3
 *                              attached to this Slack interface

4
 */
5
private $slash_commands;

Dalam konstruktor class, tambahkan baris untuk menginisialisasi array:

1
$this->slash_commands = array();

Kemudian, membuat fungsi untuk menambahkan perintah slash baru ke array:

1
/**

2
 * Registers a new slash command to be available through this

3
 * Slack interface.

4
 *

5
 * @param string    $command    The slash command

6
 * @param callback  $callback   The function to call to execute the command

7
 */
8
public function register_slash_command( $command, $callback ) {
9
    $this->slash_commands[$command] = $callback;
10
}

Sekarang bahwa Anda memiliki daftar perintah slash, menambahkan fungsi untuk mengeksekusi perintah:

1
/**

2
 * Runs a slash command passed in the $_POST data if the

3
 * command is valid and has been registered using register_slash_command.

4
 *

5
 * The response written by the function will be read by Slack.

6
 */
7
public function do_slash_command() {
8
    // Collect request parameters

9
    $token      = isset( $_POST['token'] ) ? $_POST['token'] : '';
10
    $command    = isset( $_POST['command'] ) ? $_POST['command'] : '';
11
    $text       = isset( $_POST['text'] ) ? $_POST['text'] : '';
12
    $user_name  = isset( $_POST['user_name'] ) ? $_POST['user_name'] : '';
13
14
    // Use the command verification token to verify the request

15
    if ( ! empty( $token ) && $this->get_command_token() == $_POST['token'] ) {
16
        header( 'Content-Type: application/json' );
17
18
        if ( isset( $this->slash_commands[$command] ) ) {
19
            // This slash command exists, call the callback function to handle the command

20
            $response = call_user_func( $this->slash_commands[$command], $text, $user_name );
21
            echo json_encode( $response );
22
        } else {
23
            // Unknown slash command

24
            echo json_encode( array(
25
                'text' => "Sorry, I don't know how to respond to the command."
26
            ) );
27
        }
28
    } else {
29
        echo json_encode( array(
30
            'text' => 'Oops... Something went wrong.'
31
        ) );
32
    }
33
34
    // Don't print anything after the response

35
    exit;
36
}

Mari kita pergi melalui fungsi untuk melihat apa yang dilakukan:

Pertama, baris 8-12, fungsi mengumpulkan data dari parameter permintaan:

  • Token ini digunakan untuk memverifikasi bahwa permintaan permintaan perintah slack berlaku.
  • command berisi perintah slash yang harus dijalankan.
  • text adalah string teks yang diketik setelah perintah. Dapat digunakan untuk dimasukan parameter ke perintah slash Anda.
  • user_name adalah username dari pengguna yang mengirim perintah slash.

Pada baris 15, fungsi melakukan verifikasi dengan membandingkan token yang diteruskan dalam parameter permintaan yang kita disimpan di langkah sebelumnya.

Jika token sah, fungsi terus melaksanakan perintah, jika satu dengan nama perintah yang diberikan telah terdaftar di class Slack. Pelaksanaan perintah yang dilakukan pada baris 20, mana fungsi membuat panggilan ke fungsi callback yang ditentukan untuk perintah.

Kemudian, pada baris 21, respon dikodekan ke dalam sebuah string JSON dan dicetak. Perhatikan bahwa fungsi berakhir dengan panggilan exit untuk memastikan tidak ada yang lebih mendapat dicetak setelah respon.

Untuk menyelesaikan fungsionalitas, tambahkan fungsi get_command_token untuk mengambil token verifikasi perintah untuk aplikasi:

1
/**

2
 * Returns the command verification token.

3
 *

4
 * @return string   The command verification token or empty string if not configured

5
 */
6
private function get_command_token() {
7
    // First, check if command token is defined in a constant

8
    if ( defined( 'SLACK_COMMAND_TOKEN' ) ) {
9
        return SLACK_COMMAND_TOKEN;
10
    }
11
12
    // If no constant found, look for environment variable

13
    if ( getenv( 'SLACK_COMMAND_TOKEN' ) ) {
14
        return getenv( 'SLACK_COMMAND_TOKEN' );
15
    }
16
17
    // Not configured, return empty string

18
    return '';
19
}

Fungsi perintah slash di class Slack telah selesai, dan semua yang tersisa untuk dilakukan sebelum kita dapat menerapkan perintah pertama kami adalah untuk menghubungkan callback URL untuk kode ini.

Untuk melakukannya, tambahkan cabang case baru dalam fungsi do_action di index.php:

1
// Responds to a Slack slash command. Notice that commands are 

2
// registered at Slack initialization.

3
case 'command':
4
    $slack->do_slash_command();
5
    break;

Langkah 3: Mendaftar dan menguji perintah Slash

Sekarang bahwa kita telah menciptakan sebuah sistem untuk menangani slash perintah dalam aplikasi kita, mari kita menggunakannya untuk menerapkan fungsi untuk perintah /joke.

Pertama, pada akhir initialize_slack_interface fungsi, tambahkan baris berikut kode untuk mendaftar perintah dan mengirimkan nama fungsi yang akan menangani perintah:

1
// Register slash commands

2
$slack->register_slash_command( '/joke', 'slack_command_joke' );

Kemudian, membuat fungsi:

1
/**

2
 * A simple slash command that returns a random joke to the Slack channel.

3
 *

4
 * @return array    A data array to return to Slack

5
 */
6
function slack_command_joke() {
7
    $jokes = array(
8
        "The box said 'Requires Windows Vista or better.' So I installed LINUX.",
9
        "Bugs come in through open Windows.",
10
        "Unix is user friendly. It’s just selective about who its friends are.",
11
        "Computers are like air conditioners: they stop working when you open Windows.",
12
        "I would love to change the world, but they won’t give me the source code.",
13
        "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
14
    );
15
16
    $joke_number = rand( 0, count( $jokes ) - 1 );
17
18
    return array(
19
        'response_type' => 'in_channel',
20
        'text' => $jokes[$joke_number],
21
    );
22
}

Karena fungsi ini diciptakan hanya sebagai demo, tidak melakukan banyak: itu secara acak memilih salah satu lelucon (agak buruk) dan kembali dalam format yang diharapkan oleh Slack.

Perhatikan bahwa sementara fungsi perintah ini tidak mengambil parameter apapun, untuk contoh yang lebih kompleks, Anda dapat menambahkan dua parameter: $text untuk mengakses data apapun yang pengguna mengetik setelah perintah, dan $user_name untuk mendapatkan nama pengguna yang mengirimkan perintah.

Untuk menguji perintah, pergi ke depan dan ketik /joke pada saluran Slack.

The application tells a jokeThe application tells a jokeThe application tells a joke

Kesimpulan dan ide-ide untuk nanti

Anda sekarang telah menyelesaikan tutorial dan tahu bagaimana untuk mengintegrasikan aplikasi PHP Anda dengan Slack. Selama tutorial, Anda juga telah membangun tool untuk mengirim pemberitahuan ke saluran Slack serta menanggapi perintah pengguna mengetik secara langsung di Slack.

Langkah berikutnya adalah untuk meletakkan ide-ide ini bekerja secara nyata.

Pikirkan tentang aplikasi Anda dan mencari tempat di mana berbicara Slack dan mendengarkan perintah yang berasal dari kekosongan bisa membuat pengalaman lebih bermanfaat dan menyenangkan bagi pengguna Anda, dan menerapkan mereka.

Platform dengan cepat berkembang, dan begitu juga dengan API. Mengawasi di mana itu akan, dan membangun sesuatu yang menakjubkan!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.