Tcl
Tcl
VoiceBase -- Upload a Media File with a JSON Configuration
See more VoiceBase Examples
This example uploads a media file and also provides a configuration file.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes the Chilkat HTTP API to have been previously unlocked.
# See Global Unlock Sample for sample code.
# Insert your Bearer token here:
set accessToken "VOICEBASE_TOKEN"
set http [new_CkHttp]
set req [new_CkHttpRequest]
CkHttpRequest_put_HttpVerb $req "POST"
CkHttpRequest_put_Path $req "/v2-beta/media"
CkHttpRequest_put_ContentType $req "multipart/form-data"
# Add the access (bearer) token to the request, which is a header
# having the following format:
# Authorization: Bearer <userAccessToken>
set sbAuth [new_CkStringBuilder]
CkStringBuilder_Append $sbAuth "Bearer "
CkStringBuilder_Append $sbAuth $accessToken
CkHttpRequest_AddHeader $req "Authorization" [CkStringBuilder_getAsString $sbAuth]
set success [CkHttpRequest_AddFileForUpload2 $req "media" "qa_data/wav/msg_123_abc.wav" "audio/x-wav"]
if {$success == 0} then {
puts [CkHttpRequest_lastErrorText $req]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbAuth
exit
}
# This is the JSON of the configuration to be added as a parameter to the upload:
# (Obviously, if you want a callback, you would use a URL that goes to your own web server..)
# {
# "configuration":{
# "publish":{
# "callbacks":[
# {
# "url":"https://www.chilkatsoft.com/dss/update_vm_transcription.asp",
# "method":"POST",
# "include":[
# "transcripts",
# "keywords",
# "topics",
# "metadata"
# ]
# }
# ]
# },
# "keywords":{
# "groups":[]
# }
# }
# }
# This code produces the above JSON.
set json [new_CkJsonObject]
CkJsonObject_UpdateString $json "configuration.publish.callbacks[0].url" "https://www.chilkatsoft.com/dss/update_vm_transcription.asp"
CkJsonObject_UpdateString $json "configuration.publish.callbacks[0].method" "POST"
CkJsonObject_UpdateString $json "configuration.publish.callbacks[0].include[0]" "transcripts"
CkJsonObject_UpdateString $json "configuration.publish.callbacks[0].include[1]" "keywords"
CkJsonObject_UpdateString $json "configuration.publish.callbacks[0].include[2]" "topics"
CkJsonObject_UpdateString $json "configuration.publish.callbacks[0].include[3]" "metadata"
set jConfig [new_CkJsonObject]
CkJsonObject_ObjectOf2 $json "configuration" $jConfig
set jKeywords [new_CkJsonObject]
CkJsonObject_AppendObject2 $jConfig "keywords" $jKeywords
set jGroups [new_CkJsonArray]
CkJsonObject_AppendArray2 $jKeywords "groups" $jGroups
# Add the configuration JSON to the upload.
CkHttpRequest_AddParam $req "configuration" [CkJsonObject_emit $json]
# Do the upload..
set resp [new_CkHttpResponse]
set success [CkHttp_HttpSReq $http "apis.voicebase.com" 443 1 $req $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbAuth
delete_CkJsonObject $json
delete_CkJsonObject $jConfig
delete_CkJsonObject $jKeywords
delete_CkJsonArray $jGroups
delete_CkHttpResponse $resp
exit
}
# Examine the response status code and body.
puts "Response status code = [CkHttpResponse_get_StatusCode $resp]"
# The response should be JSON, even if an error.
CkJsonObject_Load $json [CkHttpResponse_bodyStr $resp]
CkJsonObject_put_EmitCompact $json 0
puts [CkJsonObject_emit $json]
# A successful response will have a status code = 200
if {[CkHttpResponse_get_StatusCode $resp] != 200} then {
puts "Failed."
} else {
puts "mediaId: [CkJsonObject_stringOf $json mediaId]"
puts "href: [CkJsonObject_stringOf $json _links.self.href]"
puts "status: [CkJsonObject_stringOf $json status]"
puts "Success."
}
# Here is an example of a successful response:
# {
# "_links": {
# "self": {
# "href": "/v2-beta/media/856a1e85-c847-4c3c-b7a4-6cf15cd51db4"
# }
# },
# "mediaId": "856a1e85-c847-4c3c-b7a4-6cf15cd51db4",
# "status": "accepted",
# "metadata": {}
#
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbAuth
delete_CkJsonObject $json
delete_CkJsonObject $jConfig
delete_CkJsonObject $jKeywords
delete_CkJsonArray $jGroups
delete_CkHttpResponse $resp