Webhook

Webhook adalah salah satu fitur OneSender (dalam pengembangan). Cara kerja webhook yaitu mengirimkan pesan masuk (inbox) ke url external. Fitur ini dapat Anda kembangkan lebih lanjut untuk membuat sistem bot atau responser.

Ilustrasi webhook OneSender seperti ilustrasi di bawah.

1. User kirim pesan WhatsApp
2. OneSender mengirimkan pesan tersebut ke url external / message processor.
3. Message processor mengirimkan pesan respond ke OneSender.
4. OneSender mengirimkan pesan respond ke user.

Jika anda familiar dengan webhook Telegram, cara kerja webhook OneSender hampir sama.

Mengaktifkan fitur OneSender #

Fitur ini masih dalam tahap pengembangan. Untuk mengaktifkannya Anda perlu mengubah file config.yaml dan entry pengaturan di database.

File config.yaml #

whatsapp:
  record_inbox: true

webhook:
  enabled: true
  instant: false
  token_name: ApiKey
  token_value: 123456789
  url: https://eniu033vm7j9.x.pipedream.net

Keterangan setting #

enabled: mengaktifkan webhook. true = aktif, false = tidak aktif
instant: pesan dikirim seketika atau mengunggu OneSender menyelesaikan sending job lain. true = aktif, false = tidak aktif. Jika pesan webhook tidak terkirim isi dengan false.
token_name: nama entry request header untuk otorisasi. Wajib diisi. Contoh: ApiKey
token_value: isi token header. Wajib diisi. Contoh: 384782347328947sdfsfd
– url: endpoint webhook.

Tabel setting #

Silahkan ubah tabel kirimwa_settings. Lalu ubah entry setting sebagai berikut: webhook.enabled, webhook.header_key, webhook.header_value, webhook.instant, webhook.url.

Keterangan setting #

webhook.enabled: mengaktifkan webhook. 1 = aktif, 0 = tidak aktif
webhook.instant: pesan dikirim seketika atau mengunggu OneSender menyelesaikan sending job lain. 1 = aktif, 0 = tidak aktif. Jika pesan webhook tidak terkirim isi dengan 0.
webhook.header_key: nama entry request header untuk otorisasi. Wajib diisi. Contoh: ApiKey
webhook.header_value: isi token header. Wajib diisi. Contoh: 384782347328947sdfsfd
webhook.url: endpoint webhook.

Format webhook #

Berikut ini contoh pesan yang dikirim oleh OneSender ke url external/message processor.

Person #

{
    "contact":
    {
        "name": "John Snow",
        "phone": "628120000001",
        "type": "person"
    },
    "created_at": "2021-11-15T00:54:31.024Z",
    "message": "Hello apa kabar?",
    "received_at": "2021-11-15T00:54:30Z",
    "token": "5028BD042FB9EB4F38EC6746D7A8486D"
}

Group #

{
    "contact":
    {
        "name": "Mentoring Bisnis #1",
        "phone": "628120000001-1473638645",
        "type": "group"
    },
    "created_at": "2021-11-15T00:55:46.284Z",
    "message": "Message to group",
    "received_at": "2021-11-15T00:55:45Z",
    "token": "C362823D61BC895DF11D3D06DC74321C"
}

Contoh Penerapan #

PHP #

function send_wa($phone, $message) {
    $authorization = "Authorization: Bearer _GANTI_DENGAN_TOKEN_ANDA_";
    $url = 'http://_GANTI_DENGAN_URL_ONESENDER_ANDA_/api/send/text';
    $curl = curl_init();

    $messageObj = [
        'phone' => $phone,
        'message' => $message,
    ];

    curl_setopt_array($curl, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS => json_encode($messageObj),
      CURLOPT_HTTPHEADER => array(
        $authorization,
        'Content-Type: application/json'
      ),
    ));

    $response = curl_exec($curl);

    curl_close($curl);
    return $response;
}



function command_info($input) {
    $message = "🤖 Hi.. ini adalah pesan otomatis yang dikirim sistem. Anda dapat menggunakan command berikut: 

*/faq* Informasi seputar product OneSender
*/beli* Link pembelian OneSender
*/support* Link support
*/info* Menampilkan pesan ini
";
    echo send_wa(
        $input->contact->phone,
        $message
    );
}


$rawData = file_get_contents("php://input");
$input = json_decode( $rawData );

if (json_last_error() == JSON_ERROR_NONE) {
       
       $command = strtolower( $input->message );
    switch($command) {
        case '/info':
            command_info($input);
            break;
    }
}

Powered by BetterDocs