falaai-api 1.21.48 → 1.21.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +237 -339
- data/docs/AnalysisApi.md +33 -37
- data/docs/AudioEvent.md +5 -5
- data/docs/AudioInputMeta.md +5 -5
- data/docs/CreateEmailAlertRequest.md +3 -3
- data/docs/CreateWebhookRequest.md +4 -4
- data/docs/DiagnosticAudioEvent.md +5 -5
- data/docs/DiagnosticCategoricalAnalysis.md +3 -3
- data/docs/DiagnosticParticipant.md +22 -0
- data/docs/DiagnosticRequest.md +10 -4
- data/docs/DiagnosticResponse.md +4 -4
- data/docs/DiagnosticTextAnalysis.md +1 -1
- data/docs/DiagnosticUsage.md +3 -3
- data/docs/EmailAlertsApi.md +18 -18
- data/docs/HealthApi.md +3 -13
- data/docs/HealthResponse.md +6 -6
- data/docs/Participant.md +2 -2
- data/docs/ParticipantDiagnostic.md +5 -5
- data/docs/{AuditoriaRiscoAnalysisV2.md → RiskAuditAnalysisV2.md} +2 -2
- data/docs/{AuditoriaRiscoAppliedActionV2.md → RiskAuditAppliedActionV2.md} +2 -2
- data/docs/{AuditoriaRiscoAudioEventModelV2.md → RiskAuditAudioEventModelV2.md} +2 -2
- data/docs/{AuditoriaRiscoAuditDecisionsV2.md → RiskAuditAuditDecisionsV2.md} +2 -2
- data/docs/{AuditoriaRiscoConversationScoresV2.md → RiskAuditConversationScoresV2.md} +2 -2
- data/docs/{AuditoriaRiscoDetectionItemV2.md → RiskAuditDetectionItemV2.md} +2 -2
- data/docs/RiskAuditDetectionsV2.md +26 -0
- data/docs/{AuditoriaRiscoIndexerV2.md → RiskAuditIndexerV2.md} +2 -2
- data/docs/{AuditoriaRiscoMetaV2.md → RiskAuditMetaV2.md} +4 -4
- data/docs/{AuditoriaRiscoParticipantV2.md → RiskAuditParticipantV2.md} +2 -2
- data/docs/{AuditoriaRiscoParticipantsV2.md → RiskAuditParticipantsV2.md} +3 -3
- data/docs/{AuditoriaRiscoRequest.md → RiskAuditRequest.md} +13 -13
- data/docs/{AuditoriaRiscoScoresV2.md → RiskAuditScoresV2.md} +3 -3
- data/docs/{AuditoriaRiscoScoringExplanationV2.md → RiskAuditScoringExplanationV2.md} +2 -2
- data/docs/{AuditoriaRiscoSummaryV2.md → RiskAuditSummaryV2.md} +2 -2
- data/docs/{AuditoriaRiscoTimelineV2.md → RiskAuditTimelineV2.md} +2 -2
- data/docs/{AuditoriaRiscoUsageV2.md → RiskAuditUsageV2.md} +2 -2
- data/docs/RiskAuditV2.md +46 -0
- data/docs/RiskAuditV2Response.md +18 -0
- data/docs/{AuditoriaRiscoVerdictV2.md → RiskAuditVerdictV2.md} +3 -3
- data/docs/SpeechApi.md +1 -3
- data/docs/TranscriptionResponse.md +13 -14
- data/docs/TranscriptionUsage.md +3 -3
- data/docs/UpdateWebhookRequest.md +5 -5
- data/docs/UsageApi.md +1 -1
- data/docs/VersionApi.md +2 -7
- data/docs/VersionResponse.md +3 -3
- data/docs/WebhooksApi.md +22 -22
- data/docs/WhatsappApi.md +93 -0
- data/docs/WhatsappConversation.md +32 -0
- data/docs/WhatsappConversationsResponse.md +28 -0
- data/docs/WhatsappMeta.md +48 -0
- data/docs/WhatsappSpeaker.md +20 -0
- data/docs/WhatsappUsage.md +24 -0
- data/docs/index.html +761 -0
- data/docs/llms.txt +18 -0
- data/docs/robots.txt +4 -0
- data/docs/sitemap.xml +8 -0
- data/lib/falaai-api/api/analysis_api.rb +38 -42
- data/lib/falaai-api/api/email_alerts_api.rb +10 -10
- data/lib/falaai-api/api/health_api.rb +4 -4
- data/lib/falaai-api/api/speech_api.rb +2 -4
- data/lib/falaai-api/api/usage_api.rb +2 -2
- data/lib/falaai-api/api/version_api.rb +3 -3
- data/lib/falaai-api/api/webhooks_api.rb +18 -18
- data/lib/falaai-api/api/whatsapp_api.rb +129 -0
- data/lib/falaai-api/api_client.rb +2 -2
- data/lib/falaai-api/api_error.rb +2 -2
- data/lib/falaai-api/api_model_base.rb +2 -2
- data/lib/falaai-api/configuration.rb +6 -6
- data/lib/falaai-api/models/audio_event.rb +2 -2
- data/lib/falaai-api/models/audio_input_meta.rb +2 -2
- data/lib/falaai-api/models/create_email_alert_request.rb +2 -2
- data/lib/falaai-api/models/create_webhook_request.rb +2 -2
- data/lib/falaai-api/models/diagnostic_analysis_map.rb +2 -2
- data/lib/falaai-api/models/diagnostic_audio_event.rb +2 -2
- data/lib/falaai-api/models/diagnostic_categorical_analysis.rb +2 -2
- data/lib/falaai-api/models/diagnostic_participant.rb +226 -0
- data/lib/falaai-api/models/diagnostic_request.rb +91 -6
- data/lib/falaai-api/models/diagnostic_response.rb +2 -2
- data/lib/falaai-api/models/diagnostic_text_analysis.rb +2 -2
- data/lib/falaai-api/models/diagnostic_usage.rb +2 -2
- data/lib/falaai-api/models/email_alert_item.rb +2 -2
- data/lib/falaai-api/models/email_alert_list_response.rb +2 -2
- data/lib/falaai-api/models/email_alert_message_response.rb +2 -2
- data/lib/falaai-api/models/email_event.rb +2 -2
- data/lib/falaai-api/models/health_response.rb +2 -2
- data/lib/falaai-api/models/http_validation_error.rb +2 -2
- data/lib/falaai-api/models/location_inner.rb +2 -2
- data/lib/falaai-api/models/message_response.rb +2 -2
- data/lib/falaai-api/models/participant.rb +2 -2
- data/lib/falaai-api/models/participant_diagnostic.rb +2 -2
- data/lib/falaai-api/models/{auditoria_risco_analysis_v2.rb → risk_audit_analysis_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_applied_action_v2.rb → risk_audit_applied_action_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_audio_event_model_v2.rb → risk_audit_audio_event_model_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_audit_decisions_v2.rb → risk_audit_audit_decisions_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_conversation_scores_v2.rb → risk_audit_conversation_scores_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_detection_item_v2.rb → risk_audit_detection_item_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_detections_v2.rb → risk_audit_detections_v2.rb} +8 -8
- data/lib/falaai-api/models/{auditoria_risco_indexer_v2.rb → risk_audit_indexer_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_meta_v2.rb → risk_audit_meta_v2.rb} +7 -7
- data/lib/falaai-api/models/{auditoria_risco_participant_v2.rb → risk_audit_participant_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_participants_v2.rb → risk_audit_participants_v2.rb} +6 -6
- data/lib/falaai-api/models/{auditoria_risco_request.rb → risk_audit_request.rb} +16 -25
- data/lib/falaai-api/models/{auditoria_risco_scores_v2.rb → risk_audit_scores_v2.rb} +6 -6
- data/lib/falaai-api/models/{auditoria_risco_scoring_explanation_v2.rb → risk_audit_scoring_explanation_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_summary_v2.rb → risk_audit_summary_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_timeline_v2.rb → risk_audit_timeline_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_usage_v2.rb → risk_audit_usage_v2.rb} +5 -5
- data/lib/falaai-api/models/{auditoria_risco_v2.rb → risk_audit_v2.rb} +35 -35
- data/lib/falaai-api/models/{auditoria_risco_v2_response.rb → risk_audit_v2_response.rb} +7 -7
- data/lib/falaai-api/models/{auditoria_risco_verdict_v2.rb → risk_audit_verdict_v2.rb} +6 -6
- data/lib/falaai-api/models/transcription_response.rb +2 -2
- data/lib/falaai-api/models/transcription_usage.rb +2 -2
- data/lib/falaai-api/models/update_email_alert_request.rb +2 -2
- data/lib/falaai-api/models/update_webhook_request.rb +2 -2
- data/lib/falaai-api/models/usage_by_key_item.rb +2 -2
- data/lib/falaai-api/models/usage_log_item.rb +2 -2
- data/lib/falaai-api/models/usage_log_response.rb +2 -2
- data/lib/falaai-api/models/validation_error.rb +2 -2
- data/lib/falaai-api/models/version_response.rb +2 -2
- data/lib/falaai-api/models/webhook_event.rb +2 -2
- data/lib/falaai-api/models/webhook_item.rb +2 -2
- data/lib/falaai-api/models/webhook_list_response.rb +2 -2
- data/lib/falaai-api/models/whatsapp_conversation.rb +356 -0
- data/lib/falaai-api/models/whatsapp_conversations_response.rb +285 -0
- data/lib/falaai-api/models/whatsapp_meta.rb +570 -0
- data/lib/falaai-api/models/whatsapp_speaker.rb +192 -0
- data/lib/falaai-api/models/whatsapp_usage.rb +246 -0
- data/lib/falaai-api/version.rb +3 -3
- data/lib/falaai-api.rb +29 -22
- metadata +60 -42
- data/docs/AuditoriaRiscoDetectionsV2.md +0 -26
- data/docs/AuditoriaRiscoV2.md +0 -46
- data/docs/AuditoriaRiscoV2Response.md +0 -18
data/docs/WhatsappApi.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# FalaAI::WhatsappApi
|
|
2
|
+
|
|
3
|
+
All URIs are relative to *https://api01-falaai.action.tec.br*
|
|
4
|
+
|
|
5
|
+
| Method | HTTP request | Description |
|
|
6
|
+
| ------ | ------------ | ----------- |
|
|
7
|
+
| [**extract_conversations_v1_whatsapp_extract_conversations_post**](WhatsappApi.md#extract_conversations_v1_whatsapp_extract_conversations_post) | **POST** /v1/whatsapp/extractConversations | Extract and segment WhatsApp conversations from an export |
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## extract_conversations_v1_whatsapp_extract_conversations_post
|
|
11
|
+
|
|
12
|
+
> <WhatsappConversationsResponse> extract_conversations_v1_whatsapp_extract_conversations_post(file, start, _end, timezone, date_format, opts)
|
|
13
|
+
|
|
14
|
+
Extract and segment WhatsApp conversations from an export
|
|
15
|
+
|
|
16
|
+
### Examples
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
require 'time'
|
|
20
|
+
require 'falaai-api'
|
|
21
|
+
# setup authorization
|
|
22
|
+
FalaAI.configure do |config|
|
|
23
|
+
# Configure Bearer authorization (fai_xxx): ApiKeyAuth
|
|
24
|
+
config.access_token = 'YOUR_BEARER_TOKEN'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
api_instance = FalaAI::WhatsappApi.new
|
|
28
|
+
file = File.new('/path/to/some/file') # File |
|
|
29
|
+
start = 'start_example' # String |
|
|
30
|
+
_end = '_end_example' # String |
|
|
31
|
+
timezone = 'timezone_example' # String |
|
|
32
|
+
date_format = 'date_format_example' # String |
|
|
33
|
+
opts = {
|
|
34
|
+
gap_minutes: 8.14, # Float |
|
|
35
|
+
min_messages: 56, # Integer |
|
|
36
|
+
chars_per_minute: 8.14, # Float |
|
|
37
|
+
client_reference_id: 'client_reference_id_example' # String |
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
begin
|
|
41
|
+
# Extract and segment WhatsApp conversations from an export
|
|
42
|
+
result = api_instance.extract_conversations_v1_whatsapp_extract_conversations_post(file, start, _end, timezone, date_format, opts)
|
|
43
|
+
p result
|
|
44
|
+
rescue FalaAI::ApiError => e
|
|
45
|
+
puts "Error when calling WhatsappApi->extract_conversations_v1_whatsapp_extract_conversations_post: #{e}"
|
|
46
|
+
end
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
#### Using the extract_conversations_v1_whatsapp_extract_conversations_post_with_http_info variant
|
|
50
|
+
|
|
51
|
+
This returns an Array which contains the response data, status code and headers.
|
|
52
|
+
|
|
53
|
+
> <Array(<WhatsappConversationsResponse>, Integer, Hash)> extract_conversations_v1_whatsapp_extract_conversations_post_with_http_info(file, start, _end, timezone, date_format, opts)
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
begin
|
|
57
|
+
# Extract and segment WhatsApp conversations from an export
|
|
58
|
+
data, status_code, headers = api_instance.extract_conversations_v1_whatsapp_extract_conversations_post_with_http_info(file, start, _end, timezone, date_format, opts)
|
|
59
|
+
p status_code # => 2xx
|
|
60
|
+
p headers # => { ... }
|
|
61
|
+
p data # => <WhatsappConversationsResponse>
|
|
62
|
+
rescue FalaAI::ApiError => e
|
|
63
|
+
puts "Error when calling WhatsappApi->extract_conversations_v1_whatsapp_extract_conversations_post_with_http_info: #{e}"
|
|
64
|
+
end
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Parameters
|
|
68
|
+
|
|
69
|
+
| Name | Type | Description | Notes |
|
|
70
|
+
| ---- | ---- | ----------- | ----- |
|
|
71
|
+
| **file** | **File** | | |
|
|
72
|
+
| **start** | **String** | | |
|
|
73
|
+
| **_end** | **String** | | |
|
|
74
|
+
| **timezone** | **String** | | |
|
|
75
|
+
| **date_format** | **String** | | |
|
|
76
|
+
| **gap_minutes** | **Float** | | [optional][default to 720] |
|
|
77
|
+
| **min_messages** | **Integer** | | [optional][default to 2] |
|
|
78
|
+
| **chars_per_minute** | **Float** | | [optional][default to 800] |
|
|
79
|
+
| **client_reference_id** | **String** | | [optional] |
|
|
80
|
+
|
|
81
|
+
### Return type
|
|
82
|
+
|
|
83
|
+
[**WhatsappConversationsResponse**](WhatsappConversationsResponse.md)
|
|
84
|
+
|
|
85
|
+
### Authorization
|
|
86
|
+
|
|
87
|
+
[ApiKeyAuth](../README.md#ApiKeyAuth)
|
|
88
|
+
|
|
89
|
+
### HTTP request headers
|
|
90
|
+
|
|
91
|
+
- **Content-Type**: multipart/form-data
|
|
92
|
+
- **Accept**: application/json
|
|
93
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# FalaAI::WhatsappConversation
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **conversation_id** | **String** | Conversation identifier in the batch | |
|
|
8
|
+
| **first_at** | **String** | Real start (wall-clock, ISO) | |
|
|
9
|
+
| **last_at** | **String** | Real end (wall-clock, ISO) | |
|
|
10
|
+
| **duration_seconds** | **Float** | (last - first) + last turn duration | |
|
|
11
|
+
| **speakers** | [**Array<WhatsappSpeaker>**](WhatsappSpeaker.md) | Speakers of THIS conversation (dynamic) | |
|
|
12
|
+
| **dialog** | **String** | Lines 'Speaker N: [HH:MM:SS.mmm - HH:MM:SS.mmm] text' (real offset) | |
|
|
13
|
+
| **message_count** | **Integer** | Number of messages | |
|
|
14
|
+
| **characters** | **Integer** | Total characters of the conversation | |
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
require 'falaai-api'
|
|
20
|
+
|
|
21
|
+
instance = FalaAI::WhatsappConversation.new(
|
|
22
|
+
conversation_id: null,
|
|
23
|
+
first_at: null,
|
|
24
|
+
last_at: null,
|
|
25
|
+
duration_seconds: null,
|
|
26
|
+
speakers: null,
|
|
27
|
+
dialog: null,
|
|
28
|
+
message_count: null,
|
|
29
|
+
characters: null
|
|
30
|
+
)
|
|
31
|
+
```
|
|
32
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# FalaAI::WhatsappConversationsResponse
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **id** | **String** | Unique identifier. Prefix 'wc-' + UUID | |
|
|
8
|
+
| **object** | **String** | Object type. Always 'conversations' | |
|
|
9
|
+
| **usage** | [**WhatsappUsage**](WhatsappUsage.md) | Usage and processing information | |
|
|
10
|
+
| **conversations** | [**Array<WhatsappConversation>**](WhatsappConversation.md) | Segmented conversations | |
|
|
11
|
+
| **client_reference_id** | **String** | Client-supplied ID echoed verbatim (if provided) | [optional] |
|
|
12
|
+
| **meta** | [**WhatsappMeta**](WhatsappMeta.md) | Segmentation parameters and counts | |
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
```ruby
|
|
17
|
+
require 'falaai-api'
|
|
18
|
+
|
|
19
|
+
instance = FalaAI::WhatsappConversationsResponse.new(
|
|
20
|
+
id: null,
|
|
21
|
+
object: null,
|
|
22
|
+
usage: null,
|
|
23
|
+
conversations: null,
|
|
24
|
+
client_reference_id: null,
|
|
25
|
+
meta: null
|
|
26
|
+
)
|
|
27
|
+
```
|
|
28
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# FalaAI::WhatsappMeta
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **file** | **String** | Uploaded file name | |
|
|
8
|
+
| **chat_txt** | **String** | chat.txt entry name inside the export | |
|
|
9
|
+
| **format** | **String** | Detected format: Android | iOS | |
|
|
10
|
+
| **date_format** | **String** | Date order used | |
|
|
11
|
+
| **timezone** | **String** | Timezone informed | |
|
|
12
|
+
| **start** | **String** | Window start (ISO) | |
|
|
13
|
+
| **_end** | **String** | Window end (ISO) | |
|
|
14
|
+
| **gap_minutes** | **Float** | Gap used to split conversations | |
|
|
15
|
+
| **min_messages** | **Integer** | Minimum messages per conversation | |
|
|
16
|
+
| **chars_per_minute** | **Float** | Chars per minute used to estimate duration | |
|
|
17
|
+
| **turns** | **Integer** | Total parsed turns | |
|
|
18
|
+
| **system_lines** | **Integer** | System lines ignored | |
|
|
19
|
+
| **conversations_total** | **Integer** | Conversations before window filter | |
|
|
20
|
+
| **conversations_in_window** | **Integer** | Conversations overlapping the window | |
|
|
21
|
+
| **monologues_dropped** | **Integer** | Single-speaker conversations dropped | |
|
|
22
|
+
| **conversations_selected** | **Integer** | Final conversations returned | |
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
require 'falaai-api'
|
|
28
|
+
|
|
29
|
+
instance = FalaAI::WhatsappMeta.new(
|
|
30
|
+
file: null,
|
|
31
|
+
chat_txt: null,
|
|
32
|
+
format: null,
|
|
33
|
+
date_format: null,
|
|
34
|
+
timezone: null,
|
|
35
|
+
start: null,
|
|
36
|
+
_end: null,
|
|
37
|
+
gap_minutes: null,
|
|
38
|
+
min_messages: null,
|
|
39
|
+
chars_per_minute: null,
|
|
40
|
+
turns: null,
|
|
41
|
+
system_lines: null,
|
|
42
|
+
conversations_total: null,
|
|
43
|
+
conversations_in_window: null,
|
|
44
|
+
monologues_dropped: null,
|
|
45
|
+
conversations_selected: null
|
|
46
|
+
)
|
|
47
|
+
```
|
|
48
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# FalaAI::WhatsappSpeaker
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **label** | **String** | Speaker label (e.g. 'Speaker 1') | |
|
|
8
|
+
| **name** | **String** | Participant name from the export | |
|
|
9
|
+
|
|
10
|
+
## Example
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
require 'falaai-api'
|
|
14
|
+
|
|
15
|
+
instance = FalaAI::WhatsappSpeaker.new(
|
|
16
|
+
label: null,
|
|
17
|
+
name: null
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# FalaAI::WhatsappUsage
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **conversations** | **Integer** | Number of conversations returned | |
|
|
8
|
+
| **characters** | **Integer** | Total characters across conversations | |
|
|
9
|
+
| **credits_consumed** | **Integer** | Credits consumed (1 per conversation) | |
|
|
10
|
+
| **processing_ms** | **Integer** | Total processing time in milliseconds | |
|
|
11
|
+
|
|
12
|
+
## Example
|
|
13
|
+
|
|
14
|
+
```ruby
|
|
15
|
+
require 'falaai-api'
|
|
16
|
+
|
|
17
|
+
instance = FalaAI::WhatsappUsage.new(
|
|
18
|
+
conversations: null,
|
|
19
|
+
characters: null,
|
|
20
|
+
credits_consumed: null,
|
|
21
|
+
processing_ms: null
|
|
22
|
+
)
|
|
23
|
+
```
|
|
24
|
+
|