-
Notifications
You must be signed in to change notification settings - Fork 8
/
openapi.json
6180 lines (6180 loc) · 213 KB
/
openapi.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"openapi": "3.0.0",
"info": {
"title": "FreeClimb API",
"version": "1.0.0",
"description": "FreeClimb is a cloud-based application programming interface (API) that puts the power of the Vail platform in your hands. FreeClimb simplifies the process of creating applications that can use a full range of telephony features without requiring specialized or on-site telephony equipment. Using the FreeClimb REST API to write applications is easy! You have the option to use the language of your choice or hit the API directly. Your application can execute a command by issuing a RESTful request to the FreeClimb API. The base URL to send HTTP requests to the FreeClimb REST API is: /apiserver. FreeClimb authenticates and processes your request.",
"contact": {
"name": "FreeClimb API Support",
"url": "https://www.freeclimb.com/support/",
"email": "[email protected]"
}
},
"servers": [
{
"url": "https://www.freeclimb.com/apiserver"
}
],
"components": {
"parameters": {
"AccountId": {
"name": "accountId",
"in": "path",
"description": "ID of the account",
"required": true,
"x-account-id": true,
"schema": {
"type": "string"
}
},
"Capabilities.Voice": {
"name": "capabilities.voice",
"in": "query",
"description": "",
"required": false,
"schema": {
"type": "boolean"
}
},
"Capabilities.Sms": {
"name": "capabilities.sms",
"in": "query",
"description": "",
"required": false,
"schema": {
"type": "boolean"
}
},
"Capabilities.TollFree": {
"name": "capabilities.tollFree",
"in": "query",
"description": "",
"required": false,
"schema": {
"type": "boolean"
}
},
"Capabilities.TenDLC": {
"name": "capabilities.tenDLC",
"in": "query",
"description": "",
"required": false,
"schema": {
"type": "boolean"
}
},
"Capabilities.ShortCode": {
"name": "capabilities.shortCode",
"in": "query",
"description": "",
"required": false,
"schema": {
"type": "boolean"
}
}
},
"securitySchemes": {
"fc": {
"scheme": "basic",
"type": "http",
"description": "HTTP requests to the FreeClimb REST API are protected with HTTP Basic authentication --- you use your FreeClimb-generated account ID and API key to authenticate each HTTP request. You can view your credentials under the API Keys section in your Dashboard."
}
},
"schemas": {
"AccountStatus": {
"type": "string",
"enum": ["closed", "suspended", "active"],
"x-enum-varnames": ["CLOSED", "SUSPENDED", "ACTIVE"],
"x-enum": true,
"description": "The status of this account. It is one of: active, suspended, or closed.",
"nullable": true
},
"AccountType": {
"type": "string",
"description": "The type of this account. It is one of: trial or full.",
"enum": ["trial", "full"],
"x-enum": true,
"x-enum-varnames": ["TRIAL", "FULL"],
"nullable": true
},
"AnsweredBy": {
"type": "string",
"nullable": true,
"enum": ["human", "machine"],
"x-enum-varnames": ["HUMAN", "MACHINE"],
"x-enum": true,
"description": "If this Call was initiated with answering machine detection, either `human` or `machine`. Empty otherwise."
},
"CallDirection": {
"type": "string",
"nullable": true,
"enum": ["inbound", "outboundAPI", "outboundDial"],
"x-enum-varnames": ["INBOUND", "OUTBOUND_API", "OUTBOUND_DIAL"],
"x-enum": true,
"description": "Direction of the Call. `inbound` for Calls into FreeClimb, `outboundAPI` for Calls initiated via the REST API, `outboundDial` for Calls initiated by the `OutDial` PerCL command."
},
"CallStatus": {
"type": "string",
"nullable": true,
"enum": [
"queued",
"ringing",
"inProgress",
"canceled",
"completed",
"failed",
"busy",
"noAnswer"
],
"x-enum-varnames": [
"QUEUED",
"RINGING",
"IN_PROGRESS",
"CANCELED",
"COMPLETED",
"FAILED",
"BUSY",
"NO_ANSWER"
],
"x-enum": true,
"description": "* `queued` – Call is ready and waiting in line before going out. * `ringing` – Call is currently ringing. * `inProgress` – Call was answered and is currently in progress. * `canceled` – Call was hung up while it was queued or ringing. * `completed` – Call was answered and has ended normally. * `busy` – Caller received a busy signal. * `failed` – Call could not be completed as dialed, most likely because the phone number was non-existent. * `noAnswer` – Call ended without being answered."
},
"ConferenceStatus": {
"type": "string",
"nullable": true,
"enum": ["empty", "populated", "inProgress", "terminated"],
"x-enum-varnames": ["EMPTY", "POPULATED", "IN_PROGRESS", "TERMINATED"],
"x-enum": true,
"description": "The status of the Conference. One of: creating, empty, populated, inProgress, or terminated."
},
"GetSpeechReason": {
"type": "string",
"enum": [
"error",
"hangup",
"digit",
"noInput",
"noMatch",
"recognition"
],
"x-enum-varnames": [
"ERROR",
"HANGUP",
"DIGIT",
"NO_INPUT",
"NO_MATCH",
"RECOGNITION"
],
"x-enum": true
},
"GrammarFileBuiltIn": {
"type": "string",
"enum": [
"ALPHNUM6",
"ANY_DIG",
"DIG1",
"DIG2",
"DIG3",
"DIG4",
"DIG5",
"DIG6",
"DIG7",
"DIG8",
"DIG9",
"DIG10",
"DIG11",
"UP_TO_20_DIGIT_SEQUENCE",
"VERSAY_YESNO"
],
"x-enum-varnames": [
"ALPHNUM6",
"ANY_DIG",
"DIG1",
"DIG2",
"DIG3",
"DIG4",
"DIG5",
"DIG6",
"DIG7",
"DIG8",
"DIG9",
"DIG10",
"DIG11",
"UP_TO_20_DIGIT_SEQUENCE",
"VERSAY_YESNO"
],
"x-enum": true
},
"GrammarType": {
"type": "string",
"enum": ["URL", "BUILTIN"],
"nullable": true,
"x-enum-varnames": ["URL", "BUILT_IN"],
"x-enum": true,
"description": "The grammar file type to use for speech recognition. A value of 'URL' indicates the grammarFile attribute specifies a URL that points to the grammar file. A value of `BUILTIN` indicates the grammarFile attribute specifies the name of one of the platform built-in grammar files."
},
"IfMachine": {
"type": "string",
"enum": ["redirect", "hangup"],
"x-enum-varnames": ["REDIRECT", "HANGUP"],
"x-enum": true,
"description": "Specifies how FreeClimb should handle this OutDial if an answering machine answers the Call. Valid values: `redirect` invokes the ifMachineUrl for instructions. `hangup` hangs up the Call. The ifMachineUrl will not be invoked."
},
"Language": {
"type": "string",
"enum": [
"ca-ES",
"da-DK",
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"es-ES",
"es-MX",
"fi-FI",
"fr-CA",
"fr-FR",
"it-IT",
"ja-JP",
"ko-KR",
"nb-NO",
"nl-NL",
"pl-PL",
"pt-BR",
"pt-PT",
"ru-RU",
"sv-SE",
"zh-CN",
"zh-HK",
"zh-TW"
],
"x-enum-varnames": [
"CATALAN",
"DANISH",
"GERMAN",
"ENGLISH_AU",
"ENGLISH_CA",
"ENGLISH_UK",
"ENGLISH_IN",
"ENGLISH_US",
"ENGLISH_ES",
"ENGLISH_MX",
"FINNISH",
"FRENCH_CA",
"FRENCH_FR",
"ITALIAN",
"JAPANESE",
"KOREAN",
"NORWEGIAN",
"DUTCH",
"POLISH",
"PORTUGESE_BR",
"PORTUGESE_PT",
"RUSSIAN",
"SWEDISH",
"CHINESE_CN",
"CHINESE_HK",
"CHINESE_TW"
],
"x-enum": true
},
"LogLevel": {
"type": "string",
"enum": ["info", "warning", "error"],
"nullable": true,
"x-enum-varnames": ["INFO", "WARNING", "ERROR"],
"x-enum": true,
"description": "Level of the log. Possible values are info, warning, and error."
},
"MachineType": {
"type": "string",
"enum": ["answeringMachine", "faxMachine"],
"x-enum-varnames": ["ANSWERING_MACHINE", "FAX_MACHINE"],
"x-enum": true
},
"MessageDirection": {
"type": "string",
"enum": ["inbound", "outbound"],
"x-enum-varnames": ["INBOUND", "OUTBOUND"],
"x-enum": true
},
"MessageStatus": {
"type": "string",
"nullable": true,
"description": "Indicates the state of the message through the message lifecycle including: new, queued, rejected, sending, sent, failed, received, undelivered, expired, deleted, and unknown",
"enum": [
"new",
"queued",
"rejected",
"sending",
"sent",
"failed",
"received",
"undelivered",
"expired",
"deleted",
"unknown"
],
"x-enum-varnames": [
"NEW",
"QUEUED",
"REJECTED",
"SENDING",
"SENT",
"FAILED",
"RECEIVED",
"UNDELIVERED",
"EXPIRED",
"DELETED",
"UNKNOWN"
],
"x-enum": true
},
"PlayBeep": {
"type": "string",
"nullable": true,
"enum": ["always", "never", "entryOnly", "exitOnly"],
"x-enum-varnames": ["ALWAYS", "NEVER", "ENTRY_ONLY", "EXIT_ONLY"],
"x-enum": true,
"description": "Indicates whether to play a beep when a Participant enters or leaves the Conference. either `always`, `never`, `entryOnly`, or `exitOnly`. Leaving this unset will make conference default to `always` ",
"default": "always",
"x-enum-default-attr": "ALWAYS"
},
"QueueResultStatus": {
"type": "string",
"enum": ["queueFull", "dequeued", "hangup", "systemError"],
"x-enum-varnames": ["QUEUE_FULL", "DEQUEUED", "HANGUP", "SYSTEM_ERROR"],
"x-enum": true
},
"RecordUtteranceTermReason": {
"type": "string",
"enum": ["finishKey", "timeout", "hangup", "maxLength"],
"x-enum-varnames": ["FINISH_KEY", "TIMEOUT", "HANGUP", "MAX_LENGTH"],
"x-enum": true
},
"RequestType": {
"type": "string",
"enum": [
"inboundCall",
"record",
"getDigits",
"getSpeech",
"redirect",
"pause",
"outDialStart",
"outDialConnect",
"outDialApiConnect",
"machineDetected",
"dequeue",
"queueWait",
"addToQueueNotification",
"removeFromQueueNotification",
"callStatus",
"createConference",
"conferenceStatus",
"leaveConference",
"addToConferenceNotification",
"conferenceRecordingStatus",
"conferenceCallControl",
"messageDelivery",
"messageStatus"
],
"x-enum-varnames": [
"INBOUND_CALL",
"RECORD",
"GET_DIGITS",
"GET_SPEECH",
"REDIRECT",
"PAUSE",
"OUT_DIAL_START",
"OUT_DIAL_CONNECT",
"OUT_DIAL_API_CONNECT",
"MACHINE_DETECTED",
"DEQUEUE",
"QUEUE_WAIT",
"ADD_TO_QUEUE_NOTIFICATION",
"REMOVE_FROM_QUEUE_NOTIFICATION",
"CALL_STATUS",
"CREATE_CONFERENCE",
"CONFERENCE_STATUS",
"LEAVE_CONFERENCE",
"ADD_TO_CONFERENCE_NOTIFICATION",
"CONFERENCE_RECORDING_STATUS",
"CONFERENCE_CALL_CONTROL",
"MESSAGE_DELIVERY",
"MESSAGE_STATUS"
],
"x-enum": true
},
"UpdateCallRequestStatus": {
"type": "string",
"enum": ["canceled", "completed"],
"x-enum-varnames": ["CANCELED", "COMPLETED"],
"x-enum": true,
"description": "Either `canceled` or `completed`. Specifying `canceled` attempts to hang up calls that are queued without affecting calls already in progress. Specifying `completed` attempts to hang up a call already in progress."
},
"UpdateConferenceRequestStatus": {
"type": "string",
"enum": ["empty", "terminated"],
"x-enum-varnames": ["EMPTY", "TERMINATED"],
"x-enum": true,
"description": "New status of the conference. Valid values: `empty` or `terminated`. For more information, see **Status Parameter** below.**"
},
"PerclScript": {
"type": "object",
"description": "A PerCL script to be returned to the FreeClimb servers in FreeClimb applications",
"x-percl-script": true,
"properties": {
"commands": {
"type": "array",
"description": "A JSON array of PerCL commands",
"x-is-list": true,
"items": {
"$ref": "#/components/schemas/PerclCommand"
}
}
}
},
"PerclCommand": {
"type": "object",
"description": "An individual command used in a PerCLScript.",
"x-percl-command-base": true,
"discriminator": {
"propertyName": "command",
"mapping": {
"AddToConference": "#/components/schemas/AddToConference",
"CreateConference": "#/components/schemas/CreateConference",
"Dequeue": "#/components/schemas/Dequeue",
"Enqueue": "#/components/schemas/Enqueue",
"GetDigits": "#/components/schemas/GetDigits",
"GetSpeech": "#/components/schemas/GetSpeech",
"Hangup": "#/components/schemas/Hangup",
"OutDial": "#/components/schemas/OutDial",
"Pause": "#/components/schemas/Pause",
"Park": "#/components/schemas/Park",
"Play": "#/components/schemas/Play",
"PlayEarlyMedia": "#/components/schemas/PlayEarlyMedia",
"RecordUtterance": "#/components/schemas/RecordUtterance",
"Redirect": "#/components/schemas/Redirect",
"Reject": "#/components/schemas/Reject",
"RemoveFromConference": "#/components/schemas/RemoveFromConference",
"Say": "#/components/schemas/Say",
"SendDigits": "#/components/schemas/SendDigits",
"SetListen": "#/components/schemas/SetListen",
"SetTalk": "#/components/schemas/SetTalk",
"Sms": "#/components/schemas/Sms",
"StartRecordCall": "#/components/schemas/StartRecordCall",
"TerminateConference": "#/components/schemas/TerminateConference",
"TranscribeUtterance": "#/components/schemas/TranscribeUtterance",
"Unpark": "#/components/schemas/Unpark"
}
},
"properties": {
"command": {
"x-is-no-property": true,
"type": "string",
"description": "Name of PerCL Command (this is automatically derived from mapping configuration and should not be manually supplied in any arguments)"
}
}
},
"AddToConference": {
"description": "The `AddToConference` command adds a Participant to a Conference. Two Call legs can be bridged together by creating a Conference and adding both Call legs to it via `AddToConference`.",
"x-percl-command": true,
"x-ref-properties": [
"false",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"false",
"\"TEST_STRING\"",
"false",
"false"
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"type": "object",
"required": ["conferenceId"],
"properties": {
"allowCallControl": {
"description": "If `true`, Call control will be enabled for this Participant's Call leg.",
"type": "boolean"
},
"callControlSequence": {
"description": "Defines a sequence of digits that, when entered by this caller, invokes the `callControlUrl`. Only digits plus '*', and '#' may be used.",
"type": "string"
},
"callControlUrl": {
"description": "URL to be invoked when this Participant enters the digit sequence defined in the `callControlSequence` attribute.",
"type": "string"
},
"conferenceId": {
"description": "ID of the Conference to which to add the Participant (Call leg). Conference must exist or an error will result.",
"type": "string"
},
"leaveConferenceUrl": {
"description": "URL to be invoked when the Participant leaves the Conference. ",
"type": "string"
},
"listen": {
"description": "If `true`, the Participant joins the Conference with listen privileges. This may be modified later via the REST API or `SetListen` PerCL command.",
"type": "boolean"
},
"notificationUrl": {
"description": "When the Participant enters the Conference, this URL will be invoked using an HTTP POST request with the standard request parameters.",
"type": "string"
},
"startConfOnEnter": {
"description": "Flag that indicates whether a Conference starts upon entry of this particular Participant. This is usually set to `true` for moderators and `false` for all other Participants.",
"type": "boolean"
},
"talk": {
"description": "If `true`, the Participant joins the Conference with talk privileges. This may be modified later via the REST API or `SetTalk` PerCL command. ",
"type": "boolean"
}
}
}
]
},
"CreateConference": {
"description": "The `CreateConference` command does exactly what its name implies — it creates an unpopulated Conference (one without any Participants). Once created, a Conference remains in FreeClimb until explicitly terminated by a customer. Once a Conference has been terminated, it can no longer be used.",
"x-percl-command": true,
"x-ref-properties": [
"\"TEST_STRING\"",
"false",
"PlayBeep.ALWAYS",
"false",
"\"https://a.com\"",
"\"https://a.com\"",
"\"TEST_STRING\""
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"type": "object",
"required": ["actionUrl"],
"properties": {
"actionUrl": {
"description": " This URL is invoked once the Conference is successfully created. Actions on the Conference, such as adding Participants, can be performed via the PerCL script returned in the response. ",
"type": "string",
"x-is-uri": true
},
"alias": {
"description": "Descriptive name for the Conference. ",
"type": "boolean"
},
"playBeep": {
"$ref": "#/components/schemas/PlayBeep"
},
"record": {
"description": "When set to `true`, the entire Conference is recorded. The `statusCallbackUrl` of the Conference will receive a `conferenceRecordingEnded` Webhook when the Conference transitions from the `inProgress` to empty state.",
"type": "boolean"
},
"statusCallbackUrl": {
"description": "This URL is invoked when the status of the Conference changes or when a recording of the Conference has become available.",
"type": "string"
},
"waitUrl": {
"description": "If specified, this URL provides the custom hold music for the Conference when it is in the populated state. This attribute is always fetched using HTTP GET and is fetched just once – when the Conference is created. The URL must be an audio file that is reachable and readable by FreeClimb.",
"type": "string"
}
}
}
]
},
"Dequeue": {
"description": "The `Dequeue` command transfers control of a Call that is in a Queue so that the waiting caller exits the Queue. Execution continues with the first command in the PerCL script returned by the `actionUrl` specified in the `Enqueue` command.",
"x-percl-command": true,
"x-no-properties": true,
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"type": "object"
}
]
},
"Enqueue": {
"description": "The `Enqueue` command adds the current Call to a call Queue. If the specified Queue does not exist, it is created and then the Call is added to it. The default maximum length of the queue is 100. This can be modified using the REST API.",
"x-percl-command": true,
"x-ref-properties": [
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"\"TEST_STRING\""
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand",
"x-is-uri": true
},
{
"type": "object",
"required": ["queueId", "waitUrl", "actionUrl"],
"properties": {
"actionUrl": {
"description": "A request is made to this URL when the Call leaves the Queue, which can occur if enqueue of the Call fails or when the call is dequeued via the `Dequeue` command, the REST API (POST to Queue Member resource), or the caller hangs up.",
"type": "string",
"x-is-uri": true
},
"notificationUrl": {
"description": "URL to be invoked when the call enters the queue. The request to the URL contains the standard request parameters.This is a notification only; any PerCL returned will be ignored.",
"type": "string",
"x-is-uri": true
},
"queueId": {
"description": "ID of the Queue to which to add the Call. If the Queue does not exist, it will be created. The ID must start with QU followed by 40 hex characters.",
"type": "string"
},
"waitUrl": {
"description": "A request is made to this URL when the Call leaves the Queue, which can occur if enqueue of the Call fails or when the call is dequeued via the `Dequeue` command, the REST API (POST to Queue Member resource), or the caller hangs up.",
"type": "string"
}
}
}
]
},
"GetDigits": {
"description": "The `GetDigits` command collects DTMF inputs from the caller. It is only supported only when there is a single party on the Call. `GetDigits` is a Terminal Command — any actions following it are never executed. When the Caller is done entering the digits, FreeClimb submits that data to the provided `actionUrl` using an HTTP POST request. Your server will be required to respond to the FreeClimb Webhook with PerCL to continue handling the call.",
"x-percl-command": true,
"x-ref-properties": [
"\"https://a.com\"",
"1",
"\"TEST_STRING\"",
"false",
"300",
"1",
"1",
"new List<PerclCommand>()",
"false",
"\"TEST_STRING\""
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand",
"x-is-uri": true
},
{
"type": "object",
"required": ["actionUrl"],
"properties": {
"actionUrl": {
"description": "When the Caller has finished entering digits, FreeClimb will make an HTTP POST request to this URL. A PerCL response is expected to continue handling the Call. Make sure to keep “http://“ in the URL.",
"type": "string",
"x-is-uri": true
},
"digitTimeoutMs": {
"description": " Maximum time in milliseconds that FreeClimb will wait for the Caller to press any digit after the last digit entered, before making a determination that a `timeout` has occurred and moving on to make the request to the actionUrl to submit the results of the `GetDigits` command. This timeout interval begins and resets after each digit entered.",
"type": "integer"
},
"finishOnKey": {
"description": "Digit that causes the input sequence to be deemed complete. This attribute defers to the `timeout` attribute – so, if a `timeout` occurs, then the command terminates regardless of the value of `finishOnKey`.",
"type": "string"
},
"flushBuffer": {
"description": "If set to true, the FreeClimb platform starts with an empty DTMF buffer to store the digits entered by the caller. If set to false, FreeClimb will append the user inputs to the end of the existing digits buffer and will return digits from the start of the digits buffer.",
"type": "boolean"
},
"initialTimeoutMs": {
"description": "Maximum time in milliseconds that FreeClimb will wait for the Caller to press the first digit before making a determination that a `timeout` has occurred and moving on to make the request to the `actionUrl` to submit the results of the `GetDigits` command. This timeout interval begins when all nested commands have been fully executed.",
"type": "integer"
},
"maxDigits": {
"description": "Maximum number of digits expected in the input. If the terminating digit is not entered and the caller has entered the maximum number of digits allowed, the `GetDigits` command terminates regardless of the value of `finishOnKey`.",
"type": "integer"
},
"minDigits": {
"description": "Minimum number of digits expected in the input. If specified, FreeClimb will return the collected digits only if the Caller has entered at least that many digits.",
"type": "integer"
},
"prompts": {
"description": "JSON array of PerCL commands to nest within the `GetDigits` command. The `Say`, `Play`, and `Pause` commands can be used. The nested actions are executed while FreeClimb is waiting for input from the Caller.",
"type": "array",
"x-is-list": true,
"items": {
"$ref": "#/components/schemas/PerclCommand"
}
},
"privacyMode": {
"description": "Parameter `privacyMode` will not log the `text` as required by PCI compliance.",
"type": "boolean"
}
}
}
]
},
"GetSpeech": {
"description": "The `GetSpeech` command enables the Caller to respond to the application using a supported language. Unlike DTMF entry, which implicitly restricts the user to using the available buttons on the phone key pad, speech input allows for flexible audio inputs based on grammar. FreeClimb supports grammars written using GRXML compatible with the Microsoft Speech Platform. `GetSpeech` is only supported on a single call leg. It is not supported when there are two or more call legs connected (as in within a Conference).",
"x-percl-command": true,
"x-ref-properties": [
"\"https://a.com\"",
"GrammarType.URL",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"false",
"new List<PerclCommand>()",
"1",
"1",
"1",
"1",
"1",
"1",
"false",
"\"TEST_STRING\""
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"type": "object",
"required": ["actionUrl", "grammarFile"],
"properties": {
"actionUrl": {
"description": "When the caller has finished speaking or the command has timed out, FreeClimb will make a POST request to this URL. A PerCL response is expected to continue handling the call.",
"type": "string",
"format": "uri",
"x-is-uri": true,
"x-is-url": true
},
"grammarType": {
"$ref": "#/components/schemas/GrammarType"
},
"grammarFile": {
"description": "The grammar file to use for speech recognition. If grammarType is set to URL, this attribute is specified as a download URL.",
"type": "string"
},
"grammarRule": {
"description": "The grammar rule within the specified grammar file to use for speech recognition. This attribute is optional if `grammarType` is `URL` and ignored if `grammarType` is `BUILTIN`.",
"type": "string"
},
"playBeep": {
"description": "Indicates whether a beep should be played just before speech recognition is initiated so that the speaker can start to speak.",
"type": "boolean"
},
"prompts": {
"description": "The JSON array of PerCL commands to nest within the `GetSpeech` command. The `Say`, `Play`, and `Pause` commands can be used. The nested actions are executed while FreeClimb is waiting for input from the caller. This allows for playing menu options to the caller and to prompt for the expected input. These commands stop executing when the caller begins to input speech.",
"type": "array",
"items": {
"$ref": "#/components/schemas/PerclCommand"
},
"x-is-list": true
},
"noInputTimeoutMs": {
"description": "When recognition is started and there is no speech detected for `noInputTimeoutMs` milliseconds, the recognizer will terminate the recognition operation.",
"type": "integer"
},
"recognitionTimeoutMs": {
"description": "When playback of prompts ends and there is no match for `recognitionTimeoutMs` milliseconds, the recognizer will terminate the recognition operation.",
"type": "integer"
},
"confidenceThreshold": {
"description": "When a recognition resource recognizes a spoken phrase, it associates a confidence level with that match. Parameter `confidenceThreshold` specifies what confidence level is considered a successful match. Values are between 0.0 and 1.0.",
"type": "number"
},
"sensitivityLevel": {
"description": "The speech recognizer supports a variable level of sound sensitivity. The sensitivityLevel attribute allows for filtering out background noise, so it is not mistaken for speech. Values are between 0.0 and 1.0 ",
"type": "number"
},
"speechCompleteTimeoutMs": {
"description": "Parameter `speechCompleteTimeoutMs` specifies the length of silence required following user speech before the speech recognizer finalizes a result. This timeout applies when the recognizer currently has a complete match against an active grammar. Reasonable speech complete timeout values are typically in the range of 0.3 seconds to 1.0 seconds.",
"type": "integer"
},
"speechIncompleteTimeoutMs": {
"description": "Parameter `speechIncompleteTimeoutMs` specifies the length of silence following user speech after which a recognizer finalizes a result. This timeout applies when the speech prior to the silence is an incomplete match of all active grammars. Timeout `speechIncompleteTimeoutMs` is usually longer than `speechCompleteTimeoutMs` to allow users to pause mid-utterance.",
"type": "integer"
},
"privacyMode": {
"description": "Parameter privacyMode will not log the `text` as required by PCI compliance.",
"type": "boolean"
}
}
}
]
},
"Hangup": {
"description": "The `Hangup` command terminates a Call. If `Hangup` is used as the first action in a PerCL response, it does not prevent FreeClimb from answering the Call and billing your account. See the `Reject` command to hang up at no charge.",
"x-percl-command": true,
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"type": "object",
"properties": {
"reason": {
"description": "The user defined reason for the hangup. In general, applications should use a set of enumerated values that are predefined to cover all exit points of the Call flows for the given application.",
"type": "string"
}
}
}
]
},
"OutDial": {
"description": "The OutDial command is used to call a phone number",
"x-percl-command": true,
"x-ref-properties": [
"\"https://a.com\"",
"\"https://a.com\"",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"IfMachine.REDIRECT",
"\"https://a.com\"",
"\"TEST_STRING\"",
"\"TEST_STRING\"",
"1",
"false",
"\"TEST_STRING\""
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand",
"x-is-uri": true
},
{
"required": [
"actionUrl",
"callConnectUrl",
"callingNumber",
"destination"
],
"type": "object",
"properties": {
"actionUrl": {
"description": "URL to which FreeClimb sends an HTTP POST request. ",
"type": "string",
"x-is-uri": true
},
"callConnectUrl": {
"description": "URL to which FreeClimb makes an HTTP POST request informing the result of the OutDial.",
"type": "string",
"x-is-uri": true
},
"callingNumber": {
"description": "he caller ID to show to the called party when FreeClimb calls. This can be one of the following: The To or From number provided in the first Webhook to your webserver. Any phone number you have purchased from FreeClimb.",
"type": "string"
},
"destination": {
"description": "E.164 representation of the phone number to Call. ",
"type": "string"
},
"ifMachine": {
"$ref": "#/components/schemas/IfMachine"
},
"ifMachineUrl": {
"description": "When the `ifMachine` flag is set to `redirect`, this attribute specifies a URL to which FreeClimb makes a POST request when an answering machine or a fax machine is detected. This URL is required if the `ifMachine` flag is set to `redirect`. Otherwise, it should not be included.",
"type": "string"
},
"sendDigits": {
"description": "DTMF tones to play to the outdialed Call. This is typically used to dial a number and then dial an extension.",
"type": "string"
},
"statusCallbackUrl": {
"description": "When the outdialed Call leg terminates, FreeClimb sends a `callStatus` Webhook to the `statusCallbackUrl`. This is a notification only; any PerCL command returned is ignored.",
"type": "string"
},
"timeout": {
"description": "Maximum time in seconds the `OutDial` command waits for the called party to answer the Call. When a timeout occurs, FreeClimb invokes the `callConnectUrl` Webhook to report that the out-dialed Call has ended with a status of `noAnswer`.",
"type": "integer"
},
"privacyMode": {
"description": "Parameter `privacyMode` will not log the `text` as required by PCI compliance.",
"type": "boolean"
}
}
}
]
},
"Park": {
"description": "The `Park` command allows a caller to be put on hold. You can provide hold music,messages,etc until ready to resume the call. Park is a terminal command. Actions performed on the Call while on hold are provided in a PerCL script in response to the waitUrl property. Actions performed on the Call after it has been unparked (resumed) will be provided in a PerCL script in response to the actionUrl provided. A Call can be resumed in two ways -- REST API invocation or the Unpark percl command. No actions can be nested within Park and Park cannot be nested in any other actions. ",
"x-percl-command": true,
"x-ref-properties": [
"\"https://a.com\"",
"\"https://a.com\"",
"\"TEST_STRING\"",
"\"TEST_STRING\""
],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand",
"x-is-uri": true
},
{
"type": "object",
"required": ["waitUrl", "actionUrl"],
"properties": {
"waitUrl": {
"description": "Specifies a URL pointing to a PerCL script containing actions to be executed while the caller is Parked. Once the script returned by the waitUrl runs out of commands to execute, FreeClimb will re-request the waitUrl and start over, essentially looping the script requests indefinitely.",
"type": "string",
"x-is-uri": true
},
"actionUrl": {
"description": "A request is made to this URL when the Call is resumed, which can occur if the Call is resumed via the Unpark command, the REST API (POST to Call resource), or the caller hangs up. The PerCL script returned in response to the actionUrl will be executed on the resumed call.",
"type": "string",
"x-is-uri": true
},
"notificationUrl": {
"description": "URL to be invoked when the Call is parked. The request to the URL contains the standard request parameters.",
"type": "string"
}
}
}
]
},
"Pause": {
"description": "The `Pause` command halts execution of the current PerCL script for a specified number of milliseconds. If `Pause` is the first command in a PerCL document, FreeClimb will wait for the specified time to elapse before picking up the call.",
"x-percl-command": true,
"x-ref-properties": ["1"],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"type": "object",
"required": ["length"],
"properties": {
"length": {
"description": "Length in milliseconds. FreeClimb will wait silently before continuing on.",
"type": "integer"
}
}
}
]
},
"Play": {
"description": "The `Play` command plays an audio file back to the caller. The audio file may be located at any location accessible via a URL. `Play` can exist as a stand-alone command or as a nested command. It does not allow barge-in unless nested within a `GetSpeech` command. The file will always be played to completion unless nested.",
"x-percl-command": true,
"x-ref-properties": ["\"TEST_STRING\"", "1", "false"],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"required": ["file"],
"type": "object",
"properties": {
"file": {
"description": "RL of the audio file to be played to the caller. The URL can be the `recordingUrl` generated from the `RecordUtterance` or `StartRecordCall` PerCL commands. ",
"type": "string"
},
"loop": {
"description": "Number of times the audio file is played. Specifying '0' causes the Play action to loop until the Call is hung up.",
"type": "integer"
},
"privacyMode": {
"description": "Parameter `privacyMode` will not log the `text` as required by PCI compliance.",
"type": "boolean"
}
}
}
]
},
"PlayEarlyMedia": {
"description": "`PlayEarlyMedia` is relevant only when present as the very first command in the PerCL script returned for an incoming Call. In such cases, the command is executed before FreeClimb attempts to connect the call. The audio file it uses can be stored in any location that is accessible via URL.",
"x-percl-command": true,
"x-ref-properties": ["\"TEST_STRING\""],
"allOf": [
{
"$ref": "#/components/schemas/PerclCommand"
},
{
"required": ["file"],
"type": "object",
"properties": {
"file": {
"description": "RL of the audio file to be played to the caller. The URL can be the `recordingUrl` generated from the `RecordUtterance` or `StartRecordCall` PerCL commands or any accessible URL. FreeClimb will respect Cache-Control headers for this file. Use these to limit repeated requests for unchanged audio. If no Cache-Control header is provided, the file will be cached for seven days by default.",
"type": "string"
}
}
}
]
},