Sample code for 30+ languages & platforms
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

Tcl

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