Hasilkan token otentikasi ARTC yang diperlukan oleh SDK AICallKit untuk memulai panggilan.
Cara kerja
SDK AICallKit memulai panggilan agen AI dari client. Server aplikasi Anda harus menghasilkan token otentikasi dan menyediakan titik akhir agar client dapat mengambilnya sebelum setiap panggilan.
Prosedur
Untuk menghasilkan token otentikasi ARTC, Anda memerlukan App ID dan AppKey aplikasi ARTC Anda.
-
Buka Konsol IMS dan klik agen AI Anda untuk membuka halaman detailnya.
Pada tab Basic Information, temukan bagian Workflow Configuration dan catat RTC App ID yang tercantum di bawah ARTC application.
-
Klik RTC App ID untuk membuka Konsol ApsaraVideo Live dan dapatkan App ID serta AppKey.
Pada halaman Application Management, klik nama aplikasi Anda, buka tab Basic Information, lalu salin App ID dan AppKey.
-
Gunakan App ID dan AppKey untuk menghasilkan token otentikasi ARTC. Token dihitung sebagai berikut.
// 1. Gabungkan bidang-bidang berikut: AppID+AppKey+ChannelID+UserID+Nonce+Timestamp // 2. Gunakan algoritma SHA-256 untuk meng-hash string yang digabungkan dan hasilkan 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"Parameter
Deskripsi
AppID
ID dan kunci aplikasi ARTC Anda. Keduanya dihasilkan saat Anda membuat aplikasi ARTC di Konsol ApsaraVideo Live. Untuk informasi selengkapnya, lihat Dapatkan parameter pengembangan aplikasi.
AppKey
ChannelId
ID channel, yang Anda tentukan sendiri. Nilainya harus berupa string dan tidak boleh berupa Long. ID channel dapat berisi angka, huruf kapital, huruf kecil, tanda hubung (-), dan garis bawah (_), serta panjangnya tidak boleh melebihi 64 karakter. Host dan tamu co-streaming harus menggunakan ID channel yang sama.
UserID
ID pengguna, yang Anda tentukan sendiri. Nilainya harus berupa string dan tidak boleh berupa Long. ID pengguna dapat berisi angka, huruf kapital, huruf kecil, tanda hubung (-), dan garis bawah (_), serta panjangnya tidak boleh melebihi 64 karakter.
nonce
Nonce dapat berupa string kosong. Kami menyarankan untuk membiarkannya kosong.
timestamp
Timestamp kedaluwarsa dalam satuan detik. Kami menyarankan mengatur masa berlaku selama 24 jam. Untuk mengatur masa berlaku 24 jam, tambahkan 86.400 (24 * 60 * 60) ke timestamp saat ini dalam satuan detik.
-
Pembuatan token di sisi server: Hasilkan token di server aplikasi Anda dengan salah satu contoh berikut.
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 timestamp 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 encode 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 timestamp 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 ke 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 encode 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) } -
Pembuatan token di sisi client: Selama pengembangan, Anda dapat menghasilkan token di sisi client, bukan di server. Buat objek JSON yang berisi token yang telah dihitung dan lima parameter: App ID, channel ID, nonce, user ID, dan timestamp. Encode objek JSON tersebut dalam Base64 dan berikan ke SDK ARTC. Sertakan bidang UserName untuk troubleshooting.
PentingMetode ini menyematkan AppKey dan informasi sensitif lainnya ke dalam aplikasi. Gunakan hanya untuk pengujian dan pengembangan. Jangan gunakan metode ini di lingkungan produksi. Menampilkan AppKey di sisi client menimbulkan risiko keamanan serius dan dapat menyebabkan pencurian kunci tersebut.
-