telnyx-video-ruby
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->
<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->
Telnyx Video - Ruby
Telnyx 视频 - Ruby
Installation
安装
bash
gem install telnyxbash
gem install telnyxSetup
配置
ruby
require "telnyx"
client = Telnyx::Client.new(
api_key: ENV["TELNYX_API_KEY"], # This is the default and can be omitted
)All examples below assume is already initialized as shown above.
clientruby
require "telnyx"
client = Telnyx::Client.new(
api_key: ENV["TELNYX\API_KEY"], # This is the
)
以下所有示例均假设已按上述方式完成初始化。
clientError Handling
错误处理
All API calls can fail with network errors, rate limits (429), validation errors (422),
or authentication errors (401). Always handle errors in production code:
ruby
begin
result = client.messages.send_(to: "+13125550001", from: "+13125550002", text: "Hello")
rescue Telnyx::Errors::APIConnectionError
puts "Network error — check connectivity and retry"
rescue Telnyx::Errors::RateLimitError
# 429: rate limited — wait and retry with exponential backoff
sleep(1) # Check Retry-After header for actual delay
rescue Telnyx::Errors::APIStatusError => e
puts "API error #{e.status}: #{e.message}"
if e.status == 422
puts "Validation error — check required fields and formats"
end
endCommon error codes: invalid API key, insufficient permissions,
resource not found, validation error (check field formats),
rate limited (retry with exponential backoff).
401403404422429所有API调用都可能因网络错误、速率限制(429)、校验错误(422)或认证错误(401)而失败,请在生产代码中始终做好错误处理:
ruby
begin
result = to: "+13125550001", from: "+13125550002", text: "Hello")
rescue Network error — check connectivity and retry
rescue 429: rate limited — wait and retry with sleep(1) # Check Retry-After API error #{e.status}: #{e. if e.status == 1
puts "Validation error — check required fields and "
end
end常见错误码: 无效API密钥, 权限不足, 422429` 触发速率限制(指数退避后重试)。
401403404 校验错误(检查字段格式),View a list of room compositions.
查询房间合成文件
GET /room_compositionsruby
page = client.room_compositions.list
puts(page)Returns: (date-time), (date-time), (string), (integer), (date-time), (enum: mp4), (uuid), (string), (string), (uuid), (uuid), (float), (date-time), (enum: completed, enqueued, processing), (date-time), (uuid), (object), (uri), (uri), (integer)
completed_atcreated_atdownload_urlduration_secsended_atformatidrecord_typeresolutionroom_idsession_idsize_mbstarted_atstatusupdated_atuser_idvideo_layoutwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsGET /room_compositionsruby
page =
puts(page)返回: (date-time), (date-time), (string), (integer), (date-time), (enum: mp4), (uuid), (string), (string), (uuid), (uuid), (float), (date-time), (enum: completed, enqueued, processing), (uuid), (object), (uri), (uri), (integer)
completed_atcreated_atdownload_urlduration_secsended_atformatidrecord_typeresolutionroom_idsession_idsize_mbstarted_atstatusidvideo_layoutwebhook_event_failover_urlwebhook_event_urltimeout_secsCreate a room composition.
创建房间合成文件
Asynchronously create a room composition.
POST /room_compositionsOptional: (string), (string), (uuid), (object), (uri), (uri), (integer)
formatresolutionsession_idvideo_layoutwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsruby
room_composition = client.room_compositions.create
puts(room_composition)Returns: (date-time), (date-time), (string), (integer), (date-time), (enum: mp4), (uuid), (string), (string), (uuid), (uuid), (float), (date-time), (enum: completed, enqueued, processing), (date-time), (uuid), (object), (uri), (uri), (integer)
completed_atcreated_atdownload_urlduration_secsended_atformatidrecord_typeresolutionroom_idsession_idsize_mbstarted_atstatusupdated_atuser_idvideo_layoutwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs异步创建房间合成文件。
POST /room_compositions可选参数: (string), (string), (uuid), (room_compositions.create
formatresolutionsession_idvideo_layoutputs(room_composition)
返回:`completed_at` (date-time), `created_at` (date-time), `download_url` (string), `duration_secs` (integer), `completed_at` (date-time), `format` (enum: mp4), `id` (uuid), `record_type` (retrieve("5219b3af-87c6-4c08-9b58-5a533d893e21")
View a room composition.
删除房间合成文件
GET /room_compositions/{room_composition_id}ruby
room_composition = client.room_compositions.retrieve("5219b3af-87c6-4c08-9b58-5a533d893e21")
puts(room_composition)Returns: (date-time), (date-time), (string), (integer), (date-time), (enum: mp4), (uuid), (string), (string), (uuid), (uuid), (float), (date-time), (enum: completed, enqueued, processing), (date-time), (uuid), (object), (uri), (uri), (integer)
completed_atcreated_atdownload_urlduration_secsended_atformatidrecord_typeresolutionroom_idsession_idsize_mbstarted_atstatusupdated_atuser_idvideo_layoutwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs同步删除房间合成文件。
DELETE /room_compositions/{room_composition_id}ruby
result = client.5219b3af-1c08-4c08-9b58-5a533d893e21")
puts(result)Delete a room composition.
查询房间参与者列表
Synchronously delete a room composition.
DELETE /room_compositions/{room_composition_id}ruby
result = client.room_compositions.delete("5219b3af-87c6-4c08-9b58-5a533d893e21")
puts(result)`GET /
ruby
page = list
puts(page)返回: (string), (uuid), (date-time), (date-time), (string), (uuid), (date-time)
contextidjoined_atleft_atrecord_typesession_idupdated_atView a list of room participants.
查看单个房间参与者
GET /room_participantsruby
page = client.room_participants.list
puts(page)Returns: (string), (uuid), (date-time), (date-time), (string), (uuid), (date-time)
contextidjoined_atleft_atrecord_typesession_idupdated_atGET /room_participants/{room_participant_id}ruby
room_participant = client."0ccc7b54-4df3-4bca-a65a-4da1ecc777f0")
puts(room_participant)返回: (string), (uuid), (date-time), (date-time), (string), `list
contextidjoined_atleft_atrecord_typeputs(page)
返回:`codec` (string), `completed_at` (date-time), `0ccc7b54-4df3-4bca-a65a-4da1ecc777f0")
puts(room_recording)返回: (string), (date-time), (date-time), (string), (integer), (date-time), (uuid), `participant
codeccompleted_atcreated_atdownload_urlduration_secsended_atidundefinedView a room participant.
批量删除多个房间录制文件
GET /room_participants/{room_participant_id}ruby
room_participant = client.room_participants.retrieve("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(room_participant)Returns: (string), (uuid), (date-time), (date-time), (string), (uuid), (date-time)
contextidjoined_atleft_atrecord_typesession_idupdated_atDELETE /room_recordingsruby
response = client.room_recordings.delete_bulk
puts(response)返回: (integer)
room_recordingsView a list of room recordings.
查看单个房间录制文件
GET /room_recordingsruby
page = client.room_recordings.list
puts(page)Returns: (string), (date-time), (date-time), (string), (integer), (date-time), (uuid), (uuid), (string), (uuid), (uuid), (float), (date-time), (enum: completed, processing), (enum: audio, video), (date-time)
codeccompleted_atcreated_atdownload_urlduration_secsended_atidparticipant_idrecord_typeroom_idsession_idsize_mbstarted_atstatustypeupdated_at`GET /
undefinedDelete several room recordings in a bulk.
删除单个房间录制文件
DELETE /room_recordingsruby
response = client.room_recordings.delete_bulk
puts(response)Returns: (integer)
room_recordings同步删除房间录制文件。
DELETE /room_recording_id}ruby
result = "0ccc7b54-4df3.list_0
puts(page)返回:`0ccc7b54-4df3-4bca-a65a-4da1ecc777f0")
puts(session)
结束房间会话
注意:该操作会踢出当前在房间内的所有。
POST /actions/endruby
response = "0ccc7b54-4df3-4bca-a65a-4da10ccc7b54-4df3-4bca-mute`
可选参数:`exclude` (array[string]), `participants` (object)View a room recording.
取消房间内参与者静音
GET /room_recordings/{room_recording_id}ruby
room_recording = client.room_recordings.retrieve("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(room_recording)Returns: (string), (date-time), (date-time), (string), (integer), (date-time), (uuid), (uuid), (string), (uuid), (uuid), (float), (date-time), (enum: completed, processing), (enum: audio, video), (date-time)
codeccompleted_atcreated_atdownload_urlduration_secsended_atidparticipant_idrecord_typeroom_idsession_idsize_mbstarted_atstatustypeupdated_atPOST /room_sessions/{room_session_id}/actions/unmute可选参数: (array[string]), 0ccc7b54-4df3-4bca-a65a-4da1ecc754-4df3-4bca-a65a-4da1ecc777f0")
excludeputs(page)
返回:`context` (string), `id` (uuid), `joined_at` (date-time), `left_at` (date-time), `record_type` (string), `session_id` (uuid), `updated_at` (date-time)Delete a room recording.
查询房间列表
Synchronously delete a Room Recording.
DELETE /room_recordings/{room_recording_id}ruby
result = client.room_recordings.delete("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(result)GET /roomsruby
page = client.rooms.list
puts(page)返回: (unique_name: "my-meeting", max_participants: 0ccc7b54-4df3-4bca-a65a-4da1ecc777f0")
active_session_idputs(room)
返回:`active_session_id` (uuid), `created_at` (date-time), `enable_recording` (boolean), `id` (uuid), `max_participants` (integer), `record_type` (string), `sessions` (array[object]), `unique_name` (string), `updated_at` (date-time), `webhook_event_failover_result = delete("0ccc7b54-4df3-4bca-a65a-4da1ecc777f0")
puts(result)View a list of room sessions.
生成加入房间的客户端令牌
GET /room_sessionsruby
page = client.rooms.sessions.list_0
puts(page)Returns: (boolean), (date-time), (date-time), (uuid), (array[object]), (string), (uuid), (date-time)
activecreated_atended_atidparticipantsrecord_typeroom_idupdated_at同步生成加入房间的Client Token,Client Token是加入Telnyx 的必要凭证。Client 会在后过期,同时会返回刷新令牌用于刷新Client Token,刷新令牌会在后过期。
token_ttlrefresh_token_ttlPOST /rooms/{room_id}/actions/generate_join_client_token可选参数: (integer), `token_0ccc7b54-4bca-a65a-4da1ecc777f0"
refresh_token "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.87c6-4c08-9b58-5a533d893e21"
)
refresh_token_ttlputs(response)
返回:`token` (string), `token_expires_at` (date-time)View a room session.
查询房间会话列表
GET /room_sessions/{room_session_id}ruby
session = client.rooms.sessions.retrieve("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(session)Returns: (boolean), (date-time), (date-time), (uuid), (array[object]), (string), (uuid), (date-time)
activecreated_atended_atidparticipantsrecord_typeroom_idupdated_atGET /rooms/{room_id}/sessionsruby
page = "0ccc7b54-4df3-4bca-a65a-4da1ecc777f0")
puts(page)返回: (boolean), (date-time), (date-time), (uuid), (array[object]), (string), (uuid), (date-time)",
activecreated_atended_atidparticipantsrecord_typeroom_idupdated_atEnd a room session.
—
Note: this will also kick all participants currently present in the room
POST /room_sessions/{room_session_id}/actions/endruby
response = client.rooms.sessions.actions.end_("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(response)Returns: (string)
result—
Kick participants from a room session.
—
POST /room_sessions/{room_session_id}/actions/kickOptional: (array[string]), (object)
excludeparticipantsruby
response = client.rooms.sessions.actions.kick("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(response)Returns: (string)
result—
Mute participants in room session.
—
POST /room_sessions/{room_session_id}/actions/muteOptional: (array[string]), (object)
excludeparticipantsruby
response = client.rooms.sessions.actions.mute("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(response)Returns: (string)
result—
Unmute participants in room session.
—
POST /room_sessions/{room_session_id}/actions/unmuteOptional: (array[string]), (object)
excludeparticipantsruby
response = client.rooms.sessions.actions.unmute("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(response)Returns: (string)
result—
View a list of room participants.
—
GET /room_sessions/{room_session_id}/participantsruby
page = client.rooms.sessions.retrieve_participants("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(page)Returns: (string), (uuid), (date-time), (date-time), (string), (uuid), (date-time)
contextidjoined_atleft_atrecord_typesession_idupdated_at—
View a list of rooms.
—
GET /roomsruby
page = client.rooms.list
puts(page)Returns: (uuid), (date-time), (boolean), (uuid), (integer), (string), (array[object]), (string), (date-time), (uri), (uri), (integer)
active_session_idcreated_atenable_recordingidmax_participantsrecord_typesessionsunique_nameupdated_atwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs—
Create a room.
—
Synchronously create a Room.
POST /roomsOptional: (boolean), (integer), (string), (uri), (uri), (integer)
enable_recordingmax_participantsunique_namewebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsruby
room = client.rooms.create(unique_name: "my-meeting-room", max_participants: 10)
puts(room)Returns: (uuid), (date-time), (boolean), (uuid), (integer), (string), (array[object]), (string), (date-time), (uri), (uri), (integer)
active_session_idcreated_atenable_recordingidmax_participantsrecord_typesessionsunique_nameupdated_atwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs—
View a room.
—
GET /rooms/{room_id}ruby
room = client.rooms.retrieve("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(room)Returns: (uuid), (date-time), (boolean), (uuid), (integer), (string), (array[object]), (string), (date-time), (uri), (uri), (integer)
active_session_idcreated_atenable_recordingidmax_participantsrecord_typesessionsunique_nameupdated_atwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs—
Update a room.
—
Synchronously update a Room.
PATCH /rooms/{room_id}Optional: (boolean), (integer), (string), (uri), (uri), (integer)
enable_recordingmax_participantsunique_namewebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secsruby
room = client.rooms.update("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(room)Returns: (uuid), (date-time), (boolean), (uuid), (integer), (string), (array[object]), (string), (date-time), (uri), (uri), (integer)
active_session_idcreated_atenable_recordingidmax_participantsrecord_typesessionsunique_nameupdated_atwebhook_event_failover_urlwebhook_event_urlwebhook_timeout_secs—
Delete a room.
—
Synchronously delete a Room. Participants from that room will be kicked out, they won't be able to join that room anymore, and you won't be charged anymore for that room.
DELETE /rooms/{room_id}ruby
result = client.rooms.delete("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(result)—
Create Client Token to join a room.
—
Synchronously create an Client Token to join a Room. Client Token is necessary to join a Telnyx Room. Client Token will expire after , a Refresh Token is also provided to refresh a Client Token, the Refresh Token expires after .
token_ttl_secsrefresh_token_ttl_secsPOST /rooms/{room_id}/actions/generate_join_client_tokenOptional: (integer), (integer)
refresh_token_ttl_secstoken_ttl_secsruby
response = client.rooms.actions.generate_join_client_token("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(response)Returns: (string), (date-time), (string), (date-time)
refresh_tokenrefresh_token_expires_attokentoken_expires_at—
Refresh Client Token to join a room.
—
Synchronously refresh an Client Token to join a Room. Client Token is necessary to join a Telnyx Room. Client Token will expire after .
token_ttl_secsPOST /rooms/{room_id}/actions/refresh_client_tokenrefresh_tokenOptional: (integer)
token_ttl_secsruby
response = client.rooms.actions.refresh_client_token(
"0ccc7b54-4df3-4bca-a65a-3da1ecc777f0",
refresh_token: "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0ZWxueXhfdGVsZXBob255IiwiZXhwIjoxNTkwMDEwMTQzLCJpYXQiOjE1ODc1OTA5NDMsImlzcyI6InRlbG55eF90ZWxlcGhvbnkiLCJqdGkiOiJiOGM3NDgzNy1kODllLTRhNjUtOWNmMi0zNGM3YTZmYTYwYzgiLCJuYmYiOjE1ODc1OTA5NDIsInN1YiI6IjVjN2FjN2QwLWRiNjUtNGYxMS05OGUxLWVlYzBkMWQ1YzZhZSIsInRlbF90b2tlbiI6InJqX1pra1pVT1pNeFpPZk9tTHBFVUIzc2lVN3U2UmpaRmVNOXMtZ2JfeENSNTZXRktGQUppTXlGMlQ2Q0JSbWxoX1N5MGlfbGZ5VDlBSThzRWlmOE1USUlzenl6U2xfYURuRzQ4YU81MHlhSEd1UlNZYlViU1ltOVdJaVEwZz09IiwidHlwIjoiYWNjZXNzIn0.gNEwzTow5MLLPLQENytca7pUN79PmPj6FyqZWW06ZeEmesxYpwKh0xRtA0TzLh6CDYIRHrI8seofOO0YFGDhpQ"
)
puts(response)Returns: (string), (date-time)
tokentoken_expires_at—
View a list of room sessions.
—
GET /rooms/{room_id}/sessionsruby
page = client.rooms.sessions.list_1("0ccc7b54-4df3-4bca-a65a-3da1ecc777f0")
puts(page)Returns: (boolean), (date-time), (date-time), (uuid), (array[object]), (string), (uuid), (date-time)
activecreated_atended_atidparticipantsrecord_typeroom_idupdated_at—