Topik ini menjelaskan cara menghasilkan token otentikasi Alibaba Real-Time Communication (ARTC) yang diperlukan untuk memulai panggilan.
Ikhtisar fungsi
SDK AICallKit menyediakan API sisi klien untuk langsung memulai panggilan agen. API tersebut memerlukan token otentikasi, sehingga server aplikasi Anda harus menyediakan API guna menghasilkan token otentikasi ARTC. Dengan demikian, klien dapat mengambil token dari API tersebut sebelum memulai panggilan.
Langkah-langkah
Untuk menghasilkan token ARTC, peroleh AppId dan AppKey dari aplikasi ApsaraVideo Real-time Communication Anda.
Buka Konsol Intelligent Media Service. Klik agen yang telah Anda buat untuk membuka halaman produknya.

Klik RTC AppID. Buka Konsol ApsaraVideo Live untuk memperoleh AppId dan AppKey.

Hasilkan token otentikasi ARTC menggunakan AppId dan AppKey. Token dihitung sebagai berikut.
// 1. Gabungkan bidang-bidang berikut: AppID+AppKey+ChannelID+UserID+Nonce+Timestamp // 2. Gunakan fungsi sha256 pada string yang digabungkan untuk menghasilkan token. token = sha256(AppID+AppKey+ChannelID+UserID+Nonce+Timestamp) // Contoh: AppID = "abc",AppKey="abckey",ChannelID="abcChannel",UserID="abcUser",Nonce="",Timestamp=1699423634 token = sha256("abcabckeyabcChannelabcUser1699423634") = "3c9ee8d9f8734f0b7560ed8022a0590659113955819724fc9345ab8eedf84f31"Field
Description
AppID
ID dan kunci aplikasi ARTC yang dihasilkan secara otomatis setelah Anda membuat aplikasi di konsol. Untuk informasi selengkapnya, lihat Peroleh parameter pengembangan.
AppKey
ChannelID
ID saluran kustom. ID ini harus berupa string dan dapat berisi angka, huruf, tanda hubung (-), dan garis bawah (_), dengan panjang maksimum 64 karakter.
Semua peserta dalam sesi yang sama (streamer dan co-streamer) harus menggunakan
ChannelIDyang sama.UserId
ID pengguna kustom. ID ini harus berupa string dan dapat berisi angka, huruf, tanda hubung (-), dan garis bawah (_), dengan panjang maksimum 64 karakter.
Nonce
String nonce. Kami menyarankan agar bidang ini dikosongkan.
Timestamp
Stempel waktu kedaluwarsa token, dalam satuan detik. Kami menyarankan menyetelnya menjadi 24 jam. Untuk melakukannya, tambahkan 86400 (24 × 60 × 60) ke stempel waktu UNIX saat ini.
Hasilkan token di server: Kode berikut memberikan contoh cara menghasilkan token di server:
Java
package com.example; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; import java.util.Calendar; import org.json.JSONObject; public class App { public static String createBase64Token(String appid, String appkey, String channelid, String userid) { // Hitung stempel waktu kedaluwarsa (24 jam dari sekarang) Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.HOUR_OF_DAY, 24); long timestamp = calendar.getTimeInMillis() / 1000; // Gabungkan string String stringBuilder = appid + appkey + channelid + userid + timestamp; // Hitung hash SHA-256 String token = sha256(stringBuilder); // Buat objek JSON JSONObject base64tokenJson = new JSONObject(); base64tokenJson.put("appid", appid); base64tokenJson.put("channelid", channelid); base64tokenJson.put("userid", userid); base64tokenJson.put("nonce", ""); base64tokenJson.put("timestamp", timestamp); base64tokenJson.put("token", token); // Konversi objek JSON menjadi string dan enkode dalam Base64 String jsonStr = base64tokenJson.toString(); String base64token = Base64.getEncoder().encodeToString(jsonStr.getBytes(StandardCharsets.UTF_8)); return base64token; } private static String sha256(String input) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8)); StringBuilder hexString = new StringBuilder(); for (byte b : hash) { String hex = Integer.toHexString(0xff & b); if (hex.length() == 1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } public static void main(String[] args) { String appid = "your_appid"; String appkey = "your_appkey"; String channel_id = "your_channel_id"; String user_id = "your_user_id"; String base64token = createBase64Token(appid, appkey, channel_id, user_id); System.out.println("Base64 Token: " + base64token); } }Python
#!/usr/bin/env python # -*- coding: UTF-8 -*- import hashlib import datetime import time import base64 import json def create_base64_token(app_id, app_key, channel_id, user_id): expire = datetime.datetime.now() + datetime.timedelta(days=1) timestamp = int(time.mktime(expire.timetuple())) h = hashlib.sha256() h.update(str(app_id).encode('utf-8')) h.update(str(app_key).encode('utf-8')) h.update(str(channel_id).encode('utf-8')) h.update(str(user_id).encode('utf-8')) h.update(str(timestamp).encode('utf-8')) token = h.hexdigest() jsonToken = {'appid': str(app_id), 'channelid': str(channel_id), 'userid':str(user_id), 'nonce':'', 'timestamp':timestamp, 'token':str(token) } base64Token = base64.b64encode(json.dumps(jsonToken).encode()) return base64Token def main(): app_id = 'your_appid' app_key = 'your_appkey' channel_id = 'your_channel_id' user_id = 'your_user_id' base64Token = create_base64_token(app_id, app_key, channel_id, user_id) print(base64Token) if __name__ == '__main__': main()Go
package main import ( "crypto/sha256" "encoding/base64" "encoding/hex" "encoding/json" "fmt" "time" ) func createBase64Token(appid, appkey, channelID, userID string) (string, error) { // Hitung stempel waktu kedaluwarsa (24 jam dari sekarang) timestamp := time.Now().Add(24 * time.Hour).Unix() // Gabungkan string stringBuilder := appid + appkey + channelID + userID + fmt.Sprintf("%d", timestamp) // Hitung hash SHA-256 hasher := sha256.New() hasher.Write([]byte(stringBuilder)) token := hasher.Sum(nil) // Konversi hash menjadi string heksadesimal menggunakan encoding/hex tokenHex := hex.EncodeToString(token) // Buat objek JSON tokenJSON := map[string]interface{}{ "appid": appid, "channelid": channelID, "userid": userID, "nonce": "", "timestamp": timestamp, "token": tokenHex, } // Konversi objek JSON menjadi string dan enkode dalam Base64 jsonBytes, err := json.Marshal(tokenJSON) if err != nil { return "", err } base64Token := base64.StdEncoding.EncodeToString(jsonBytes) return base64Token, nil } func main() { appid := "your_appid" appkey := "your_appkey" channelID := "your_channel_id" userID := "your_user_id" token, err := createBase64Token(appid, appkey, channelID, userID) if err != nil { fmt.Println("Error creating token:", err) return } fmt.Println("Base64 Token:", token) }Sematkan token di klien: Jika Anda tidak dapat menghasilkan token ARTC di server aplikasi selama pengembangan, Anda dapat membuat token secara lokal di klien. Metode ini mengharuskan Anda menyematkan AppId dan AppKey ARTC di klien. Untuk menghasilkan token yang disematkan, buat objek JSON yang berisi lima parameter yang diperlukan untuk perhitungan: AppID, ChannelID, Nonce, UserID, dan Timestamp. Selanjutnya, enkode objek JSON tersebut dalam Base64 dan berikan string token Base64 yang dihasilkan ke aplikasi Anda. Aplikasi kemudian mengirimkan token Base64 tersebut ke SDK ARTC serta menyertakan bidang UserName untuk keperluan pemecahan masalah.
PentingMetode ini menyematkan informasi sensitif, seperti AppKey, di klien Anda. Oleh karena itu, metode ini hanya cocok untuk pengujian dan pengembangan. Jangan gunakan metode ini untuk rilis online. Melakukannya menciptakan risiko keamanan karena AppKey Anda dapat dicuri.