Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sebagai bagian dari layanan PSTN audio, aplikasi SIP media memungkinkan Anda untuk mengatur tindakan yang dijalankan pada panggilan dengan menjalankan fungsi Lambda yang ditentukan pengguna berdasarkan peristiwa panggilan, seperti panggilan masuk atau digit. DTMF Sebuah UpdateSipMediaApplicationCallAPImemungkinkan Anda untuk memicu fungsi Lambda kapan saja saat panggilan aktif, menggantikan tindakan saat ini dengan tindakan baru yang dikembalikan oleh pemanggilan.
Alur kerja
Anda menggunakan UpdateSipMediaApplicationCallAPIdalam berbagai kasus, seperti menambahkan peserta ke rapat, mematikan dan melepas pengguna, memutuskan koneksi mereka, dan sebagainya. Kasus penggunaan berikut menjelaskan alur kerja yang khas.
Seorang pengguna menelepon dan mendengarkan musik saat Amazon SDK Chime mengatur rapat. Setelah penyiapan selesai, Amazon SDK Chime menghentikan audio dan memasukkan penelepon ke dalam rapat. Selanjutnya, asumsikan penggunaan sistem terpisahMyMeetingService
, yang mengelola rapat. Setiap panggilan masuk harus ditunda. Chime memberi tahu MyMeetingService tentang panggilan masuk, dan MyMeetingService kemudian membuat peserta untuk setiap panggilan, dan ketika siap untuk memulai rapat, itu memberi tahu aplikasi SIP media dan memberikan token untuk bergabung dengan rapat. MyMeetingService
Untuk menangani kasus ini, fungsi Lambda harus mengimplementasikan logika berikut.
-
Ketika panggilan masuk baru tiba, Lambda dipanggil dengan acara.
NEW_INBOUND_CALL
Lambda memanggilMyMeetingService
dan meneruskantransactionId
yang mengidentifikasi panggilan saat ini, dan mengembalikan tindakan.PlayAudio
-
Ketika
MyMeetingService
siap untuk menambahkan penelepon ke rapat, layanan memanggil UpdateSipMediaApplicationCallAPIdan melewati panggilantransactionId
danJoinToken
sebagai bagian dari argumennya. APIPanggilan ini memicu fungsi Lambda lagi, sekarang denganCALL_UPDATE_REQUESTED
acara tersebut. MyMeetingService LolosJoinToken
ke fungsi Lambda sebagai bagian dari acara, dan token digunakan untuk mengembalikanJoinChimeMeeting
tindakan ke aplikasi SIP media, yang menggangguPlayAudio
tindakan dan menghubungkan penelepon ke rapat.
catatan
Sebuah UpdateSipMediaApplicationCallAPImengembalikan HTTP 202 (Diterima). Aplikasi SIP media mengonfirmasi bahwa panggilan sedang berlangsung dan dapat diperbarui, sehingga mencoba untuk memanggil fungsi Lambda. Pemanggilan dilakukan secara asinkron, sehingga respons yang berhasil dari API tidak menjamin bahwa fungsi Lambda telah dimulai atau diselesaikan.
Contoh berikut menunjukkan sintaks permintaan.
{
"SipMediaApplicationId": "string
",
"TransactionId": "string
",
"Arguments": {
"string": "string
"
}
}
Parameter permintaan
-
SipMediaApplicationId
— ID aplikasi SIP media yang menangani panggilan. -
TransactionId
— ID transaksi panggilan. Untuk panggilan masuk,TransactionId
dapat diperoleh dariNEW_INCOMING_CALL
acara yang diteruskan ke fungsi Lambda pada pemanggilan pertamanya. Untuk panggilan keluar,TransactionId
dikembalikan sebagai tanggapan CreateSipMediaApplicationCall. -
Argumen - Argumen khusus yang tersedia untuk fungsi Lambda sebagai bagian dari data
CallUpdateRequest
tindakan. Dapat berisi 0 hingga 20 pasangan kunci-nilai.
Contoh berikut menunjukkan permintaan khas.
aws chime update-sip-media-application-call --sip-media-application-id feb37a7e-2b66-49fb-b2dd-30f4780dc36d --transaction-id 1322a4e7-c106-4e70-aaaf-a8fa4c77c0cb --arguments '{"JoinToken": "
abc123
"}'
Sintaks respons
{ "SipMediaApplicationCall": { "TransactionId": "
string
" } }
Elemen respons
-
TransactionId— ID transaksi panggilan, ID yang sama dengan permintaan.
Contoh berikut menunjukkan acara CALL_UPDATE_REQUESTED
pemanggilan.
{ "SchemaVersion": "1.0", "Sequence":
2
, "InvocationEventType": "CALL_UPDATE_REQUESTED", "ActionData": { "Type": "CallUpdateRequest", "Parameters": { "Arguments": { "string
": "string
" } } }, "CallDetails": { ... } }
Elemen acara
-
SchemaVersion— Versi JSON skema (1.0)
-
Urutan - Nomor urut acara dalam panggilan
-
InvocationEventType— Jenis acara doa Lambda, dalam hal ini,
CALL_UPDATE_REQUESTED
-
ActionData— Data yang terkait dengan
CallUpdateRequest
tindakan.-
Jenis — Jenis tindakan, dalam hal ini,
CallUpdateRequest
-
Parameter — Parameter tindakan
-
Argumen — Argumen diteruskan sebagai bagian dari
UpdateSipMediaApplicationCall
API permintaan
-
-
-
CallDetails— Informasi tentang status panggilan saat ini
Memahami tindakan yang dapat terputus dan tidak dapat diinterupsi
Saat fungsi Lambda menampilkan daftar tindakan baru saat tindakan yang ada berjalan, semua tindakan yang mengikuti tindakan yang sedang berlangsung akan diganti dengan tindakan baru. Dalam beberapa kasus, fungsi Lambda mengganggu tindakan yang sedang berlangsung untuk segera menjalankan tindakan baru.
Diagram berikut menunjukkan contoh khas. Teks di bawah digram menjelaskan logika.
Jika Action 2 dapat diinterupsi, kami menghentikannya dan menjalankan Action 1 baru sebagai gantinya.
Jika Action 2 tidak terputus, itu selesai sebelum Action 1 baru dimulai.
Dalam kedua kasus, Action 3 tidak dijalankan.
Jika sesuatu mengganggu suatu tindakan, fungsi Lambda dipanggil dengan suatu peristiwa. ACTION_INTERRUPTED
Acara ini hanya digunakan untuk tujuan informasi. Aplikasi SIP media mengabaikan semua tindakan yang dikembalikan oleh pemanggilan ini.
Jenis tindakan yang dapat diinterupsi:
-
PlayAudio
-
RecordAudio
-
Pause
Contoh fungsi Lambda
Contoh ini menunjukkan fungsi Lambda khas yang memutar file audio, meneruskan token gabungan, dan memperbarui panggilan.
const MMS = require('my-meeting-service'); const myMeetingServiceClient = new MMS.Client(); exports.handler = async (event) => { console.log('Request: ' + JSON.stringify(event)); const playAudio = () => { return { Type: 'PlayAudio', Parameters: { ParticipantTag: 'LEG-A', AudioSource: { Type: 'S3', BucketName: '
chime-meetings-audio-files-bucket-name
', Key: 'welcome.wav
' } } } } const joinChimeMeeting = (joinToken) => { return { Type: 'JoinChimeMeeting', Parameters: { JoinToken:joinToken
} } } const response = (...actions) => { const r = { SchemaVersion: '1.0', Actions: actions }; console.log('Response: ' + JSON.stringify(r)); return r; }; switch (event.InvocationEventType) { case 'NEW_INBOUND_CALL': myMeetingServiceClient.addPendingCall(event.CallDetails.TransactionId); return response(playAudio()); case 'CALL_UPDATE_REQUESTED': const joinToken = event.ActionData.Parameters.Arguments['JoinToken
'] return response(joinChimeMeeting(joinToken)); default: return response(); } }