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.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +237 -339
  3. data/docs/AnalysisApi.md +33 -37
  4. data/docs/AudioEvent.md +5 -5
  5. data/docs/AudioInputMeta.md +5 -5
  6. data/docs/CreateEmailAlertRequest.md +3 -3
  7. data/docs/CreateWebhookRequest.md +4 -4
  8. data/docs/DiagnosticAudioEvent.md +5 -5
  9. data/docs/DiagnosticCategoricalAnalysis.md +3 -3
  10. data/docs/DiagnosticParticipant.md +22 -0
  11. data/docs/DiagnosticRequest.md +10 -4
  12. data/docs/DiagnosticResponse.md +4 -4
  13. data/docs/DiagnosticTextAnalysis.md +1 -1
  14. data/docs/DiagnosticUsage.md +3 -3
  15. data/docs/EmailAlertsApi.md +18 -18
  16. data/docs/HealthApi.md +3 -13
  17. data/docs/HealthResponse.md +6 -6
  18. data/docs/Participant.md +2 -2
  19. data/docs/ParticipantDiagnostic.md +5 -5
  20. data/docs/{AuditoriaRiscoAnalysisV2.md → RiskAuditAnalysisV2.md} +2 -2
  21. data/docs/{AuditoriaRiscoAppliedActionV2.md → RiskAuditAppliedActionV2.md} +2 -2
  22. data/docs/{AuditoriaRiscoAudioEventModelV2.md → RiskAuditAudioEventModelV2.md} +2 -2
  23. data/docs/{AuditoriaRiscoAuditDecisionsV2.md → RiskAuditAuditDecisionsV2.md} +2 -2
  24. data/docs/{AuditoriaRiscoConversationScoresV2.md → RiskAuditConversationScoresV2.md} +2 -2
  25. data/docs/{AuditoriaRiscoDetectionItemV2.md → RiskAuditDetectionItemV2.md} +2 -2
  26. data/docs/RiskAuditDetectionsV2.md +26 -0
  27. data/docs/{AuditoriaRiscoIndexerV2.md → RiskAuditIndexerV2.md} +2 -2
  28. data/docs/{AuditoriaRiscoMetaV2.md → RiskAuditMetaV2.md} +4 -4
  29. data/docs/{AuditoriaRiscoParticipantV2.md → RiskAuditParticipantV2.md} +2 -2
  30. data/docs/{AuditoriaRiscoParticipantsV2.md → RiskAuditParticipantsV2.md} +3 -3
  31. data/docs/{AuditoriaRiscoRequest.md → RiskAuditRequest.md} +13 -13
  32. data/docs/{AuditoriaRiscoScoresV2.md → RiskAuditScoresV2.md} +3 -3
  33. data/docs/{AuditoriaRiscoScoringExplanationV2.md → RiskAuditScoringExplanationV2.md} +2 -2
  34. data/docs/{AuditoriaRiscoSummaryV2.md → RiskAuditSummaryV2.md} +2 -2
  35. data/docs/{AuditoriaRiscoTimelineV2.md → RiskAuditTimelineV2.md} +2 -2
  36. data/docs/{AuditoriaRiscoUsageV2.md → RiskAuditUsageV2.md} +2 -2
  37. data/docs/RiskAuditV2.md +46 -0
  38. data/docs/RiskAuditV2Response.md +18 -0
  39. data/docs/{AuditoriaRiscoVerdictV2.md → RiskAuditVerdictV2.md} +3 -3
  40. data/docs/SpeechApi.md +1 -3
  41. data/docs/TranscriptionResponse.md +13 -14
  42. data/docs/TranscriptionUsage.md +3 -3
  43. data/docs/UpdateWebhookRequest.md +5 -5
  44. data/docs/UsageApi.md +1 -1
  45. data/docs/VersionApi.md +2 -7
  46. data/docs/VersionResponse.md +3 -3
  47. data/docs/WebhooksApi.md +22 -22
  48. data/docs/WhatsappApi.md +93 -0
  49. data/docs/WhatsappConversation.md +32 -0
  50. data/docs/WhatsappConversationsResponse.md +28 -0
  51. data/docs/WhatsappMeta.md +48 -0
  52. data/docs/WhatsappSpeaker.md +20 -0
  53. data/docs/WhatsappUsage.md +24 -0
  54. data/docs/index.html +761 -0
  55. data/docs/llms.txt +18 -0
  56. data/docs/robots.txt +4 -0
  57. data/docs/sitemap.xml +8 -0
  58. data/lib/falaai-api/api/analysis_api.rb +38 -42
  59. data/lib/falaai-api/api/email_alerts_api.rb +10 -10
  60. data/lib/falaai-api/api/health_api.rb +4 -4
  61. data/lib/falaai-api/api/speech_api.rb +2 -4
  62. data/lib/falaai-api/api/usage_api.rb +2 -2
  63. data/lib/falaai-api/api/version_api.rb +3 -3
  64. data/lib/falaai-api/api/webhooks_api.rb +18 -18
  65. data/lib/falaai-api/api/whatsapp_api.rb +129 -0
  66. data/lib/falaai-api/api_client.rb +2 -2
  67. data/lib/falaai-api/api_error.rb +2 -2
  68. data/lib/falaai-api/api_model_base.rb +2 -2
  69. data/lib/falaai-api/configuration.rb +6 -6
  70. data/lib/falaai-api/models/audio_event.rb +2 -2
  71. data/lib/falaai-api/models/audio_input_meta.rb +2 -2
  72. data/lib/falaai-api/models/create_email_alert_request.rb +2 -2
  73. data/lib/falaai-api/models/create_webhook_request.rb +2 -2
  74. data/lib/falaai-api/models/diagnostic_analysis_map.rb +2 -2
  75. data/lib/falaai-api/models/diagnostic_audio_event.rb +2 -2
  76. data/lib/falaai-api/models/diagnostic_categorical_analysis.rb +2 -2
  77. data/lib/falaai-api/models/diagnostic_participant.rb +226 -0
  78. data/lib/falaai-api/models/diagnostic_request.rb +91 -6
  79. data/lib/falaai-api/models/diagnostic_response.rb +2 -2
  80. data/lib/falaai-api/models/diagnostic_text_analysis.rb +2 -2
  81. data/lib/falaai-api/models/diagnostic_usage.rb +2 -2
  82. data/lib/falaai-api/models/email_alert_item.rb +2 -2
  83. data/lib/falaai-api/models/email_alert_list_response.rb +2 -2
  84. data/lib/falaai-api/models/email_alert_message_response.rb +2 -2
  85. data/lib/falaai-api/models/email_event.rb +2 -2
  86. data/lib/falaai-api/models/health_response.rb +2 -2
  87. data/lib/falaai-api/models/http_validation_error.rb +2 -2
  88. data/lib/falaai-api/models/location_inner.rb +2 -2
  89. data/lib/falaai-api/models/message_response.rb +2 -2
  90. data/lib/falaai-api/models/participant.rb +2 -2
  91. data/lib/falaai-api/models/participant_diagnostic.rb +2 -2
  92. data/lib/falaai-api/models/{auditoria_risco_analysis_v2.rb → risk_audit_analysis_v2.rb} +5 -5
  93. data/lib/falaai-api/models/{auditoria_risco_applied_action_v2.rb → risk_audit_applied_action_v2.rb} +5 -5
  94. data/lib/falaai-api/models/{auditoria_risco_audio_event_model_v2.rb → risk_audit_audio_event_model_v2.rb} +5 -5
  95. data/lib/falaai-api/models/{auditoria_risco_audit_decisions_v2.rb → risk_audit_audit_decisions_v2.rb} +5 -5
  96. data/lib/falaai-api/models/{auditoria_risco_conversation_scores_v2.rb → risk_audit_conversation_scores_v2.rb} +5 -5
  97. data/lib/falaai-api/models/{auditoria_risco_detection_item_v2.rb → risk_audit_detection_item_v2.rb} +5 -5
  98. data/lib/falaai-api/models/{auditoria_risco_detections_v2.rb → risk_audit_detections_v2.rb} +8 -8
  99. data/lib/falaai-api/models/{auditoria_risco_indexer_v2.rb → risk_audit_indexer_v2.rb} +5 -5
  100. data/lib/falaai-api/models/{auditoria_risco_meta_v2.rb → risk_audit_meta_v2.rb} +7 -7
  101. data/lib/falaai-api/models/{auditoria_risco_participant_v2.rb → risk_audit_participant_v2.rb} +5 -5
  102. data/lib/falaai-api/models/{auditoria_risco_participants_v2.rb → risk_audit_participants_v2.rb} +6 -6
  103. data/lib/falaai-api/models/{auditoria_risco_request.rb → risk_audit_request.rb} +16 -25
  104. data/lib/falaai-api/models/{auditoria_risco_scores_v2.rb → risk_audit_scores_v2.rb} +6 -6
  105. data/lib/falaai-api/models/{auditoria_risco_scoring_explanation_v2.rb → risk_audit_scoring_explanation_v2.rb} +5 -5
  106. data/lib/falaai-api/models/{auditoria_risco_summary_v2.rb → risk_audit_summary_v2.rb} +5 -5
  107. data/lib/falaai-api/models/{auditoria_risco_timeline_v2.rb → risk_audit_timeline_v2.rb} +5 -5
  108. data/lib/falaai-api/models/{auditoria_risco_usage_v2.rb → risk_audit_usage_v2.rb} +5 -5
  109. data/lib/falaai-api/models/{auditoria_risco_v2.rb → risk_audit_v2.rb} +35 -35
  110. data/lib/falaai-api/models/{auditoria_risco_v2_response.rb → risk_audit_v2_response.rb} +7 -7
  111. data/lib/falaai-api/models/{auditoria_risco_verdict_v2.rb → risk_audit_verdict_v2.rb} +6 -6
  112. data/lib/falaai-api/models/transcription_response.rb +2 -2
  113. data/lib/falaai-api/models/transcription_usage.rb +2 -2
  114. data/lib/falaai-api/models/update_email_alert_request.rb +2 -2
  115. data/lib/falaai-api/models/update_webhook_request.rb +2 -2
  116. data/lib/falaai-api/models/usage_by_key_item.rb +2 -2
  117. data/lib/falaai-api/models/usage_log_item.rb +2 -2
  118. data/lib/falaai-api/models/usage_log_response.rb +2 -2
  119. data/lib/falaai-api/models/validation_error.rb +2 -2
  120. data/lib/falaai-api/models/version_response.rb +2 -2
  121. data/lib/falaai-api/models/webhook_event.rb +2 -2
  122. data/lib/falaai-api/models/webhook_item.rb +2 -2
  123. data/lib/falaai-api/models/webhook_list_response.rb +2 -2
  124. data/lib/falaai-api/models/whatsapp_conversation.rb +356 -0
  125. data/lib/falaai-api/models/whatsapp_conversations_response.rb +285 -0
  126. data/lib/falaai-api/models/whatsapp_meta.rb +570 -0
  127. data/lib/falaai-api/models/whatsapp_speaker.rb +192 -0
  128. data/lib/falaai-api/models/whatsapp_usage.rb +246 -0
  129. data/lib/falaai-api/version.rb +3 -3
  130. data/lib/falaai-api.rb +29 -22
  131. metadata +60 -42
  132. data/docs/AuditoriaRiscoDetectionsV2.md +0 -26
  133. data/docs/AuditoriaRiscoV2.md +0 -46
  134. data/docs/AuditoriaRiscoV2Response.md +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce5138e63a53b8aa63fc294b5da58caae86fc8d871c5b047522e0a06742eebc4
4
- data.tar.gz: 8c384866a62861e5f6f4cad85c26c6e853d2f64b4123a7e8cb60b8becbe6167f
3
+ metadata.gz: d83d046b979cd6c1d09c21c3c76a82ea6b0d17131e1018b972a7fea0a3a50f3e
4
+ data.tar.gz: ba6256865b059b177181ce24f00cd857a2df99b0af69584fd8b4131b3a00d7df
5
5
  SHA512:
6
- metadata.gz: 4d3ca8cd91d02b7ddb9f2c5744aca963c44f3335af5d2755b4ffe9ac68bd965e56d0873ccfee3f4098c7b86839f785bba7e8316538019203fbd1bb001d1f2d73
7
- data.tar.gz: cd3bf3c1b9cb76c12afa102b0cd08cd1c4ff1b3782edde784270aef24ce706e97376268fa5316e922e249f9adc1c13b5c1e5e2748cc9d0959e6e65aacef94464
6
+ metadata.gz: 74c598532ababe5e246b16f3e260886235f8b5e7f25df353b3d7cd2dc27ee392c90dbd8b1d0fac9ece144e7f04efa1209368c102c847e5008e476eecf1a8c8be
7
+ data.tar.gz: d3590c7c1c2e1e20bb4157f73125daae0c297dff4d44b985f3fcb7df100f4233a3672e9e200e2f68592fa61b0cf804c2099bfeb2f7b3fc815221bf738aea537a
data/README.md CHANGED
@@ -1,339 +1,237 @@
1
- # FalaAI API Ruby SDK - Speech-to-Text, Call Analytics & Compliance Audit
2
-
3
- [![version](https://img.shields.io/gem/v/falaai-api)](https://rubygems.org/gems/falaai-api)
4
- [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/ActionTecBr/falaai-api-ruby/blob/main/LICENSE)
5
- [![build](https://github.com/ActionTecBr/falaai-api-ruby/actions/workflows/ci.yml/badge.svg)](https://github.com/ActionTecBr/falaai-api-ruby/actions/workflows/ci.yml)
6
-
7
- Official Ruby SDK for the **FalaAI API** - call transcription, conversation intelligence and compliance auditing (**COPC CX**, **ISO 18295-1**).
8
-
9
- ## What is FalaAI API?
10
-
11
- FalaAI API turns conversations into auditable business intelligence, in three steps:
12
-
13
- 1. **Transcribe** - audio (calls, voice notes, meetings) to text, with speaker separation.
14
- 2. **Diagnose** - summary, reason, recommended action, topic and sentiment per conversation.
15
- 3. **Audit compliance** - risk score and violations against **COPC CX** and **ISO 18295-1**.
16
-
17
- It works with **phone calls and call recordings** (PABX IP, Asterisk, FreePBX, contact center),
18
- **messaging** (WhatsApp, Telegram, web chat, SMS) and email - anything that can be turned into
19
- text. Three core endpoints (plus health, usage, webhooks and email alerts), one API key, no setup.
20
-
21
- ## Who it's for
22
-
23
- | Role | What they get |
24
- | --- | --- |
25
- | **Contact Center / Quality** | Audit 100% of conversations instead of a sample |
26
- | **Compliance / Legal** | Forensic, auditable evidence for audits and disputes |
27
- | **CX / Operations** | Risk score, sentiment and reason for every conversation |
28
- | **Developers** | One typed SDK, three core endpoints, one API key |
29
- | **Data / BI** | Clean, typed JSON ready for your database or BI tool |
30
-
31
- ## Install
32
-
33
- ```bash
34
- gem install falaai-api
35
- ```
36
-
37
- ## Quick start
38
-
39
- ```ruby
40
- require "falaai-api"
41
-
42
- config = FalaAI::Configuration.new
43
- config.scheme = "https"
44
- config.host = "api01-falaai.action.tec.br"
45
- config.access_token = "fai_xxxxxx"
46
-
47
- client = FalaAI::ApiClient.new(config)
48
- speech = FalaAI::SpeechApi.new(client)
49
-
50
- response, status = speech.create_transcription_v1_audio_transcriptions_post_with_http_info(
51
- File.open("call.mp3"),
52
- model: "falaai-transcribe-1", language: "pt"
53
- )
54
-
55
- puts response.text
56
- ```
57
-
58
- ## Request and response examples
59
-
60
- Real requests and responses, captured against the live API.
61
-
62
- ### Health
63
-
64
- **Request**
65
-
66
- ```bash
67
- curl https://api01-falaai.action.tec.br/v1/health \
68
- -H "Authorization: Bearer fai_xxxxxx"
69
- ```
70
-
71
- **Response**
72
-
73
- ```json
74
- {
75
- "status": "ok",
76
- "version": "api_v1.21.47",
77
- "uptime_seconds": 92855,
78
- "database": true,
79
- "phase": "production",
80
- "launch_date": "2026-08-01"
81
- }
82
- ```
83
-
84
- ### Transcribe
85
-
86
- **Response** (the request is in [Quick start](#quick-start))
87
-
88
- ```json
89
- {
90
- "id": "tr-a38a97d0-452e-4519-b6bb-3c63694bf7ae",
91
- "object": "transcription",
92
- "model": "falaai-transcribe-1",
93
- "filename": "analise_25s.mp3",
94
- "processed_at": "2026-09-23T17:42:54.242449+00:00",
95
- "usage": {
96
- "audio_seconds": 25.0,
97
- "credits_consumed": 25,
98
- "processing_ms": 951
99
- },
100
- "language": "por",
101
- "duration_seconds": 25.0,
102
- "text": "Novatechno tudo, bom dia. Bom dia, Mateus. Tudo bem? Bem e você? Tudo bem. Não tem nada no sistema. Eu queria ver se de ...",
103
- "dialog": "Speaker 1: [00:00:01.639 - 00:00:02.560] Novatechno tudo, bom dia.\nSpeaker 2: [00:00:02.980 - 00:00:03.980] Bom dia, Mateus. Tudo bem?\nSpeaker 1: [00:00:04.700 - 00:00:05.179] Bem e você?\nSpeaker 2: [ ...",
104
- "audio_events": [
105
- {
106
- "event": "[tosse]",
107
- "start_s": 22.06,
108
- "end_s": 22.44,
109
- "duration_s": 0.38,
110
- "formatted_timestamp": "00:00:22.059"
111
- }
112
- ],
113
- "event_types": [
114
- "[tosse]"
115
- ],
116
- "word_count": 129,
117
- "input": {
118
- "duration_s": 25.2,
119
- "original_format": "mp3",
120
- "codec": "mp3",
121
- "sample_rate": 8000,
122
- "channels": 1
123
- },
124
- "language_confidence": 1.0,
125
- "client_reference_id": "readme-example"
126
- }
127
- ```
128
-
129
- ### Diagnose
130
-
131
- **Request**
132
-
133
- ```bash
134
- curl https://api01-falaai.action.tec.br/v1/analyze/diagnostic \
135
- -H "Authorization: Bearer fai_xxxxxx" \
136
- -H "Content-Type: application/json" \
137
- -d '{"dialog": "<transcription dialog>", "language": "pt-BR", "duration_seconds": 25.0}'
138
- ```
139
-
140
- **Response**
141
-
142
- ```json
143
- {
144
- "id": "di-15c79d7c-7245-4af4-9a4e-ead237c1a6ed",
145
- "response_language": "pt-BR",
146
- "object": "analysis",
147
- "analysis": {
148
- "dialogue_summary": {
149
- "explanation": "O cliente (Speaker 2) contatou a Novatechno (Speaker 1) para obter informações sobre um produto (código 4675005) que saiu de linha. O cliente já realizou uma pe ..."
150
- },
151
- "contact_reason": {
152
- "explanation": "O cliente busca informação sobre qual produto substituiu o código 4675005, que saiu de linha."
153
- },
154
- "identified_action": {
155
- "list_choice": "Sem Ação",
156
- "justification": "O cliente buscou informações sobre um produto que saiu de linha, mas a conversa terminou sem uma ação definida ou resolução.",
157
- "evidence_phrases": [
158
- "Novatechno tudo, bom dia.",
159
- "Bom dia, Mateus. Tudo bem?",
160
- "Tudo bem. Não tem nada no sistema. Eu queria ver se de repente você tem alguma informação.",
161
- "Quatro meia sete cinco zero zero cinco saiu de linha. Ééé, eu procurei no Google ver se o que entrou no lugar. Aí ele fala"
162
- ]
163
- },
164
- "identified_label": {
165
- "list_choice": "Pedido de Informação",
166
- "justification": "O cliente busca informações sobre um produto que saiu de linha, perguntando o que o substituiu, indicando uma necessidade de dados.",
167
- "evidence_phrases": [
168
- "Não tem nada no sistema. Eu queria ver se de repente você tem alguma informação.",
169
- "É, o produto, posso te falar o código?",
170
- ... (truncated)
171
- ```
172
-
173
- ### Audit compliance
174
-
175
- **Request**
176
-
177
- ```bash
178
- curl https://api01-falaai.action.tec.br/v1/analyze/auditoriaRisco \
179
- -H "Authorization: Bearer fai_xxxxxx" \
180
- -H "Content-Type: application/json" \
181
- -d '{"dialog": "<transcription dialog>", "language": "pt-BR", "duration_seconds": 25.0, "response_format": "v2"}'
182
- ```
183
-
184
- **Response**
185
-
186
- ```json
187
- {
188
- "response": {
189
- "meta": {
190
- "id": "ar-3439fd5f-1932-4ebe-bfb5-944ec1046e60",
191
- "usage": {
192
- "characters": 378,
193
- "credits_consumed": 90,
194
- "processing_ms": 6534
195
- },
196
- "object": "auditoria_risco",
197
- "call_duration_s": 25.0,
198
- "analyzed_at": "2026-09-23T17:43:02.092299",
199
- "client_reference_id": "readme-example"
200
- },
201
- "participants": {
202
- "identified": [
203
- {
204
- "confidence": "high",
205
- "source": "input",
206
- "evidence": "fornecido pelo input",
207
- "interlocutor": "Speaker 1",
208
- "name": "Mateus",
209
- "role": "agent"
210
- },
211
- {
212
- "confidence": "high",
213
- "source": "input",
214
- "evidence": "fornecido pelo input",
215
- "interlocutor": "Speaker 2",
216
- "name": "Cliente",
217
- "role": "client"
218
- }
219
- ],
220
- "call_direction": "inbound",
221
- "role_inference_reliable": true,
222
- "identification_status": "input",
223
- "unidentified_items_count": 0
224
- },
225
- "verdict": {
226
- "label": "Limpa",
227
- "level_code": "LIMPA",
228
- "color": "#4fff4d",
229
- "icon": "mdi:check-circle",
230
- "risk_matrix": {
231
- "severity": "NOTE",
232
- "likelihood_avg": 0.0,
233
- "impact_avg": 0.0,
234
- "likelihood_level": "LOW",
235
- "impact_level": "LOW"
236
- },
237
- "applied_actions": [
238
- {
239
- "action_type": "nenhuma_acao",
240
- "label": "Nenhuma Acao",
241
- "description": "Nenhuma acao necessaria. A chamada nao apresentou deteccoes que exijam intervencao. Continuar monitoramento de rotina.",
242
- "priority": "BAIXO",
243
- "color": "#6B7280",
244
- "icon": "mdi:check-circle-outline",
245
- "condition": "sempre",
246
- "reason": "condição=sempre"
247
- }
248
- ],
249
- ... (truncated)
250
- ```
251
-
252
- ### The forensic HTML report
253
-
254
- The audit response carries **`response.html_report`** - the complete **forensic report as HTML**, encoded as a **base64 gzip** string (~19 KB). Decode it and open in a browser (or convert to PDF) to get the auditable evidence: timeline, audio events (MAC/MVAD/MOD), violations against **COPC CX** and **ISO 18295-1**, and the executive verdict.
255
-
256
- ```python
257
- import base64, gzip, json, httpx
258
-
259
- res = httpx.post(
260
- "https://api01-falaai.action.tec.br/v1/analyze/auditoriaRisco",
261
- headers={"Authorization": "Bearer fai_xxxxxx"},
262
- json={"dialog": dialog, "language": "pt-BR", "duration_seconds": 25.0, "response_format": "v2"},
263
- timeout=900,
264
- ).json()
265
-
266
- html = gzip.decompress(base64.b64decode(res["response"]["html_report"])).decode("utf-8")
267
- open("report.html", "w", encoding="utf-8").write(html)
268
- ```
269
-
270
- ## Use cases
271
-
272
- - Call and voice-note **transcription** with speaker separation
273
- - **Contact center quality assurance (QA)** automation
274
- - **Compliance auditing** against **COPC CX** and **ISO 18295-1**
275
- - **Risk detection** - churn risk, legal threats, escalation
276
- - **WhatsApp, Telegram and chat** conversation analysis
277
- - **CRM and help desk** enrichment
278
- - **Call analytics** and **speech-to-text** at scale - every call transcribed and scored
279
- - **Conversation intelligence** - summary, reason, action, topic and **sentiment analysis** per conversation
280
- - **Speaker diarization** (speaker separation) on stereo or mono audio
281
- - **Quality monitoring** and **agent performance** - audit 100% instead of a sample
282
- - Built from a single **OpenAPI** contract, so all SDKs stay in sync
283
- - **LGPD**-aware handling of customer conversations
284
-
285
- ## Where it fits
286
-
287
- Plugs into **omnichannel service platforms**, **help desks**, **chatbots** and **unified messaging** - anywhere a conversation becomes text.
288
-
289
- Common Ruby stacks in contact center, CRM and help desk - if you build on any of these, the SDK drops in:
290
-
291
- Chatwoot - Zendesk Support - Discourse - Fat Free CRM
292
-
293
- > Product names are trademarks of their respective owners, listed as common stacks in this ecosystem. No partnership is implied.
294
-
295
- ## Endpoints
296
-
297
- | Method | Path | Description |
298
- | --- | --- | --- |
299
- | `POST` | `/v1/audio/transcriptions` | Audio to text, with speaker separation |
300
- | `POST` | `/v1/analyze/diagnostic` | Conversation analysis - summary, reason, action, topic, sentiment |
301
- | `POST` | `/v1/analyze/auditoriaRisco` | Compliance audit - risk score and violations |
302
- | `GET` | `/v1/health` | Service health check (public) |
303
-
304
- All endpoints require `Authorization: Bearer fai_xxxxxx`.
305
- Full reference: <https://api01-falaai.action.tec.br/docs>
306
- Other operations: usage logs, webhooks and email alerts - see the full reference.
307
-
308
- ## Links
309
-
310
- - **Product:** <https://falaai.action.tec.br/api>
311
- - **API reference:** <https://api01-falaai.action.tec.br/docs>
312
- - **Get an API key:** <https://falaai.action.tec.br/api/auth>
313
- - **Package (RubyGems):** <https://rubygems.org/gems/falaai-api>
314
- - **Source:** <https://github.com/ActionTecBr/falaai-api-ruby>
315
-
316
- ## Other official SDKs
317
-
318
- | Language | Install | Package |
319
- | --- | --- | --- |
320
- | **Python** | `pip install falaai-api` | [PyPI](https://pypi.org/project/falaai-api/) |
321
- | **Node.js / TypeScript** | `npm install falaai-api` | [npm](https://www.npmjs.com/package/falaai-api) |
322
- | **PHP** | `composer require actiontecbr/falaai-api` | [Packagist](https://packagist.org/packages/actiontecbr/falaai-api) |
323
- | **Go** | `go get github.com/actiontecbr/falaai-api` | [pkg.go.dev](https://pkg.go.dev/github.com/actiontecbr/falaai-api) |
324
- | **Ruby** | `gem install falaai-api` | [RubyGems](https://rubygems.org/gems/falaai-api) |
325
- | **Java** | `io.github.actiontecbr:falaai-api` | [Maven Central](https://central.sonatype.com/artifact/io.github.actiontecbr/falaai-api) |
326
- | **.NET / C#** | `dotnet add package FalaAI.Api` | [NuGet](https://www.nuget.org/packages/FalaAI.Api) |
327
-
328
- ## Requirements, support and more
329
-
330
- - **Requirements:** an API key (`fai_...`) and a runtime able to upload audio files.
331
- - **Documentation:** <https://api01-falaai.action.tec.br/docs>
332
- - **Support:** open an issue in this repository.
333
- - **Security:** responsible disclosure policy in [SECURITY.md](SECURITY.md).
334
- - **Contributing:** see [CONTRIBUTING.md](CONTRIBUTING.md) · [Code of Conduct](CODE_OF_CONDUCT.md).
335
- - **Changelog:** see [CHANGELOG.md](CHANGELOG.md).
336
-
337
- ## License
338
-
339
- MIT (c) 2026 Action Tec Br - see [LICENSE](LICENSE).
1
+ # falaai-api — Ruby SDK for Conversation Intelligence, Speech Analytics & Compliance
2
+
3
+ [![Gem version](https://img.shields.io/gem/v/falaai-api)](https://rubygems.org/gems/falaai-api)
4
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
5
+ [![CI](https://github.com/ActionTecBr/falaai-api-ruby/actions/workflows/ci.yml/badge.svg)](https://github.com/ActionTecBr/falaai-api-ruby/actions/workflows/ci.yml)
6
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://actiontecbr.github.io/falaai-api-ruby/)
7
+
8
+ Official **Ruby SDK** for the **FalaAI API** — transcribe audio, analyze conversations and audit compliance (COPC CX, ISO 18295-1). **Use each API independently or combine them into your own pipeline.**
9
+
10
+ > Analyze calls, contact-center recordings, voice notes, chat and email. Get speaker-separated transcripts, summaries, reasons, actions, sentiment and a **compliance risk score**.
11
+
12
+ ## Use any FalaAI API independently
13
+
14
+ FalaAI is a set of **independent REST APIs**. You **do not** need FalaAI Transcription to use FalaAI analysis or compliance auditing. If your application already has a transcript, send that text straight to the analysis APIs.
15
+
16
+ | If you have... | Use |
17
+ |---|---|
18
+ | Audio but no transcript | `FalaAI::SpeechApi` — Transcription |
19
+ | An existing transcript | `FalaAI::AnalysisApi` — Diagnostic |
20
+ | A transcript needing compliance analysis | `FalaAI::AnalysisApi` — Risk Audit |
21
+ | An existing transcript needing both | Diagnostic + Risk Audit |
22
+ | Your own STT provider (Whisper, Deepgram...) | Skip FalaAI Transcription |
23
+
24
+ ```text
25
+ Your STT -> FalaAI Diagnostic -> FalaAI Risk Audit
26
+ Telegram voice -> your STT -> FalaAI Risk Audit
27
+ 3CX / Asterisk / Genesys transcript -> FalaAI Diagnostic -> FalaAI Risk Audit
28
+ CRM conversation -> FalaAI Risk Audit
29
+ ```
30
+
31
+ ## Install
32
+
33
+ ```bash
34
+ gem install falaai-api
35
+ ```
36
+
37
+ Requires **Ruby 2.7+**.
38
+
39
+ ## Quickstart
40
+
41
+ ### 1. Get an API key
42
+ Create a free account and copy your `fai_` key: <https://falaai.action.tec.br/api/auth> (or the [Dashboard](https://falaai.action.tec.br/api/dashboard)).
43
+
44
+ ### 2. Set environment variables
45
+
46
+ ```bash
47
+ FALAAI_BASE_URL=https://api01-falaai.action.tec.br
48
+ FALAAI_API_KEY=fai_xxxxxxxx
49
+ ```
50
+
51
+ ### 3. Transcribe a call (audio -> text)
52
+
53
+ ```ruby
54
+ require 'falaai-api'
55
+
56
+ config = FalaAI::Configuration.new
57
+ config.host = ENV.fetch('FALAAI_BASE_URL', 'https://api01-falaai.action.tec.br')
58
+ config.access_token = ENV['FALAAI_API_KEY']
59
+ client = FalaAI::ApiClient.new(config)
60
+
61
+ transcription, _status = FalaAI::SpeechApi.new(client).create_transcription_v1_audio_transcriptions_post_with_http_info(
62
+ File.open('call.mp3'),
63
+ { model: 'falaai-transcribe-1', language: 'pt', client_reference_id: 'call_202609271408' }
64
+ )
65
+
66
+ puts JSON.pretty_generate(transcription)
67
+ ```
68
+
69
+ Expected response (abridged):
70
+
71
+ ```json
72
+ {
73
+ "id": "tr-...",
74
+ "object": "transcription",
75
+ "model": "falaai-transcribe-1",
76
+ "language": "por",
77
+ "duration_seconds": 25.0,
78
+ "text": "...",
79
+ "dialog": "Speaker 1: [...] ...",
80
+ "usage": { "audio_seconds": 25.0, "credits_consumed": 25, "processing_ms": 951 }
81
+ }
82
+ ```
83
+
84
+ > Only need analysis? **Skip step 3** and call `FalaAI::AnalysisApi` with your own transcript (use the `text` field for a plain transcript).
85
+
86
+ ### 4. Analyze or audit an existing transcript (no transcription needed)
87
+
88
+ ```ruby
89
+ require 'falaai-api'
90
+
91
+ config = FalaAI::Configuration.new
92
+ config.host = ENV['FALAAI_BASE_URL']
93
+ config.access_token = ENV['FALAAI_API_KEY']
94
+ client = FalaAI::ApiClient.new(config)
95
+ analysis = FalaAI::AnalysisApi.new(client)
96
+
97
+ transcript = 'Good morning, how can I help? I need to cancel my subscription.'
98
+
99
+ # 5 analyses in one call: summary, reason, action, topic, sentiment
100
+ diagnostic, _status = analysis.create_diagnostic_v1_analyze_diagnostic_post_with_http_info(
101
+ FalaAI::DiagnosticRequest.new(text: transcript, language: 'pt-BR', duration_seconds: 81.46)
102
+ )
103
+
104
+ # Compliance risk score + violations + auditable report
105
+ audit, _status = analysis.create_risk_audit_v1_analyze_risk_audit_post_with_http_info(
106
+ FalaAI::RiskAuditRequest.new(text: transcript, language: 'pt-BR', response_language: 'pt-BR', duration_seconds: 81.46)
107
+ )
108
+ ```
109
+
110
+ ## What is FalaAI API?
111
+
112
+ FalaAI API is an **AI conversation-intelligence API** for analyzing customer-service, contact-center, sales, messaging and other business conversations. It combines speech-to-text (with speaker diarization and audio-event detection), conversation analysis (summary, contact reason, action taken, topic classification, sentiment) and a **compliance/risk audit** against **COPC CX** and **ISO 18295-1**. Conversation content is processed and discarded (zero-storage).
113
+
114
+ ## What can you do with FalaAI?
115
+
116
+ - **Transcribe** audio to text with speaker separation and audio events.
117
+ - **Diagnose** a conversation: summary, reason, action taken, topic and sentiment.
118
+ - **Audit** conversations: compliance risk score, detections/violations and an auditable HTML report.
119
+ - **Track usage**, **manage webhooks** and **email alerts**, and **health/version** checks.
120
+
121
+ ## Use cases
122
+
123
+ - **Contact center / Quality** - audit 100% of conversations instead of a sample.
124
+ - **Compliance / Legal** - auditable evidence for audits and disputes.
125
+ - **CX / Operations** - risk score, sentiment and reason per conversation.
126
+ - **BI / Data** - typed JSON ready for your database or analytics stack.
127
+
128
+ ## Why FalaAI
129
+
130
+ - **Audit 100%, not a sample** - every conversation gets a score, not a random QA sample.
131
+ - **Auditable by design** - a compliance risk score with detections/violations and an HTML report you can hand to an auditor.
132
+ - **Credits, not tokens** - you know exactly what each call costs (per second of audio, per character of text, per conversation). Monthly plans + non-expiring top-up packs.
133
+ - **Zero-storage** - audio/text/results are processed and discarded; only usage/audit records remain. TLS in transit + at rest, per-account isolation (multitenancy), LGPD (you are the controller; Action Tec is the processor).
134
+ - **3 native languages** (PT/EN/ES) · **start free** (no card).
135
+ - **B2B ready** - one Enterprise plan serves N clients, no per-user fee (ideal for ISVs).
136
+
137
+ ## Integrations
138
+
139
+ FalaAI is **language-independent** - integrate at **any point** of your pipeline (capture, transcription, analysis or audit). Common ecosystems:
140
+
141
+ | Ecosystem | How |
142
+ |---|---|
143
+ | **PABX / telephony (3CX, Asterisk, Genesys)** | Send the recording to Transcribe, or the transcript to Diagnostic/Risk Audit. |
144
+ | **CRM / ERP (Odoo, Salesforce, SAP Service Cloud, HubSpot)** | Attach the structured JSON (summary, reason, sentiment, risk score) to the record. |
145
+ | **Contact center / QA (Zendesk, Twilio Flex, Take Blip)** | Batch-audit conversations and feed the score into your QA dashboard. |
146
+ | **Chatbots / messaging (WhatsApp, Telegram, Microsoft Teams)** | Extract conversations from an export and analyze them. |
147
+ | **BI / Data** | Typed JSON ready for your warehouse or analytics stack. |
148
+
149
+ > These are **integration examples**, not certified native integrations. Any platform can integrate through **REST / cURL** - the standard, language-independent path. Native ingestion connectors are on the roadmap.
150
+
151
+ ## BYOT - Bring Your Own Transcription
152
+
153
+ Already have speech-to-text (Whisper, Deepgram, AssemblyAI, your own)? **Skip Transcription** and send the text straight to **Diagnostic** and/or **Risk Audit**. You only pay for what you use.
154
+
155
+ ## SDK surface (Ruby)
156
+
157
+ | Class | Namespace | Purpose |
158
+ |---|---|---|
159
+ | `Configuration` | `FalaAI` | `host`, `access_token` |
160
+ | `ApiClient` | `FalaAI` | `FalaAI::ApiClient.new(config)` |
161
+ | `HealthApi` | `FalaAI` | `health_check` |
162
+ | `SpeechApi` | `FalaAI` | `create_transcription_v1_audio_transcriptions_post_with_http_info(...)` |
163
+ | `AnalysisApi` | `FalaAI` | `create_diagnostic_v1_analyze_diagnostic_post_with_http_info(...)`, `create_risk_audit_v1_analyze_risk_audit_post_with_http_info(...)` |
164
+ | `WhatsappApi` | `FalaAI` | `extract_conversations_v1_whatsapp_extract_conversations_post_with_http_info(...)` |
165
+ | `UsageApi` / `WebhooksApi` / `EmailAlertsApi` / `VersionApi` | `FalaAI` | management |
166
+ | Models | `FalaAI` | `DiagnosticRequest`, `RiskAuditRequest`, `Participant`, `DiagnosticAudioEvent`, `WhatsappConversationsResponse` |
167
+ | `ApiError` | `FalaAI` | HTTP errors |
168
+
169
+ > Model IDs: `falaai-transcribe-1`, `falaai-diagnostic-1`, `falaai-risk-audit-1`.
170
+
171
+ ## Examples
172
+
173
+ Runnable examples in [`examples/`](./examples): `health.rb`, `transcribe.rb`, `diagnose.rb`, `audit.rb`, `whatsapp.rb`.
174
+
175
+ ## Authentication
176
+
177
+ Every request requires `Authorization: Bearer fai_<your_key>` — except the public endpoints (`GET/HEAD /v1/health`, `GET /api/version`). Set the key with `Configuration#access_token=` (or `FALAAI_API_KEY`).
178
+
179
+ ## Error handling
180
+
181
+ Non-2xx responses raise `FalaAI::ApiError`.
182
+
183
+ ```ruby
184
+ require 'falaai-api'
185
+
186
+ begin
187
+ health = FalaAI::HealthApi.new(client).health_check
188
+ puts health.status
189
+ rescue FalaAI::ApiError => e
190
+ warn "FalaAI API error: #{e.message}"
191
+ end
192
+ ```
193
+
194
+ ## Production usage
195
+
196
+ - Store API keys in environment variables or a secret manager — never hard-code.
197
+ - Reuse the `ApiClient` across requests.
198
+ - Handle `FalaAI::ApiError` explicitly.
199
+
200
+ ## Compatibility
201
+
202
+ | Requirement | Version |
203
+ |---|---|
204
+ | Ruby | 2.7+ |
205
+ | API | v1.21.51 |
206
+
207
+ ## Documentation
208
+
209
+ - **SDK docs (this language):** <https://actiontecbr.github.io/falaai-api-ruby/>
210
+ - **API reference (Swagger UI):** <https://api01-falaai.action.tec.br/docs>
211
+ - **OpenAPI contract:** <https://api01-falaai.action.tec.br/openapi.json>
212
+ - **Sandbox:** <https://falaai.action.tec.br/api#playground>
213
+ - **Quickstart:** <https://falaai.action.tec.br/api/quickstart>
214
+ - **Product page:** <https://falaai.action.tec.br/api>
215
+
216
+ ## Versioning
217
+
218
+ Semantic versioning; the SDK version tracks the API version (`1.21.51`). See [CHANGELOG.md](CHANGELOG.md) and [Releases](https://github.com/ActionTecBr/falaai-api-ruby/releases).
219
+
220
+ ## Security
221
+
222
+ See [SECURITY.md](SECURITY.md). Never commit real keys — use environment variables.
223
+
224
+ ## Contributing
225
+
226
+ See [CONTRIBUTING.md](CONTRIBUTING.md).
227
+
228
+ ## License
229
+
230
+ [MIT](LICENSE).
231
+
232
+ ## Links
233
+
234
+ - Website: <https://falaai.action.tec.br>
235
+ - API base URL: <https://api01-falaai.action.tec.br>
236
+ - GitHub organization: <https://github.com/ActionTecBr>
237
+ - Other SDKs: Python, Node.js, PHP, Go, Java, .NET.